]> granicus.if.org Git - sudo/commitdiff
For env_reset, SHELL should be set based on the target user, not
authorTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 6 Oct 2015 16:25:43 +0000 (10:25 -0600)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 6 Oct 2015 16:25:43 +0000 (10:25 -0600)
the invoking user unless preserved via env_keep.

NEWS
doc/UPGRADE
plugins/sudoers/env.c

diff --git a/NEWS b/NEWS
index b04b77ffcacbd9c52cba07de5fb209aff974af91..3c206ca157a2be553556cac8e4326ee50b58fd83 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -67,6 +67,11 @@ What's new in Sudo 1.8.15
 
  * Hungarian and Slovak translations for sudoers from translationproject.org.
 
+ * Previously, when env_reset was enabled (the default) and the -s
+   option was not used, the SHELL environment variable was set to the
+   shell of the invoking user.  Now, when env_reset is enabled and
+   the -s option is not used, SHELL is set based on the target user.
+
 What's new in Sudo 1.8.14p3
 
  * Fixed a bug introduced in sudo 1.8.14p2 that prevented sudo
index 358f2d7455a5448ddcfa4d6d3a1dea37e43476e0..2678d1a9984adb1134e13f04522f01c7062b9786 100644 (file)
@@ -3,6 +3,12 @@ Notes on upgrading from an older release
 
 o Upgrading from a version prior to 1.8.15:
 
+    Prior to version 1.8.15, when env_reset was enabled (the default)
+    and the -s option was not used, the SHELL environment variable
+    was set to the shell of the invoking user.  In 1.8.15 and above,
+    when env_reset is enabled and the -s option is not used, SHELL
+    is set based on the target user.
+
     When editing files with sudoedit, symbolic links will no longer
     be followed by default.  The old behavior can be restored by
     enabling the sudoedit_follow option in sudoers or on a per-command
index 39d24dfb0fda478eed832715241c3206d5d27694..90652508a8d7b1def996bd4b688a97741959640c 100644 (file)
@@ -939,8 +939,6 @@ rebuild_env(void)
            CHECK_SETENV2("USERNAME", runas_pw->pw_name,
                ISSET(didvar, DID_USERNAME), true);
        } else {
-           if (!ISSET(didvar, DID_SHELL))
-               CHECK_SETENV2("SHELL", sudo_user.pw->pw_shell, false, true);
            /* We will set LOGNAME later in the def_set_logname case. */
            if (!def_set_logname) {
                if (!ISSET(didvar, DID_LOGNAME))
@@ -984,6 +982,8 @@ rebuild_env(void)
            if (!env_should_delete(*ep)) {
                if (strncmp(*ep, "SUDO_PS1=", 9) == 0)
                    ps1 = *ep + 5;
+               else if (strncmp(*ep, "SHELL=", 6) == 0)
+                   SET(didvar, DID_SHELL);
                else if (strncmp(*ep, "PATH=", 5) == 0)
                    SET(didvar, DID_PATH);
                else if (strncmp(*ep, "TERM=", 5) == 0)
@@ -1039,7 +1039,9 @@ rebuild_env(void)
     if (reset_home)
        CHECK_SETENV2("HOME", runas_pw->pw_dir, true, true);
 
-    /* Provide default values for $TERM and $PATH if they are not set. */
+    /* Provide default values for $SHELL, $TERM and $PATH if not set. */
+    if (!ISSET(didvar, DID_SHELL))
+       CHECK_SETENV2("SHELL", runas_pw->pw_shell, false, false);
     if (!ISSET(didvar, DID_TERM))
        CHECK_PUTENV("TERM=unknown", false, false);
     if (!ISSET(didvar, DID_PATH))