main(int argc, char *argv[])
{
struct sudoersfile *sp;
- char *editor, **editor_argv;
+ char *user, *editor, **editor_argv;
int ch, oldlocale, editor_argc, exitcode = 0;
bool quiet, strict, oldperms;
const char *export_path;
/* Mock up a fake sudo_user struct. */
user_cmnd = user_base = "";
- if ((sudo_user.pw = sudo_getpwuid(getuid())) == NULL)
- sudo_fatalx(U_("you do not exist in the %s database"), "passwd");
+ user = getenv("SUDO_USER");
+ if (user != NULL && *user != '\0')
+ sudo_user.pw = sudo_getpwnam(user);
+ if (sudo_user.pw == NULL) {
+ if ((sudo_user.pw = sudo_getpwuid(getuid())) == NULL)
+ sudo_fatalx(U_("you do not exist in the %s database"), "passwd");
+ }
get_hostname();
/* Setup defaults data structures. */
init_parser(sudoers_file, quiet);
sudoers_setlocale(SUDOERS_LOCALE_SUDOERS, &oldlocale);
(void) sudoersparse();
- (void) update_defaults(SETDEF_GENERIC|SETDEF_HOST, quiet);
+ (void) update_defaults(SETDEF_GENERIC|SETDEF_HOST|SETDEF_USER, quiet);
sudoers_setlocale(oldlocale, NULL);
editor = get_editor(&editor_argc, &editor_argv);
}
fclose(sudoersin);
if (!parse_error) {
- (void) update_defaults(SETDEF_GENERIC|SETDEF_HOST, true);
+ (void) update_defaults(SETDEF_GENERIC|SETDEF_HOST|SETDEF_USER, true);
if (!check_defaults(SETDEF_ALL, quiet) ||
check_aliases(strict, quiet) != 0) {
parse_error = true;
errorfile = sudoers_file;
}
if (!parse_error) {
- (void) update_defaults(SETDEF_GENERIC|SETDEF_HOST, true);
+ (void) update_defaults(SETDEF_GENERIC|SETDEF_HOST|SETDEF_USER, true);
if (!check_defaults(SETDEF_ALL, quiet) ||
check_aliases(strict, quiet) != 0) {
parse_error = true;