Skip to content

Commit 27721bb

Browse files
committed
add SUDO_HOME (fixes #928)
1 parent 58c2df5 commit 27721bb

File tree

4 files changed

+11
-1
lines changed

4 files changed

+11
-1
lines changed

src/sudo/env/environment.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ fn add_extra_env(
6262
context.current_user.gid.to_string().into(),
6363
);
6464
environment.insert("SUDO_USER".into(), context.current_user.name.clone().into());
65+
environment.insert("SUDO_HOME".into(), context.current_user.home.clone().into());
6566
// target user
6667
environment
6768
.entry("MAIL".into())

src/sudo/env/tests.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const TESTS: &str = "
3535
SUDO_GID=1000
3636
SUDO_UID=1000
3737
SUDO_USER=test
38+
SUDO_HOME=/home/test
3839
HOME=/root
3940
LOGNAME=root
4041
USER=root
@@ -52,6 +53,7 @@ const TESTS: &str = "
5253
SUDO_GID=1000
5354
SUDO_UID=1000
5455
SUDO_USER=test
56+
SUDO_HOME=/home/test
5557
HOME=/home/test
5658
LOGNAME=test
5759
USER=test

test-framework/sudo-compliance-tests/src/sudo/env_reset.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ fn some_vars_are_preserved() {
173173
let term = "some-term";
174174
let sudo_command = "some-sudo-command";
175175
let sudo_user = "some-sudo-user";
176+
let sudo_home = "some-sudo-home";
176177
let sudo_uid = "some-sudo-uid";
177178
let sudo_gid = "some-sudo-gid";
178179
let stdout = Command::new("env")
@@ -189,6 +190,7 @@ fn some_vars_are_preserved() {
189190
&format!("TERM={term}"),
190191
&format!("SUDO_COMMAND={sudo_command}"),
191192
&format!("SUDO_USER={sudo_user}"),
193+
&format!("SUDO_HOME={sudo_home}"),
192194
&format!("SUDO_UID={sudo_uid}"),
193195
&format!("SUDO_GID={sudo_gid}"),
194196
&sudo_abs_path,

test-framework/sudo-compliance-tests/src/sudo/sudoers/env.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ fn vars_with_target_user_specific_values(env_list: EnvList) {
311311
fn sudo_env_vars(env_list: EnvList) {
312312
let env = Env([
313313
SUDOERS_ALL_ALL_NOPASSWD,
314-
&format!("Defaults {env_list} = \"SUDO_COMMAND SUDO_GID SUDO_UID SUDO_USER\""),
314+
&format!("Defaults {env_list} = \"SUDO_COMMAND SUDO_GID SUDO_UID SUDO_USER SUDO_HOME\""),
315315
])
316316
.build();
317317

@@ -320,6 +320,7 @@ fn sudo_env_vars(env_list: EnvList) {
320320
.arg("SUDO_GID=gid")
321321
.arg("SUDO_UID=uid")
322322
.arg("SUDO_USER=user")
323+
.arg("SUDO_HOME=sudo_home")
323324
.args(["sudo", "env"])
324325
.output(&env)
325326
.stdout();
@@ -329,6 +330,10 @@ fn sudo_env_vars(env_list: EnvList) {
329330
assert_eq!(Some("0"), sudo_env.get("SUDO_GID").copied());
330331
assert_eq!(Some("0"), sudo_env.get("SUDO_UID").copied());
331332
assert_eq!(Some("root"), sudo_env.get("SUDO_USER").copied());
333+
334+
if let Some(val) = sudo_env.get("SUDO_HOME").copied() {
335+
assert_eq!("/root", val);
336+
}
332337
}
333338

334339
fn user_set_to_preserved_logname_value(env_list: EnvList) {

0 commit comments

Comments
 (0)