]> git.ipfire.org Git - people/ms/dnsmasq.git/commitdiff
AD bit in queries handled as RFC6840 p5.7
authorSimon Kelley <simon@thekelleys.org.uk>
Thu, 6 Feb 2014 18:14:09 +0000 (18:14 +0000)
committerSimon Kelley <simon@thekelleys.org.uk>
Thu, 6 Feb 2014 18:14:09 +0000 (18:14 +0000)
src/forward.c
src/rfc1035.c

index 073b2c9012d7020e2e41055bc9d3ae645d72d217..2088f9890d37db0713146ff9f67f9c0f03d63024 100644 (file)
@@ -249,9 +249,6 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
 #endif
  unsigned int gotname = extract_request(header, plen, daemon->namebuff, NULL);
 
-  /* RFC 4035: sect 4.6 para 2 */
-  header->hb4 &= ~HB4_AD;
-  
   /* may be no servers available. */
   if (!daemon->servers)
     forward = NULL;
@@ -1283,9 +1280,6 @@ unsigned char *tcp_request(int confd, time_t now,
       if ((checking_disabled = header->hb4 & HB4_CD))
        no_cache_dnssec = 1;
        
-      /* RFC 4035: sect 4.6 para 2 */
-      header->hb4 &= ~HB4_AD;
-      
       if ((gotname = extract_request(header, (unsigned int)size, daemon->namebuff, &qtype)))
        {
 #ifdef HAVE_AUTH
index ac8c4ae8ab3bbc9a9ead2def8e42353e5857fd1e..5515ea56b4d4b82373e62da4473a773c995a5d68 100644 (file)
@@ -1468,7 +1468,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
   struct mx_srv_record *rec;
   size_t len;
  
-  /* Don't return AD set even for local data if checking disabled. */
+  /* Don't return AD set if checking disabled. */
   if (header->hb4 & HB4_CD)
     sec_data = 0;
 
@@ -2260,17 +2260,20 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
   header->ancount = htons(anscount);
   header->nscount = htons(0);
   header->arcount = htons(addncount);
+
+  /* RFC 6840 5.7 */
+  if (header->hb4 & HB4_AD)
+    sec_reqd = 1;
   
   header->hb4 &= ~HB4_AD;
+  
   len = ansp - (unsigned char *)header;
   
   if (have_pseudoheader)
-    {
-      len = add_pseudoheader(header, len, (unsigned char *)limit, 0, NULL, 0, sec_reqd);
-      if (sec_reqd && sec_data)
-       header->hb4 |= HB4_AD;
-
-    }
+    len = add_pseudoheader(header, len, (unsigned char *)limit, 0, NULL, 0, sec_reqd);
+  
+  if (sec_reqd && sec_data)
+    header->hb4 |= HB4_AD;
   
   return len;
 }