]> granicus.if.org Git - sudo/commitdiff
Deal with user_stat being NULL as it is for visudo and testsudoers.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 24 Nov 2004 21:44:54 +0000 (21:44 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 24 Nov 2004 21:44:54 +0000 (21:44 +0000)
match.c
testsudoers.c

diff --git a/match.c b/match.c
index 0c32cfe5a2c6a4354a458336270a1289a8760b51..940491642ff87003212f2340f6f957b919f73162 100644 (file)
--- a/match.c
+++ b/match.c
@@ -328,8 +328,9 @@ command_matches(sudoers_cmnd, sudoers_args)
            if (strcmp(user_base, base) != 0 ||
                stat(*ap, &sudoers_stat) == -1)
                continue;
-           if (user_stat->st_dev == sudoers_stat.st_dev &&
-               user_stat->st_ino == sudoers_stat.st_ino) {
+           if (user_stat == NULL ||
+               (user_stat->st_dev == sudoers_stat.st_dev &&
+               user_stat->st_ino == sudoers_stat.st_ino)) {
                if (safe_cmnd)
                    free(safe_cmnd);
                safe_cmnd = estrdup(*ap);
@@ -373,8 +374,9 @@ command_matches(sudoers_cmnd, sudoers_args)
             *  b) there are no args on command line and none req by sudoers OR
             *  c) there are args in sudoers and on command line and they match
             */
-           if (user_stat->st_dev != sudoers_stat.st_dev ||
-               user_stat->st_ino != sudoers_stat.st_ino)
+           if (user_stat != NULL &&
+               (user_stat->st_dev != sudoers_stat.st_dev ||
+               user_stat->st_ino != sudoers_stat.st_ino))
                return(FALSE);
            if (!sudoers_args ||
                (!user_args && sudoers_args && !strcmp("\"\"", sudoers_args)) ||
index 2615f964af54ff5670691730d9e735feae835531..2ae467aaa8bd4ab342a356583dd4433484029fb3 100644 (file)
@@ -236,11 +236,12 @@ main(argc, argv)
                            rval = cmnd_matches(cs->cmnd);
                            if (rval != UNSPEC)
                                matched = rval;
-                           printf("\tcommand %s\n", rval == ALLOW ? "allowed" :
+                           printf("\tcmnd  %s\n", rval == ALLOW ? "allowed" :
                                rval == DENY ? "denied" : "unmatched");
                        }
                    }
-               }
+               } else
+                   puts("\thost  unmatched");
            }
        }
     }