From ed4e7defd7d231e2e424aed0b160603f6e627aba Mon Sep 17 00:00:00 2001 From: Dominik Derigs Date: Thu, 30 Sep 2021 11:03:05 +0200 Subject: [PATCH] Do not fail hard when rev-server has a non-zero final address part Signed-off-by: DL6ER --- src/option.c | 18 +++++------------- 1 file 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;