]> granicus.if.org Git - sudo/commitdiff
added support for net_addr/netmask
authorTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 17 Jun 1996 04:02:33 +0000 (04:02 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 17 Jun 1996 04:02:33 +0000 (04:02 +0000)
parse.c
parse.lex

diff --git a/parse.c b/parse.c
index 86ddef3fe45e92d5cb1aa0334a63e675d68716ad..1316ccb5896b712110a313f7ae65ad9330387fc9 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -305,15 +305,28 @@ int addr_matches(n)
     char *n;
 {
     int i;
-    struct in_addr addr;
-
-    addr.s_addr = inet_addr(n);
+    char *m;
+    struct in_addr addr, mask;
+
+    /* 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 & 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);
+       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);
 }
index fd113f754f475aeb9759f950e5874d0e3cc0cf7f..320be5702ff384099a0013cfe4669940c7430c62 100644 (file)
--- a/parse.lex
+++ b/parse.lex
@@ -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);