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;
|
char *n;
|
||||||
{
|
{
|
||||||
int i;
|
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++)
|
for (i = 0; i < num_interfaces; i++)
|
||||||
if (interfaces[i].addr.s_addr == addr.s_addr ||
|
if ((interfaces[i].addr.s_addr & mask.s_addr) == addr.s_addr)
|
||||||
(interfaces[i].addr.s_addr & interfaces[i].netmask.s_addr)
|
return(TRUE);
|
||||||
== addr.s_addr)
|
} else {
|
||||||
return(TRUE);
|
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);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
|
@@ -77,6 +77,7 @@ extern void yyerror __P((char *));
|
|||||||
%}
|
%}
|
||||||
|
|
||||||
OCTET [[:digit:]]{1,3}
|
OCTET [[:digit:]]{1,3}
|
||||||
|
DOTTEDQUAD {OCTET}(\.{OCTET}){3}
|
||||||
WORD [[:alnum:]_-]+
|
WORD [[:alnum:]_-]+
|
||||||
|
|
||||||
%e 4000
|
%e 4000
|
||||||
@@ -176,7 +177,7 @@ NOPASSWD: {
|
|||||||
return(USERGROUP);
|
return(USERGROUP);
|
||||||
}
|
}
|
||||||
|
|
||||||
{OCTET}(\.{OCTET}){3} {
|
{DOTTEDQUAD}(\/{DOTTEDQUAD})? {
|
||||||
fill(yytext, yyleng);
|
fill(yytext, yyleng);
|
||||||
LEXTRACE("NTWKADDR ");
|
LEXTRACE("NTWKADDR ");
|
||||||
return(NTWKADDR);
|
return(NTWKADDR);
|
||||||
|
Reference in New Issue
Block a user