]> git.ipfire.org Git - people/ms/dnsmasq.git/commitdiff
Handle two interface-names, different interface, same name.
authorSimon Kelley <simon@thekelleys.org.uk>
Mon, 21 Oct 2013 17:19:35 +0000 (18:19 +0100)
committerSimon Kelley <simon@thekelleys.org.uk>
Mon, 21 Oct 2013 17:19:35 +0000 (18:19 +0100)
src/auth.c
src/rfc1035.c

index 52d2a682631637d870db1adf25125e982b502faf..50fb61dd8a26c86175b1571445b7bf37de8acb93 100644 (file)
@@ -357,29 +357,30 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
         flag = F_IPV6;
 #endif
        
-       for (intr = daemon->int_names; intr; intr = intr->next)
-        if (hostname_isequal(name, intr->name))
-          {
-            struct addrlist *addrlist;
-
-            addrlist = intr->addr4;
+       if (flag)
+        for (intr = daemon->int_names; intr; intr = intr->next)
+          if (hostname_isequal(name, intr->name))
+            {
+              struct addrlist *addrlist;
+              
+              addrlist = intr->addr4;
 #ifdef HAVE_IPV6
-            if (qtype == T_AAAA)
-              addrlist = intr->addr6;
+              if (qtype == T_AAAA)
+                addrlist = intr->addr6;
 #endif 
-            nxdomain = 0;
-       
-            for (; addrlist; addrlist = addrlist->next)  
-              if (local_query || filter_constructed_dhcp(zone, flag, &addrlist->addr))
-                {
-                  found = 1;
-                  log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
-                  if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
-                                          daemon->auth_ttl, NULL, qtype, C_IN, 
-                                          qtype == T_A ? "4" : "6", &addrlist->addr))
-                    anscount++;
-                }
-          }
+              nxdomain = 0;
+              
+              for (; addrlist; addrlist = addrlist->next)  
+                if (local_query || filter_constructed_dhcp(zone, flag, &addrlist->addr))
+                  {
+                    found = 1;
+                    log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
+                    if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+                                            daemon->auth_ttl, NULL, qtype, C_IN, 
+                                            qtype == T_A ? "4" : "6", &addrlist->addr))
+                      anscount++;
+                  }
+            }
        
        for (a = daemon->cnames; a; a = a->next)
         if (hostname_isequal(name, a->alias) )
index 573ec31a2f12b9e2a6c4fcca4d17f5fa1b68d1ac..fc6d09ca7cedaea4f17111931f69234c815e8dc7 100644 (file)
@@ -1725,29 +1725,39 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
              if (intr)
                {
                  struct addrlist *addrlist;
+                 int gotit = 0;
 
                  enumerate_interfaces(0);
                  
-                 addrlist = intr->addr4;
+                 for (intr = daemon->int_names; intr; intr = intr->next)
+                   if (hostname_isequal(name, intr->name))
+                     {
+                       addrlist = intr->addr4;
 #ifdef HAVE_IPV6
-                 if (type == T_AAAA)
-                   addrlist = intr->addr6;
+                       if (type == T_AAAA)
+                         addrlist = intr->addr6;
 #endif           
-                 ans = 1;
-                 if (!dryrun)
-                   {
-                     if (!addrlist)
-                       log_query(F_FORWARD | F_CONFIG | flag | F_NEG, name, NULL, NULL);
-                     else 
-                       for (; addrlist; addrlist = addrlist->next)
+                       ans = 1;
+                       if (!dryrun)
                          {
-                           log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
-                           if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
-                                                   daemon->local_ttl, NULL, type, C_IN, 
-                                                   type == T_A ? "4" : "6", &addrlist->addr))
-                             anscount++;
+                           if (addrlist)
+                             {
+                               gotit = 1;
+                               for (; addrlist; addrlist = addrlist->next)
+                                 {
+                                   log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
+                                   if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+                                                           daemon->local_ttl, NULL, type, C_IN, 
+                                                           type == T_A ? "4" : "6", &addrlist->addr))
+                                     anscount++;
+                                 }
+                             }
                          }
-                   }
+                     }
+                 
+                 if (!dryrun && !gotit)
+                   log_query(F_FORWARD | F_CONFIG | flag | F_NEG, name, NULL, NULL);
+                    
                  continue;
                }