Skip to content

Commit d75adcc

Browse files
committed
Add compliance tests for umask
And fix Defaults !umask/Default umask=0777
1 parent b739b3b commit d75adcc

File tree

3 files changed

+57
-1
lines changed

3 files changed

+57
-1
lines changed

src/sudoers/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,9 @@ impl Sudoers {
320320
}
321321

322322
pub(crate) fn umask(&self) -> Umask {
323-
if self.settings.umask_override() {
323+
if self.settings.umask() == 0o777 {
324+
Umask::Preserve
325+
} else if self.settings.umask_override() {
324326
Umask::Override(
325327
self.settings
326328
.umask()

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,5 @@ mod sudo_ps1;
2828
mod sudoers;
2929
mod syslog;
3030
mod timestamp;
31+
mod umask;
3132
mod use_pty;
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
use sudo_test::{Command, Env};
2+
3+
use crate::SUDOERS_ALL_ALL_NOPASSWD;
4+
5+
fn test_umask(config: &str, user_umask: &str, target_umask: &str) {
6+
let env = Env([SUDOERS_ALL_ALL_NOPASSWD, config]).build();
7+
8+
let output = Command::new("sh")
9+
.args(["-c", &format!("umask {user_umask}; sudo sh -c umask")])
10+
.output(&env);
11+
output.assert_success();
12+
13+
assert_eq!(output.stdout(), target_umask);
14+
}
15+
16+
#[test]
17+
fn umask_unchanged() {
18+
test_umask("Defaults umask=0777", "0123", "0123");
19+
test_umask("Defaults !umask", "0123", "0123");
20+
}
21+
22+
#[test]
23+
fn stricter_umask_respected() {
24+
test_umask("Defaults umask=0776", "0022", "0776");
25+
}
26+
27+
#[test]
28+
fn overlapping_umask_unioned() {
29+
test_umask("Defaults umask=0770", "0022", "0772");
30+
}
31+
32+
#[test]
33+
fn looser_umask_unchanged() {
34+
test_umask("Defaults umask=0000", "0022", "0022");
35+
}
36+
37+
#[test]
38+
fn umask_override() {
39+
test_umask(
40+
"Defaults umask=0700\nDefaults umask_override",
41+
"0022",
42+
"0700",
43+
);
44+
}
45+
46+
#[test]
47+
fn umask_override_0777() {
48+
test_umask(
49+
"Defaults umask=0777\nDefaults umask_override",
50+
"0022",
51+
"0022",
52+
);
53+
}

0 commit comments

Comments
 (0)