mirror of
http://thekelleys.org.uk/git/dnsmasq.git
synced 2026-10-24 12:04:38 +00:00
Fix --add-subnet when returning empty or default subnet.
This commit is contained in:
1 parent
7480aeffc8
commit
22fe2fd038
2 files changed
+21
-16
No files matched your search
+14
-10
@@ -281,8 +281,11 @@ static size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source)
|
|||||||
void *addrp;
|
void *addrp;
|
||||||
int sa_family = source->sa.sa_family;
|
int sa_family = source->sa.sa_family;
|
||||||
|
|
||||||
|
opt->source_netmask = 0;
|
||||||
|
opt->scope_netmask = 0;
|
||||||
|
|
||||||
#ifdef HAVE_IPV6
|
#ifdef HAVE_IPV6
|
||||||
if (source->sa.sa_family == AF_INET6)
|
if (source->sa.sa_family == AF_INET6 && daemon->add_subnet6)
|
||||||
{
|
{
|
||||||
opt->source_netmask = daemon->add_subnet6->mask;
|
opt->source_netmask = daemon->add_subnet6->mask;
|
||||||
if (daemon->add_subnet6->addr_used)
|
if (daemon->add_subnet6->addr_used)
|
||||||
@@ -293,8 +296,9 @@ static size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source)
|
|||||||
else
|
else
|
||||||
addrp = &source->in6.sin6_addr;
|
addrp = &source->in6.sin6_addr;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (source->sa.sa_family == AF_INET && daemon->add_subnet4)
|
||||||
{
|
{
|
||||||
opt->source_netmask = daemon->add_subnet4->mask;
|
opt->source_netmask = daemon->add_subnet4->mask;
|
||||||
if (daemon->add_subnet4->addr_used)
|
if (daemon->add_subnet4->addr_used)
|
||||||
@@ -302,20 +306,20 @@ static size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source)
|
|||||||
sa_family = daemon->add_subnet4->addr.sa.sa_family;
|
sa_family = daemon->add_subnet4->addr.sa.sa_family;
|
||||||
addrp = get_addrp(&daemon->add_subnet4->addr, sa_family);
|
addrp = get_addrp(&daemon->add_subnet4->addr, sa_family);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
addrp = &source->in.sin_addr;
|
addrp = &source->in.sin_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
opt->scope_netmask = 0;
|
#ifdef HAVE_IPV6
|
||||||
|
opt->family = htons(sa_family == AF_INET6 ? 2 : 1);
|
||||||
|
#else
|
||||||
|
opt->family = htons(1);
|
||||||
|
#endif
|
||||||
|
|
||||||
len = 0;
|
len = 0;
|
||||||
|
|
||||||
if (opt->source_netmask != 0)
|
if (opt->source_netmask != 0)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_IPV6
|
|
||||||
opt->family = htons(sa_family == AF_INET6 ? 2 : 1);
|
|
||||||
#else
|
|
||||||
opt->family = htons(1);
|
|
||||||
#endif
|
|
||||||
len = ((opt->source_netmask - 1) >> 3) + 1;
|
len = ((opt->source_netmask - 1) >> 3) + 1;
|
||||||
memcpy(opt->addr, addrp, len);
|
memcpy(opt->addr, addrp, len);
|
||||||
if (opt->source_netmask & 7)
|
if (opt->source_netmask & 7)
|
||||||
|
|||||||
+7
-6
@@ -1647,12 +1647,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
|
|||||||
|
|
||||||
daemon->add_subnet4 = new;
|
daemon->add_subnet4 = new;
|
||||||
|
|
||||||
new = opt_malloc(sizeof(struct mysubnet));
|
|
||||||
if (comma)
|
if (comma)
|
||||||
{
|
{
|
||||||
if ((end = split_chr(comma, '/')))
|
new = opt_malloc(sizeof(struct mysubnet));
|
||||||
{
|
if ((end = split_chr(comma, '/')))
|
||||||
/* has subnet+len */
|
{
|
||||||
|
/* has subnet+len */
|
||||||
err = parse_mysockaddr(comma, &new->addr);
|
err = parse_mysockaddr(comma, &new->addr);
|
||||||
if (err)
|
if (err)
|
||||||
ret_err(err);
|
ret_err(err);
|
||||||
@@ -1665,8 +1665,9 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
|
|||||||
if (!atoi_check(comma, &new->mask))
|
if (!atoi_check(comma, &new->mask))
|
||||||
ret_err(gen_err);
|
ret_err(gen_err);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
daemon->add_subnet6 = new;
|
daemon->add_subnet6 = new;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user