Commit 22fe2fd0 authored by Simon Kelley's avatar Simon Kelley

Fix --add-subnet when returning empty or default subnet.

parent 7480aeff
...@@ -281,8 +281,11 @@ static size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source) ...@@ -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) ...@@ -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)
...@@ -306,16 +310,16 @@ static size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source) ...@@ -306,16 +310,16 @@ static size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source)
addrp = &source->in.sin_addr; addrp = &source->in.sin_addr;
} }
opt->scope_netmask = 0;
len = 0;
if (opt->source_netmask != 0)
{
#ifdef HAVE_IPV6 #ifdef HAVE_IPV6
opt->family = htons(sa_family == AF_INET6 ? 2 : 1); opt->family = htons(sa_family == AF_INET6 ? 2 : 1);
#else #else
opt->family = htons(1); opt->family = htons(1);
#endif #endif
len = 0;
if (opt->source_netmask != 0)
{
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)
......
...@@ -1647,9 +1647,9 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma ...@@ -1647,9 +1647,9 @@ 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)
{ {
new = opt_malloc(sizeof(struct mysubnet));
if ((end = split_chr(comma, '/'))) if ((end = split_chr(comma, '/')))
{ {
/* has subnet+len */ /* has subnet+len */
...@@ -1665,9 +1665,10 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma ...@@ -1665,9 +1665,10 @@ 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;
case '1': /* --enable-dbus */ case '1': /* --enable-dbus */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment