From a5d9296d25499169c78bf35b14b95d3f4ba52cbe Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 5 Jan 2005 01:10:16 +0000 Subject: [PATCH] Adapt to pwutil.c --- logging.c | 1 + sudo.c | 4 +++- sudo.h | 12 ++++++++++++ testsudoers.c | 42 +++++++++++------------------------------- visudo.c | 7 +++++++ 5 files changed, 34 insertions(+), 32 deletions(-) diff --git a/logging.c b/logging.c index c2db37045..aad9dbded 100644 --- 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 ba66093cd..dec4bb961 100644 --- 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 f04a2a027..dab13e637 100644 --- 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 diff --git a/testsudoers.c b/testsudoers.c index a16e97070..99306e98a 100644 --- a/testsudoers.c +++ b/testsudoers.c @@ -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 diff --git a/visudo.c b/visudo.c index 78cdbd580..3cd5f28bf 100644 --- 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) -- 2.50.1