]> git.ipfire.org Git - people/ms/dnsmasq.git/commitdiff
Fix breakage of --domain=<domain>,<subnet>,local
authorSimon Kelley <simon@thekelleys.org.uk>
Tue, 16 Dec 2014 18:25:17 +0000 (18:25 +0000)
committerSimon Kelley <simon@thekelleys.org.uk>
Tue, 16 Dec 2014 18:25:17 +0000 (18:25 +0000)
CHANGELOG
src/option.c

index 9174b0bd75dc8d4d1e58741c4bc333b37688b2bc..9e6c7aa4fd68532d1efd8c3fed82198c4a195305 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -10,6 +10,10 @@ version 2.73
            Use inotify for checking on updates to /etc/resolv.conf and
            friends under Linux. This fixes race conditions when the files are 
            updated rapidly and saves CPU by noy polling.
+
+           Fix breakage of --domain=<domain>,<subnet>,local - only reverse
+           queries were intercepted. THis appears to have been broken 
+           since 2.69. Thanks to Josh Stone for finding the bug.
        
 
 version 2.72
index b08e98e16f842e450be2af4b483a393b3b2fef48..209fa697660902dfdd4d8b711005ebdad8c7dc47 100644 (file)
@@ -1941,10 +1941,17 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
                              else
                                {
                                   /* generate the equivalent of
-                                     local=/<domain>/
                                      local=/xxx.yyy.zzz.in-addr.arpa/ */
                                  struct server *serv = add_rev4(new->start, msize);
                                  serv->flags |= SERV_NO_ADDR;
+
+                                 /* local=/<domain>/ */
+                                 serv = opt_malloc(sizeof(struct server));
+                                 memset(serv, 0, sizeof(struct server));
+                                 serv->domain = d;
+                                 serv->flags = SERV_HAS_DOMAIN | SERV_NO_ADDR;
+                                 serv->next = daemon->servers;
+                                 daemon->servers = serv;
                                }
                            }
                        }
@@ -1978,10 +1985,17 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
                              else 
                                {
                                  /* generate the equivalent of
-                                    local=/<domain>/
                                     local=/xxx.yyy.zzz.ip6.arpa/ */
                                  struct server *serv = add_rev6(&new->start6, msize);
                                  serv->flags |= SERV_NO_ADDR;
+                                 
+                                 /* local=/<domain>/ */
+                                 serv = opt_malloc(sizeof(struct server));
+                                 memset(serv, 0, sizeof(struct server));
+                                 serv->domain = d;
+                                 serv->flags = SERV_HAS_DOMAIN | SERV_NO_ADDR;
+                                 serv->next = daemon->servers;
+                                 daemon->servers = serv;
                                }
                            }
                        }