in ./src/util/cidr_match.c there is this bit of code:
240 /*
241 * Sanity check: all host address bits must be zero.
242 */
243 for (np = ip->net_bytes, mp = ip->mask_bytes;
244 np < ip->net_bytes + ip->addr_byte_count; np++, mp++) {
245 if (*np & ~(*mp)) {
246 mask_addr(ip->net_bytes, ip->addr_byte_count,
ip->mask_shift);
247 if (inet_ntop(ip->addr_family, ip->net_bytes, hostaddr.buf,
248 sizeof(hostaddr.buf)) == 0)
249 msg_fatal("inet_ntop: %m");
250 vstring_sprintf(why ? why : (why = vstring_alloc(20)),
251 "non-null host address bits in \"%s/%s\", "
252 "perhaps you should use \"%s/%d\" instead",
253 pattern, mask, hostaddr.buf,
ip->mask_shift);
254 return (why);
255 }
256 }
Causing Postfix daemons to fall over and die is ridiculous just because an IP
(eg. mynetworks) and provided mask doesn't result in only zeros. Print a
warning, maybe.
I don't see why cidr_match_parse() isn't written to be "liberal in what you
accept, strict in what you return". It shouldn't care about stray bits during a
compare, and should just memset(ip->mask_bytes, ...) and move on since the
user's intent is clearly obvious.
I love postfix but this struck me as a completely unnecessary failure mode.
________________________________
If you wish to view the CPA Global group email disclaimer, please click
here<https://www.cpaglobal.com/Privacy/CPAGlobalEmailDisclaimer/>
________________________________