rev |
line source |
pascal@12084
|
1 su should not chdir to home
|
pascal@12084
|
2 --- busybox-1.18.4/include/libbb.h
|
pascal@12084
|
3 +++ busybox-1.18.4/include/libbb.h
|
pascal@12084
|
4 @@ -1213,6 +1213,7 @@
|
pascal@12084
|
5 #define SETUP_ENV_CHANGEENV (1 << 0)
|
pascal@12084
|
6 #define SETUP_ENV_CLEARENV (1 << 1)
|
pascal@12084
|
7 #define SETUP_ENV_TO_TMP (1 << 2)
|
pascal@12084
|
8 +#define SETUP_ENV_NO_CHDIR (1 << 4)
|
pascal@12084
|
9 extern void setup_environment(const char *shell, int flags, const struct passwd *pw) FAST_FUNC;
|
pascal@12084
|
10 extern int correct_password(const struct passwd *pw) FAST_FUNC;
|
pascal@12084
|
11 /* Returns a malloced string */
|
pascal@12084
|
12
|
pascal@12084
|
13 --- busybox-1.18.4/libbb/setup_environment.c
|
pascal@12084
|
14 +++ busybox-1.18.4/libbb/setup_environment.c
|
pascal@12084
|
15 @@ -34,9 +34,11 @@
|
pascal@12084
|
16 {
|
pascal@12084
|
17 /* Change the current working directory to be the home directory
|
pascal@12084
|
18 * of the user */
|
pascal@12084
|
19 - if (chdir(pw->pw_dir)) {
|
pascal@12084
|
20 - xchdir((flags & SETUP_ENV_TO_TMP) ? "/tmp" : "/");
|
pascal@12084
|
21 - bb_error_msg("can't chdir to home directory '%s'", pw->pw_dir);
|
pascal@12084
|
22 + if ((flags & SETUP_ENV_NO_CHDIR) == 0) {
|
pascal@12084
|
23 + if (chdir(pw->pw_dir)) {
|
pascal@12084
|
24 + xchdir((flags & SETUP_ENV_TO_TMP) ? "/tmp" : "/");
|
pascal@12084
|
25 + bb_error_msg("can't chdir to home directory '%s'", pw->pw_dir);
|
pascal@12084
|
26 + }
|
pascal@12084
|
27 }
|
pascal@12084
|
28
|
pascal@12084
|
29 if (flags & SETUP_ENV_CLEARENV) {
|
pascal@12084
|
30
|
pascal@12084
|
31 --- busybox-1.18.4/loginutils/su.c
|
pascal@12084
|
32 +++ busybox-1.18.4/loginutils/su.c
|
pascal@12084
|
33 @@ -126,7 +126,8 @@
|
pascal@12084
|
34 change_identity(pw);
|
pascal@12084
|
35 setup_environment(opt_shell,
|
pascal@12084
|
36 ((flags & SU_OPT_l) / SU_OPT_l * SETUP_ENV_CLEARENV)
|
pascal@12084
|
37 - + (!(flags & SU_OPT_mp) * SETUP_ENV_CHANGEENV),
|
pascal@12084
|
38 + + (!(flags & SU_OPT_mp) * SETUP_ENV_CHANGEENV)
|
pascal@12088
|
39 + + (!(flags & SU_OPT_l) * SETUP_ENV_NO_CHDIR),
|
pascal@12084
|
40 pw);
|
pascal@12084
|
41 IF_SELINUX(set_current_security_context(NULL);)
|
pascal@12084
|
42
|