/* Close password, group and other fds so we don't leak. */
sudo_endpwent();
sudo_endgrent();
+ pwcache_destroy();
closefrom(STDERR_FILENO + 1);
/*
initial_setup();
sudo_setpwent();
sudo_setgrent();
+ pwcache_init();
/* Parse our arguments. */
sudo_mode = parse_args(Argc, Argv);
/* Close the password and group files */
sudo_endpwent();
sudo_endgrent();
+ pwcache_destroy();
/* Install the real environment. */
environ = new_environ;
void
cleanup()
{
- return;
+ pwcache_destroy();
}
/*
#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;
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
Argv = argv;
Argc = argc;
+ setpwent();
+ setgrent();
+ pwcache_init();
+
memset(&pw, 0, sizeof(pw));
sudo_user.pw = &pw;
memset(&rpw, 0, sizeof(rpw));
user_host = optarg;
break;
case 'u':
- user_runas = &optarg;
+ /* XXX - call getpwnam() */
+ runas_pw->pw_name = optarg;
break;
default:
usage();
/* 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();
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
return(FALSE);
}
+char *
+sudo_getepw(pw)
+ const struct passwd *pw;
+{
+ return (pw->pw_passwd);
+}
+
/* STUB */
struct passwd *
sudo_getpwuid(uid)