diff options
Diffstat (limited to 'usr.bin/sudo')
-rw-r--r-- | usr.bin/sudo/CHANGES | 11 | ||||
-rw-r--r-- | usr.bin/sudo/env.c | 13 | ||||
-rw-r--r-- | usr.bin/sudo/sudo.c | 24 | ||||
-rw-r--r-- | usr.bin/sudo/version.h | 2 |
4 files changed, 31 insertions, 19 deletions
diff --git a/usr.bin/sudo/CHANGES b/usr.bin/sudo/CHANGES index fc75c1b2533..ac7265c4f61 100644 --- a/usr.bin/sudo/CHANGES +++ b/usr.bin/sudo/CHANGES @@ -1458,3 +1458,14 @@ Sudo 1.6.3p7 released. 456) config.h.in is now generated by autoheader. Sudo 1.6.4 released. + +457) Move the call to rebuild_env() until after MODE_RESET_HOME is set. + Otherwise, the set_home option has no effect. + +458) Fix use of freed memory when the "fqdn" flag is set. This was + introduced by the fix for the "segv when gethostbynam() fails" bug. + +459) Add 'continue' statements to optimize the switch statement. + From Solar. + +Sudo 1.6.4p1 released. diff --git a/usr.bin/sudo/env.c b/usr.bin/sudo/env.c index 43d8c4c0b2f..b2ab7c0c26b 100644 --- a/usr.bin/sudo/env.c +++ b/usr.bin/sudo/env.c @@ -157,29 +157,32 @@ zero_env(envp) case 'H': if (strncmp("HOME=", *ep, 5) == 0) break; + continue; case 'L': if (strncmp("LOGNAME=", *ep, 8) == 0) break; + continue; case 'P': if (strncmp("PATH=", *ep, 5) == 0) { user_path = *ep + 5; /* XXX - set to sane default instead of user's? */ break; } + continue; case 'S': - if (strncmp("SHELL=", *ep, 6) == 0) { + if (strncmp("SHELL=", *ep, 6) == 0) user_shell = *ep + 6; - continue; - } else if (!user_prompt && !strncmp("SUDO_PROMPT=", *ep, 12)) { + else if (!user_prompt && !strncmp("SUDO_PROMPT=", *ep, 12)) user_prompt = *ep + 12; - continue; - } + continue; case 'T': if (strncmp("TZ=", *ep, 3) == 0) break; + continue; case 'U': if (strncmp("USER=", *ep, 5) == 0) break; + continue; default: continue; } diff --git a/usr.bin/sudo/sudo.c b/usr.bin/sudo/sudo.c index 83173713a93..1ac42ce08ff 100644 --- a/usr.bin/sudo/sudo.c +++ b/usr.bin/sudo/sudo.c @@ -287,9 +287,6 @@ main(argc, argv, envp) log_error(NO_MAIL|MSG_ONLY, "no passwd entry for %s!", *user_runas); } - /* Build up custom environment that avoids any nasty bits. */ - new_environ = rebuild_env(sudo_mode, envp); - /* This goes after the sudoers parse since we honor sudoers options. */ if (sudo_mode == MODE_KILL || sudo_mode == MODE_INVALIDATE) { remove_timestamp((sudo_mode == MODE_KILL)); @@ -335,6 +332,9 @@ main(argc, argv, envp) if (!(validated & FLAG_NOPASS)) check_user(); + /* Build up custom environment that avoids any nasty bits. */ + new_environ = rebuild_env(sudo_mode, envp); + if (validated & VALIDATE_OK) { /* Finally tell the user if the command did not exist. */ if (cmnd_status == NOT_FOUND_DOT) { @@ -950,17 +950,15 @@ set_fqdn() struct hostent *hp; char *p; - if (def_flag(I_FQDN)) { - if (!(hp = gethostbyname(user_host))) { - log_error(MSG_ONLY|NO_EXIT, - "unable to lookup %s via gethostbyname()", user_host); - } else { - free(user_host); - user_host = estrdup(hp->h_name); - } + if (!(hp = gethostbyname(user_host))) { + log_error(MSG_ONLY|NO_EXIT, + "unable to lookup %s via gethostbyname()", user_host); + } else { + if (user_shost != user_host) + free(user_shost); + free(user_host); + user_host = estrdup(hp->h_name); } - if (user_shost != user_host) - free(user_shost); if ((p = strchr(user_host, '.'))) { *p = '\0'; user_shost = estrdup(user_host); diff --git a/usr.bin/sudo/version.h b/usr.bin/sudo/version.h index 3a6edd185c5..336397a3f5e 100644 --- a/usr.bin/sudo/version.h +++ b/usr.bin/sudo/version.h @@ -37,6 +37,6 @@ #ifndef _SUDO_VERSION_H #define _SUDO_VERSION_H -static const char version[] = "1.6.4"; +static const char version[] = "1.6.4p1"; #endif /* _SUDO_VERSION_H */ |