From 15e5e35be5894e059c343679d895abb258b967c2 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Mon, 18 Sep 2023 11:48:15 -0400 Subject: [PATCH] os: in TestMkdirStickyUmask, create a non-sticky directory as a control Fixes #62684. Change-Id: If7afa811526973671d83e21440cbbc1a7b2120d8 Reviewed-on: https://go-review.googlesource.com/c/go/+/529115 Auto-Submit: Bryan Mills LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor --- src/os/os_unix_test.go | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/os/os_unix_test.go b/src/os/os_unix_test.go index e4271ff905..98e436fae6 100644 --- a/src/os/os_unix_test.go +++ b/src/os/os_unix_test.go @@ -257,8 +257,23 @@ func TestMkdirStickyUmask(t *testing.T) { const umask = 0077 dir := newDir("TestMkdirStickyUmask", t) defer RemoveAll(dir) + oldUmask := syscall.Umask(umask) defer syscall.Umask(oldUmask) + + // We have set a umask, but if the parent directory happens to have a default + // ACL, the umask may be ignored. To prevent spurious failures from an ACL, + // we create a non-sticky directory as a “control case” to compare against our + // sticky-bit “experiment”. + control := filepath.Join(dir, "control") + if err := Mkdir(control, 0755); err != nil { + t.Fatal(err) + } + cfi, err := Stat(control) + if err != nil { + t.Fatal(err) + } + p := filepath.Join(dir, "dir1") if err := Mkdir(p, ModeSticky|0755); err != nil { t.Fatal(err) @@ -267,8 +282,11 @@ func TestMkdirStickyUmask(t *testing.T) { if err != nil { t.Fatal(err) } - if mode := fi.Mode(); (mode&umask) != 0 || (mode&^ModePerm) != (ModeDir|ModeSticky) { - t.Errorf("unexpected mode %s", mode) + + got := fi.Mode() + want := cfi.Mode() | ModeSticky + if got != want { + t.Errorf("Mkdir(_, ModeSticky|0755) created dir with mode %v; want %v", got, want) } } -- 2.50.0