From: Todd C. Miller Date: Tue, 24 Aug 1999 16:42:28 +0000 (+0000) Subject: CIDR-style netmask support X-Git-Tag: SUDO_1_6_0~108 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8723291d895ea0742491d320704c379955f48329;p=sudo CIDR-style netmask support --- diff --git a/parse.c b/parse.c index 62bc842f8..eae5dcd14 100644 --- 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++) diff --git a/parse.lex b/parse.lex index 06bd694bf..fb11306e1 100644 --- 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 "); diff --git a/testsudoers.c b/testsudoers.c index 109a0e290..071bee2d3 100644 --- a/testsudoers.c +++ b/testsudoers.c @@ -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++)