added support for net_addr/netmask

This commit is contained in:
Todd C. Miller
1996-06-17 04:02:33 +00:00
parent 0ede02bbe4
commit f66eb18a5d
2 changed files with 22 additions and 8 deletions

27
parse.c
View File

@@ -305,15 +305,28 @@ int addr_matches(n)
char *n;
{
int i;
struct in_addr addr;
char *m;
struct in_addr addr, mask;
addr.s_addr = inet_addr(n);
/* If there's an explicate netmask, use it. */
if ((m = strchr(n, '/'))) {
*m++ = '\0';
mask.s_addr = inet_addr(m);
addr.s_addr = inet_addr(n);
*(m - 1) = '/';
for (i = 0; i < num_interfaces; i++)
if (interfaces[i].addr.s_addr == addr.s_addr ||
(interfaces[i].addr.s_addr & interfaces[i].netmask.s_addr)
== addr.s_addr)
return(TRUE);
for (i = 0; i < num_interfaces; i++)
if ((interfaces[i].addr.s_addr & mask.s_addr) == addr.s_addr)
return(TRUE);
} else {
addr.s_addr = inet_addr(n);
for (i = 0; i < num_interfaces; i++)
if (interfaces[i].addr.s_addr == addr.s_addr ||
(interfaces[i].addr.s_addr & interfaces[i].netmask.s_addr)
== addr.s_addr)
return(TRUE);
}
return(FALSE);
}