summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/option.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/src/option.c b/src/option.c
index 4e533be..5307f01 100644
--- a/src/option.c
+++ b/src/option.c
@@ -963,13 +963,9 @@ static char *domain_rev4(int from_file, char *server, struct in_addr *addr4, int
if (size > 32 || size < 1)
return _("bad IPv4 prefix length");
-
- for (i = 0; i < addrbytes; i++)
- if (((u8 *)addr4)[3-i] != 0)
- break;
-
- if (i != addrbytes || (((u8 *)addr4)[3-addrbytes] & ((1 << addrbits) - 1)) != 0)
- return _("address part not zero");
+
+ /* Zero out last address bits according to CIDR mask */
+ ((u8 *)addr4)[3-addrbytes] &= ~((1 << addrbits)-1);
size = size & ~0x7;
@@ -1026,13 +1022,9 @@ static char *domain_rev6(int from_file, char *server, struct in6_addr *addr6, in
if (size > 128 || size < 1)
return _("bad IPv6 prefix length");
-
- for (i = 0; i < addrbytes; i++)
- if (addr6->s6_addr[15-i] != 0)
- break;
- if (i != addrbytes || (addr6->s6_addr[15-addrbytes] & ((1 << addrbits) - 1)) != 0)
- return _("address part not zero");
+ /* Zero out last address bits according to CIDR mask */
+ addr6->s6_addr[15-addrbytes] &= ~((1 << addrbits) - 1);
size = size & ~0x3;