Only accept netmask in dotted quad notation if they can be turned
into a CIDR.
According to rfc 4632, CIDR (compat) netmasks are all that should be
used.
Bug: #5168.
(cherry picked from commit
79b7b7a0ddfdcd7664ca328a41d24fbca75e3e54)
if (r <= 0)
goto error;
- netmask = in.s_addr;
- if (netmask != 0) {
- uint32_t m = netmask;
- /* Extract cidr netmask */
- while ((0x01 & m) == 0) {
- dd->netmask++;
- m = m >> 1;
- }
- dd->netmask = 32 - dd->netmask;
- }
+ int cidr = CIDRFromMask(in.s_addr);
+ if (cidr < 0)
+ goto error;
+
+ dd->netmask = (uint8_t)cidr;
}
r = inet_pton(AF_INET, ip, &in);