diff options
author | Dominik Derigs <dl6er@dl6er.de> | 2021-09-30 11:03:05 +0200 |
---|---|---|
committer | Simon Kelley <simon@thekelleys.org.uk> | 2021-09-30 11:52:24 +0100 |
commit | ed4e7defd7d231e2e424aed0b160603f6e627aba (patch) | |
tree | 6d898cef4ea52b9b3f245f8a80439f04a1da3048 | |
parent | 267ab619c419a6f6564bea4a01ec4f1c80bcb7c9 (diff) | |
download | dnsmasq-ed4e7defd7d231e2e424aed0b160603f6e627aba.tar.gz |
Do not fail hard when rev-server has a non-zero final address partv2.87test3
Signed-off-by: DL6ER <dl6er@dl6er.de>
-rw-r--r-- | src/option.c | 18 |
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; |