From: Todd C. Miller Date: Tue, 15 Jan 2002 01:53:02 +0000 (+0000) Subject: o Move the call to rebuild_env() until after MODE_RESET_HOME is set. X-Git-Tag: SUDO_1_6_5~21 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=26e835b0964c6b010cf56124bfb64bb47634182d;p=sudo o Move the call to rebuild_env() until after MODE_RESET_HOME is set. Otherwise, the set_home option has no effect. o Fix use of freed memory when the "fqdn" flag is set. This was introduced by the fix for the "segv when gethostbynam() fails" bug. Also, we no longer call set_fqdn() if the "fqdn" flag is not set so there is no need to check the "fqdn" flag in set_fqdn() itself. --- diff --git a/sudo.c b/sudo.c index 6313aed9b..bb4abbf9c 100644 --- a/sudo.c +++ b/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);