added support for net_addr/netmask
This commit is contained in:
27
parse.c
27
parse.c
@@ -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);
|
||||
}
|
||||
|
@@ -77,6 +77,7 @@ extern void yyerror __P((char *));
|
||||
%}
|
||||
|
||||
OCTET [[:digit:]]{1,3}
|
||||
DOTTEDQUAD {OCTET}(\.{OCTET}){3}
|
||||
WORD [[:alnum:]_-]+
|
||||
|
||||
%e 4000
|
||||
@@ -176,7 +177,7 @@ NOPASSWD: {
|
||||
return(USERGROUP);
|
||||
}
|
||||
|
||||
{OCTET}(\.{OCTET}){3} {
|
||||
{DOTTEDQUAD}(\/{DOTTEDQUAD})? {
|
||||
fill(yytext, yyleng);
|
||||
LEXTRACE("NTWKADDR ");
|
||||
return(NTWKADDR);
|
||||
|
Reference in New Issue
Block a user