From 97bd3ae46779c69fcdab82d0c64bdf05be009ec3 Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Thu, 7 Oct 2010 15:59:19 -0600 Subject: [PATCH 1/1] fix for 596493 from upstream --- debian/changelog | 8 ++++++++ env.c | 26 +++++++++++++++----------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/debian/changelog b/debian/changelog index f1dd5bd..4772750 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +sudo (1.7.4p4-2.squeeze.2) stable; urgency=low + + * patch from upstream to resolve interoperability problem between HOME in + env_keep and the -H flag, originally closed #596493, applying this to + to squeeze also closes: #614232 + + -- Bdale Garbee Sun, 20 Feb 2011 09:35:07 -0700 + sudo (1.7.4p4-2.squeeze.1) testing; urgency=low * patch from upstream to fix special case in password checking code diff --git a/env.c b/env.c index 739631f..2be75d8 100644 --- a/env.c +++ b/env.c @@ -608,10 +608,16 @@ rebuild_env(noexec) #ifdef ENV_DEBUG memset(env.envp, 0, env.env_size * sizeof(char *)); #endif - if (def_env_reset || ISSET(sudo_mode, MODE_LOGIN_SHELL)) { - /* Reset HOME based on target user unless keeping old value. */ - reset_home = TRUE; + /* Reset HOME based on target user if configured to. */ + if (ISSET(sudo_mode, MODE_RUN)) { + if (def_always_set_home || + ISSET(sudo_mode, MODE_RESET_HOME | MODE_LOGIN_SHELL) || + (ISSET(sudo_mode, MODE_SHELL) && def_set_home)) + reset_home = TRUE; + } + + if (def_env_reset || ISSET(sudo_mode, MODE_LOGIN_SHELL)) { /* Pull in vars we want to keep from the old environment. */ for (ep = old_envp; *ep; ep++) { int keepit; @@ -696,6 +702,11 @@ rebuild_env(noexec) if (!ISSET(didvar, DID_USERNAME)) sudo_setenv("USERNAME", user_name, FALSE); } + + /* If we didn't keep HOME, reset it based on target user. */ + if (!ISSET(didvar, KEPT_HOME)) + reset_home = TRUE; + /* * Set MAIL to target user in -i mode or if MAIL is not preserved * from user's environment. @@ -709,13 +720,6 @@ rebuild_env(noexec) sudo_putenv(cp, ISSET(didvar, DID_MAIL), TRUE); } } else { - /* Reset HOME based on target user if configured to. */ - if (ISSET(sudo_mode, MODE_RUN)) { - if (def_always_set_home || ISSET(sudo_mode, MODE_RESET_HOME) || - (ISSET(sudo_mode, MODE_SHELL) && def_set_home)) - reset_home = TRUE; - } - /* * Copy environ entries as long as they don't match env_delete or * env_check. @@ -765,7 +769,7 @@ rebuild_env(noexec) } /* Set $HOME to target user if not preserving user's value. */ - if (reset_home && !ISSET(didvar, KEPT_HOME)) + if (reset_home) sudo_setenv("HOME", runas_pw->pw_dir, TRUE); /* Provide default values for $TERM and $PATH if they are not set. */ -- 2.39.5