]> granicus.if.org Git - sudo/commitdiff
CIDR-style netmask support
authorTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 24 Aug 1999 16:42:28 +0000 (16:42 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 24 Aug 1999 16:42:28 +0000 (16:42 +0000)
parse.c
parse.lex
testsudoers.c

diff --git a/parse.c b/parse.c
index 62bc842f8ccdc3db952e124c426f9289fb4affab..eae5dcd141f2329a072ac8cad43d75b2a689d75a 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -336,11 +336,14 @@ addr_matches(n)
     char *m;
     struct in_addr addr, mask;
 
-    /* If there's an explicate netmask, use it. */
+    /* If there's an explicit netmask, use it. */
     if ((m = strchr(n, '/'))) {
        *m++ = '\0';
-       mask.s_addr = inet_addr(m);
        addr.s_addr = inet_addr(n);
+       if (strchr(m, '.'))
+           mask.s_addr = inet_addr(m);
+       else
+           mask.s_addr = (1 << atoi(m)) - 1;   /* XXX - better way? */
        *(m - 1) = '/';
 
        for (i = 0; i < num_interfaces; i++)
index 06bd694bf524a87c4f9f371c8ed4c10439865581..fb11306e184db984ee03be8f525d1ef4013798df 100644 (file)
--- a/parse.lex
+++ b/parse.lex
@@ -190,6 +190,12 @@ PASSWD[[:blank:]]*:        {
                            return(NTWKADDR);
                        }
 
+{DOTTEDQUAD}\/([12][0-9]*|3[0-2]*) {
+                           fill(yytext, yyleng);
+                           LEXTRACE("NTWKADDR ");
+                           return(NTWKADDR);
+                       }
+
 [[:alpha:]][[:alnum:]_-]*(\.{HOSTNAME})+ {
                            fill(yytext, yyleng);
                            LEXTRACE("FQHOST ");
index 109a0e2907584af7c80ba41ef7334d9cbc1fabdd..071bee2d35596a3ac28dd0dd539094d51d1ee2dc 100644 (file)
@@ -184,11 +184,14 @@ addr_matches(n)
     char *m;
     struct in_addr addr, mask;
 
-    /* If there's an explicate netmask, use it. */
+    /* If there's an explicit netmask, use it. */
     if ((m = strchr(n, '/'))) {
        *m++ = '\0';
-       mask.s_addr = inet_addr(m);
        addr.s_addr = inet_addr(n);
+       if (strchr(m, '.'))
+           mask.s_addr = inet_addr(m);
+       else
+           mask.s_addr = (1 << atoi(m)) - 1;   /* XXX - better way? */
        *(m - 1) = '/';               
 
        for (i = 0; i < num_interfaces; i++)