|
|
fad460 |
diff --git a/server/confpars.c b/server/confpars.c
|
|
|
fad460 |
index 12ab0e6..4454be9 100644
|
|
|
fad460 |
--- a/server/confpars.c
|
|
|
fad460 |
+++ b/server/confpars.c
|
|
|
fad460 |
@@ -3756,6 +3756,19 @@ add_ipv6_pool_to_subnet(struct subnet *subnet, u_int16_t type,
|
|
|
fad460 |
share->ipv6_pools[num_pools+1] = NULL;
|
|
|
fad460 |
}
|
|
|
fad460 |
|
|
|
fad460 |
+static void
|
|
|
fad460 |
+check_addr_in_subnet(struct subnet *subnet, struct iaddr *addr) {
|
|
|
fad460 |
+ char lowbuf [INET6_ADDRSTRLEN], netbuf [INET6_ADDRSTRLEN];
|
|
|
fad460 |
+
|
|
|
fad460 |
+ if (!addr_eq(subnet->net, subnet_number(*addr, subnet->netmask))) {
|
|
|
fad460 |
+ strcpy(lowbuf, piaddr(*addr));
|
|
|
fad460 |
+ strcpy(netbuf, piaddr(subnet->net));
|
|
|
fad460 |
+ log_fatal("bad range6, address %s not in subnet6 %s/%d",
|
|
|
fad460 |
+ lowbuf, netbuf, subnet->prefix_len);
|
|
|
fad460 |
+ }
|
|
|
fad460 |
+
|
|
|
fad460 |
+}
|
|
|
fad460 |
+
|
|
|
fad460 |
/* address-range6-declaration :== ip-address6 ip-address6 SEMI
|
|
|
fad460 |
| ip-address6 SLASH number SEMI
|
|
|
fad460 |
| ip-address6 [SLASH number] TEMPORARY SEMI */
|
|
|
fad460 |
@@ -3788,6 +3801,8 @@ parse_address_range6(struct parse *cfile, struct group *group) {
|
|
|
fad460 |
return;
|
|
|
fad460 |
}
|
|
|
fad460 |
|
|
|
fad460 |
+ check_addr_in_subnet(group->subnet, &lo);
|
|
|
fad460 |
+
|
|
|
fad460 |
/*
|
|
|
fad460 |
* See if we we're using range or CIDR notation or TEMPORARY
|
|
|
fad460 |
*/
|
|
|
fad460 |
@@ -3855,6 +3870,8 @@ parse_address_range6(struct parse *cfile, struct group *group) {
|
|
|
fad460 |
return;
|
|
|
fad460 |
}
|
|
|
fad460 |
|
|
|
fad460 |
+ check_addr_in_subnet(group->subnet, &hi;;
|
|
|
fad460 |
+
|
|
|
fad460 |
/*
|
|
|
fad460 |
* Convert our range to a set of CIDR networks.
|
|
|
fad460 |
*/
|