summaryrefslogtreecommitdiffstats
path: root/login-utils/su.c
diff options
context:
space:
mode:
authorLudwig Nussel2010-08-09 16:03:12 +0200
committerLudwig Nussel2012-05-24 13:52:43 +0200
commit589554ad7a8827ffa59b50591f2c18a49fc270a7 (patch)
tree2fb7fcf4f8bfeceba53b7c43334d60008de952b0 /login-utils/su.c
parentset sane default path (diff)
downloadkernel-qcow2-util-linux-589554ad7a8827ffa59b50591f2c18a49fc270a7.tar.gz
kernel-qcow2-util-linux-589554ad7a8827ffa59b50591f2c18a49fc270a7.tar.xz
kernel-qcow2-util-linux-589554ad7a8827ffa59b50591f2c18a49fc270a7.zip
honor settings in /etc/default/su resp /etc/login.defs
Diffstat (limited to 'login-utils/su.c')
-rw-r--r--login-utils/su.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/login-utils/su.c b/login-utils/su.c
index 237527ef9..69043f695 100644
--- a/login-utils/su.c
+++ b/login-utils/su.c
@@ -119,6 +119,8 @@
# include <paths.h>
#endif
+#include "getdef.h"
+
/* The default PATH for simulated logins to non-superuser accounts. */
#define DEFAULT_LOGIN_PATH "/usr/local/bin:/bin:/usr/bin"
@@ -491,23 +493,29 @@ modify_environment (const struct passwd *pw, const char *shell)
xsetenv ("USER", pw->pw_name);
xsetenv ("LOGNAME", pw->pw_name);
xsetenv ("PATH", (pw->pw_uid
- ? DEFAULT_LOGIN_PATH
- : DEFAULT_ROOT_LOGIN_PATH));
+ ? getdef_str ("PATH", DEFAULT_LOGIN_PATH)
+ : getdef_str ("SUPATH", DEFAULT_ROOT_LOGIN_PATH)));
}
else
{
/* Set HOME, SHELL, and if not becoming a super-user,
USER and LOGNAME. */
if (change_environment)
- {
- xsetenv ("HOME", pw->pw_dir);
- xsetenv ("SHELL", shell);
- if (pw->pw_uid)
- {
- xsetenv ("USER", pw->pw_name);
- xsetenv ("LOGNAME", pw->pw_name);
- }
- }
+ {
+ xsetenv ("HOME", pw->pw_dir);
+ xsetenv ("SHELL", shell);
+ if (getdef_bool ("ALWAYS_SET_PATH", 0))
+ xsetenv ("PATH", (pw->pw_uid
+ ? getdef_str ("PATH",
+ DEFAULT_LOGIN_PATH)
+ : getdef_str ("SUPATH",
+ DEFAULT_ROOT_LOGIN_PATH)));
+ if (pw->pw_uid)
+ {
+ xsetenv ("USER", pw->pw_name);
+ xsetenv ("LOGNAME", pw->pw_name);
+ }
+ }
}
#ifdef USE_PAM
@@ -736,6 +744,7 @@ main (int argc, char **argv)
#ifdef SYSLOG_FAILURE
log_su (pw, false);
#endif
+ sleep (getdef_num ("FAIL_DELAY", 1));
error (EXIT_FAIL, 0, _("incorrect password"));
}
#ifdef SYSLOG_SUCCESS