summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Kelley <simon@thekelleys.org.uk>2014-12-16 18:25:17 +0000
committerSimon Kelley <simon@thekelleys.org.uk>2014-12-16 18:25:17 +0000
commit3ad3f3bbd4ee716a7d2fb1e115cf89bd1b1a5de9 (patch)
tree1aef761813ae3425e361ea9996538b3f19adba64
parentad946d555dce44eb690c7699933b6ff40ab85bb6 (diff)
downloaddnsmasq-3ad3f3bbd4ee716a7d2fb1e115cf89bd1b1a5de9.tar.gz
Fix breakage of --domain=<domain>,<subnet>,local
-rw-r--r--CHANGELOG4
-rw-r--r--src/option.c18
2 files changed, 20 insertions, 2 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 9174b0b..9e6c7aa 100644
--- 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
diff --git a/src/option.c b/src/option.c
index b08e98e..209fa69 100644
--- a/src/option.c
+++ b/src/option.c
@@ -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;
}
}
}