]> granicus.if.org Git - sudo/commitdiff
Adapt to pwutil.c
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 5 Jan 2005 01:10:16 +0000 (01:10 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 5 Jan 2005 01:10:16 +0000 (01:10 +0000)
logging.c
sudo.c
sudo.h
testsudoers.c
visudo.c

index c2db37045b6f96387e06c4e8897579b08c1630b0..aad9dbdedb32167efa5bc36e70793319f3d5ce9d 100644 (file)
--- a/logging.c
+++ b/logging.c
@@ -493,6 +493,7 @@ send_mail(line)
                /* Close password, group and other fds so we don't leak. */
                sudo_endpwent();
                sudo_endgrent();
+               pwcache_destroy();
                closefrom(STDERR_FILENO + 1);
 
                /*
diff --git a/sudo.c b/sudo.c
index ba66093cd73c8e93e8a405ebefcda2688ef8a8ff..dec4bb961ba2e7f9f82e27f960614224dc22f60c 100644 (file)
--- a/sudo.c
+++ b/sudo.c
@@ -195,6 +195,7 @@ main(argc, argv, envp)
     initial_setup();
     sudo_setpwent();
     sudo_setgrent();
+    pwcache_init();
 
     /* Parse our arguments. */
     sudo_mode = parse_args(Argc, Argv);
@@ -408,6 +409,7 @@ main(argc, argv, envp)
        /* Close the password and group files */
        sudo_endpwent();
        sudo_endgrent();
+       pwcache_destroy();
 
        /* Install the real environment. */
        environ = new_environ;
@@ -1145,7 +1147,7 @@ get_authpw()
 void
 cleanup()
 {
-    return;
+    pwcache_destroy();
 }
 
 /*
diff --git a/sudo.h b/sudo.h
index f04a2a0278c8e4e26521ca6b91c14c665ec033e5..dab13e6379cff15cc305f0067da772a10ae3ca43 100644 (file)
--- a/sudo.h
+++ b/sudo.h
@@ -161,6 +161,16 @@ struct sudo_user {
 #define TGP_ECHO       0x01            /* leave echo on when reading passwd */
 #define TGP_STDIN      0x02            /* read from stdin, not /dev/tty */
 
+/*
+ * Second param of pwcache_{get,put}
+ */
+enum cmptype {
+    bypwnam,
+    byuid,
+    bygrnam,
+    bygid
+};
+
 struct passwd;
 struct timespec;
 struct timeval;
@@ -257,6 +267,8 @@ struct passwd *sudo_getpwuid __P((uid_t));
 struct passwd *sudo_fakepwuid __P((uid_t));
 struct group *sudo_getgrnam __P((const char *));
 struct group *sudo_getgrgid __P((gid_t));
+void pwcache_init __P((void));
+void pwcache_destroy __P((void));
 #ifdef HAVE_SYSTRACE
 void systrace_attach   __P((pid_t));
 #endif
index a16e9707036f4ac8cb06b05335bd8ab9e148773e..99306e98a1a7206714be17e37988f01e08c0a516 100644 (file)
@@ -119,6 +119,10 @@ main(argc, argv)
     Argv = argv;
     Argc = argc;
 
+    setpwent();
+    setgrent();
+    pwcache_init();
+
     memset(&pw, 0, sizeof(pw));
     sudo_user.pw = &pw;
     memset(&rpw, 0, sizeof(rpw));
@@ -134,7 +138,8 @@ main(argc, argv)
                user_host = optarg;
                break;
            case 'u':
-               user_runas = &optarg;
+               /* XXX - call getpwnam() */
+               runas_pw->pw_name = optarg;
                break;
            default:
                usage();
@@ -193,7 +198,10 @@ main(argc, argv)
 
     /* Initialize default values. */
     init_defaults();
-    runas_pw->pw_name = *user_runas;
+    if (runas_pw->pw_name)
+       user_runas = &runas_pw->pw_name;
+    else
+       runas_pw->pw_name = *user_runas;
 
     /* Load ip addr/mask for each interface. */
     load_interfaces();
@@ -286,38 +294,10 @@ set_perms(perm)
     return;
 }
 
-struct passwd *
-sudo_getpwuid(uid)
-    uid_t uid;
-{
-    return(getpwuid(uid));
-}
-
-struct passwd *
-sudo_getpwnam(name)
-    const char *name;
-{ 
-    return(getpwnam(name));
-}
-
-struct group *
-sudo_getgrgid(gid)
-    gid_t gid;
-{
-    return(getgrgid(gid));
-}
-
-struct group *
-sudo_getgrnam(name)
-    const char *name;
-{
-    return(getgrnam(name));
-}
-
 void
 cleanup()
 {
-    return;
+    pwcache_destroy();
 }
 
 void
index 78cdbd5803fbfbb87524340db059843f60affb2a..3cd5f28bfde5bd01f7c12dd8cf41645aa3d20b17 100644 (file)
--- a/visudo.c
+++ b/visudo.c
@@ -555,6 +555,13 @@ user_is_exempt()
     return(FALSE);
 }
 
+char *
+sudo_getepw(pw)
+    const struct passwd *pw;
+{
+    return (pw->pw_passwd);
+}
+
 /* STUB */
 struct passwd *
 sudo_getpwuid(uid)