1 |
--- env.c Wed Aug 18 15:27:03 2010 |
2 |
+++ env.c Tue Sep 14 11:41:50 2010 |
3 |
@@ -608,10 +608,16 @@ |
4 |
#ifdef ENV_DEBUG |
5 |
memset(env.envp, 0, env.env_size * sizeof(char *)); |
6 |
#endif |
7 |
- if (def_env_reset || ISSET(sudo_mode, MODE_LOGIN_SHELL)) { |
8 |
- /* Reset HOME based on target user unless keeping old value. */ |
9 |
- reset_home = TRUE; |
10 |
|
11 |
+ /* Reset HOME based on target user if configured to. */ |
12 |
+ if (ISSET(sudo_mode, MODE_RUN)) { |
13 |
+ if (def_always_set_home || |
14 |
+ ISSET(sudo_mode, MODE_RESET_HOME | MODE_LOGIN_SHELL) || |
15 |
+ (ISSET(sudo_mode, MODE_SHELL) && def_set_home)) |
16 |
+ reset_home = TRUE; |
17 |
+ } |
18 |
+ |
19 |
+ if (def_env_reset || ISSET(sudo_mode, MODE_LOGIN_SHELL)) { |
20 |
/* Pull in vars we want to keep from the old environment. */ |
21 |
for (ep = old_envp; *ep; ep++) { |
22 |
int keepit; |
23 |
@@ -696,6 +702,11 @@ |
24 |
if (!ISSET(didvar, DID_USERNAME)) |
25 |
sudo_setenv("USERNAME", user_name, FALSE); |
26 |
} |
27 |
+ |
28 |
+ /* If we didn't keep HOME, reset it based on target user. */ |
29 |
+ if (!ISSET(didvar, KEPT_HOME)) |
30 |
+ reset_home = TRUE; |
31 |
+ |
32 |
/* |
33 |
* Set MAIL to target user in -i mode or if MAIL is not preserved |
34 |
* from user's environment. |
35 |
@@ -709,13 +720,6 @@ |
36 |
sudo_putenv(cp, ISSET(didvar, DID_MAIL), TRUE); |
37 |
} |
38 |
} else { |
39 |
- /* Reset HOME based on target user if configured to. */ |
40 |
- if (ISSET(sudo_mode, MODE_RUN)) { |
41 |
- if (def_always_set_home || ISSET(sudo_mode, MODE_RESET_HOME) || |
42 |
- (ISSET(sudo_mode, MODE_SHELL) && def_set_home)) |
43 |
- reset_home = TRUE; |
44 |
- } |
45 |
- |
46 |
/* |
47 |
* Copy environ entries as long as they don't match env_delete or |
48 |
* env_check. |
49 |
@@ -765,7 +769,7 @@ |
50 |
} |
51 |
|
52 |
/* Set $HOME to target user if not preserving user's value. */ |
53 |
- if (reset_home && !ISSET(didvar, KEPT_HOME)) |
54 |
+ if (reset_home) |
55 |
sudo_setenv("HOME", runas_pw->pw_dir, TRUE); |
56 |
|
57 |
/* Provide default values for $TERM and $PATH if they are not set. */ |