]> granicus.if.org Git - sudo/commitdiff
now works with new sudo
authorTodd C. Miller <Todd.Miller@courtesan.com>
Sat, 17 Aug 1996 23:17:23 +0000 (23:17 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Sat, 17 Aug 1996 23:17:23 +0000 (23:17 +0000)
testsudoers.c

index 184c4879bd2b3a2574c8f51aad134ca24d9ed375..c957661fd7eeaa0f1f9fa2bea53b7e3285fc071a 100644 (file)
@@ -150,15 +150,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);
 }
@@ -239,7 +252,7 @@ void set_perms(i)
 }
 
 
-main(argc, argv)
+int main(argc, argv)
     int argc;
     char **argv;
 {
@@ -312,6 +325,9 @@ main(argc, argv)
     /* load ip addr/mask for each interface */
     load_interfaces();
 
+    /* allocate space for data structures in the parser */
+    init_parser();
+
     if (yyparse() || parse_error) {
        (void) printf("doesn't parse.\n");
     } else {
@@ -333,6 +349,8 @@ main(argc, argv)
     /* dump aliases */
     (void) printf("Matching Aliases --\n");
     dumpaliases();
+
+    exit(0);
 }