_cidr_support

Gbp-Pq: Name 14_cidr_support
This commit is contained in:
Marco d'Itri 2022-05-14 02:57:49 +08:00 committed by openKylinBot
parent 5d81f02a0f
commit 148252b5a5
4 changed files with 22 additions and 3 deletions

View File

@ -90,6 +90,10 @@ bitwise AND of the address and the `mask\'. For example, the net/mask
pattern `131.155.72.0/255.255.254.0\' matches every address in the
range `131.155.72.0\' through `131.155.73.255\'.
.IP \(bu
An expression of the form `n.n.n.n/mm' is interpreted as a
`net/masklength' pair, where `mm' is the number of consecutive `1'
bits in the netmask applied to the `n.n.n.n' address.
.IP \(bu
An expression of the form `[n:n:n:n:n:n:n:n]/m\' is interpreted as a
`[net]/prefixlen\' pair. An IPv6 host address is matched if
`prefixlen\' bits of `net\' is equal to the `prefixlen\' bits of the

View File

@ -423,7 +423,8 @@ char *string;
if ((addr = dot_quad_addr(string)) == INADDR_NONE)
return (NO);
if ((net = dot_quad_addr(net_tok)) == INADDR_NONE
|| (mask = dot_quad_addr(mask_tok)) == INADDR_NONE) {
|| ((mask = dot_quad_addr(mask_tok)) == INADDR_NONE
&& (mask = cidr_mask_addr(mask_tok)) == 0)) {
#ifndef INET6
tcpd_warn("bad net/mask expression: %s/%s", net_tok, mask_tok);
#endif

14
misc.c
View File

@ -107,3 +107,17 @@ char *str;
}
return (runs == 4 ? inet_addr(str) : INADDR_NONE);
}
/* cidr_mask_addr - convert cidr netmask length to internal form */
unsigned long cidr_mask_addr(str)
char *str;
{
int maskbits;
maskbits = atoi(str);
if (maskbits < 1 || maskbits > 32)
return (0);
return htonl(0xFFFFFFFF << (32 - maskbits));
}

View File

@ -479,12 +479,12 @@ char *pat;
int mask_len;
if ((dot_quad_addr(pat) == INADDR_NONE
|| dot_quad_addr(mask) == INADDR_NONE)
|| dot_quad_addr(mask) == INADDR_NONE && cidr_mask_addr(mask) == 0)
&& (!is_inet6_addr(pat)
|| ((mask_len = atoi(mask)) < 0 || mask_len > 128)))
#else
if (dot_quad_addr(pat) == INADDR_NONE
|| dot_quad_addr(mask) == INADDR_NONE)
|| dot_quad_addr(mask) == INADDR_NONE && cidr_mask_addr(mask) == 0)
#endif
tcpd_warn("%s/%s: bad net/mask pattern", pat, mask);
} else if (STR_EQ(pat, "FAIL")) { /* obsolete */