]> granicus.if.org Git - sudo/commitdiff
now do getpwent as root for soem shadow password systems (bsdi)
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 9 Feb 1994 03:02:32 +0000 (03:02 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 9 Feb 1994 03:02:32 +0000 (03:02 +0000)
check.c

diff --git a/check.c b/check.c
index 47be50eb7fdf934c9251c8e5261e59c546166ef0..83fed95235eb3e7333411fcfb3267cc1c7337d9f 100644 (file)
--- a/check.c
+++ b/check.c
@@ -216,7 +216,11 @@ static void check_passwd()
     char *pass;                        /* this is what gets entered    */
     register int counter = TRIES_FOR_PASSWORD;
 
-    if ((pw_ent = getpwuid(uid)) == NULL) {
+    /* some os's need to be root to get at shadow password */
+    be_root();
+    pw_ent = getpwuid(uid);
+    be_user();
+    if (pw_ent == NULL) {
        (void) sprintf(user, "%u", uid);
        log_error(GLOBAL_NO_PW_ENT);
        inform_user(GLOBAL_NO_PW_ENT);
@@ -224,13 +228,14 @@ static void check_passwd()
     }
 #ifdef __svr4__
     be_root();
-    if ((spw_ent = getspnam(pw_ent->pw_name)) == NULL) {
+    spw_ent = getspnam(pw_ent->pw_name);
+    be_user();
+    if (spw_ent == NULL) {
        (void) sprintf(user, "%u", uid);
        log_error(GLOBAL_NO_PW_ENT);
        inform_user(GLOBAL_NO_PW_ENT);
        exit(1);
     }
-    be_user();
     encrypted = spw_ent -> sp_pwdp;
 #else
     encrypted = pw_ent -> pw_passwd;