From 2d607d4b3d6753ef84727d411a8e06bf04b8821c Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Mon, 16 Mar 2015 12:55:51 +1100 Subject: [PATCH 1/3] Declared an applyUmask helper. --- samples/memfs/memfs_test.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/samples/memfs/memfs_test.go b/samples/memfs/memfs_test.go index a1b89f6..ece380b 100644 --- a/samples/memfs/memfs_test.go +++ b/samples/memfs/memfs_test.go @@ -70,6 +70,9 @@ func currentGid() uint32 { return uint32(gid) } +// Transform the supplied mode by the current umask. +func applyUmask(m os.FileMode) os.FileMode + //////////////////////////////////////////////////////////////////////// // Boilerplate //////////////////////////////////////////////////////////////////////// @@ -183,7 +186,7 @@ func (t *MemFSTest) Mkdir_OneLevel() { AssertEq(nil, err) ExpectEq("dir", fi.Name()) ExpectEq(0, fi.Size()) - ExpectEq(os.ModeDir|0754, fi.Mode()) + ExpectEq(os.ModeDir|applyUmask(0754), fi.Mode()) ExpectThat(fi, fusetesting.MtimeIs(createTime)) ExpectThat(fi, fusetesting.BirthtimeIs(createTime)) ExpectTrue(fi.IsDir()) @@ -214,7 +217,7 @@ func (t *MemFSTest) Mkdir_OneLevel() { fi = entries[0] ExpectEq("dir", fi.Name()) - ExpectEq(os.ModeDir|0754, fi.Mode()) + ExpectEq(os.ModeDir|applyUmask(0754), fi.Mode()) } func (t *MemFSTest) Mkdir_TwoLevels() { @@ -245,7 +248,7 @@ func (t *MemFSTest) Mkdir_TwoLevels() { AssertEq(nil, err) ExpectEq("dir", fi.Name()) ExpectEq(0, fi.Size()) - ExpectEq(os.ModeDir|0754, fi.Mode()) + ExpectEq(os.ModeDir|applyUmask(0754), fi.Mode()) ExpectThat(fi, fusetesting.MtimeIs(createTime)) ExpectThat(fi, fusetesting.BirthtimeIs(createTime)) ExpectTrue(fi.IsDir()) @@ -275,7 +278,7 @@ func (t *MemFSTest) Mkdir_TwoLevels() { fi = entries[0] ExpectEq("dir", fi.Name()) - ExpectEq(os.ModeDir|0754, fi.Mode()) + ExpectEq(os.ModeDir|applyUmask(0754), fi.Mode()) } func (t *MemFSTest) Mkdir_AlreadyExists() { @@ -357,7 +360,7 @@ func (t *MemFSTest) CreateNewFile_InRoot() { AssertEq(nil, err) ExpectEq("foo", fi.Name()) ExpectEq(len(contents), fi.Size()) - ExpectEq(0400, fi.Mode()) + ExpectEq(applyUmask(0400), fi.Mode()) ExpectThat(fi, fusetesting.MtimeIs(createTime)) ExpectThat(fi, fusetesting.BirthtimeIs(createTime)) ExpectFalse(fi.IsDir()) @@ -402,7 +405,7 @@ func (t *MemFSTest) CreateNewFile_InSubDir() { AssertEq(nil, err) ExpectEq("foo", fi.Name()) ExpectEq(len(contents), fi.Size()) - ExpectEq(0400, fi.Mode()) + ExpectEq(applyUmask(0400), fi.Mode()) ExpectThat(fi, fusetesting.MtimeIs(createTime)) ExpectThat(fi, fusetesting.BirthtimeIs(createTime)) ExpectFalse(fi.IsDir()) @@ -455,7 +458,7 @@ func (t *MemFSTest) ModifyExistingFile_InRoot() { AssertEq(nil, err) ExpectEq("foo", fi.Name()) ExpectEq(len("Hello, world!"), fi.Size()) - ExpectEq(0600, fi.Mode()) + ExpectEq(applyUmask(0600), fi.Mode()) ExpectThat(fi, fusetesting.MtimeIs(modifyTime)) ExpectThat(fi, fusetesting.BirthtimeIs(createTime)) ExpectFalse(fi.IsDir()) @@ -513,7 +516,7 @@ func (t *MemFSTest) ModifyExistingFile_InSubDir() { AssertEq(nil, err) ExpectEq("foo", fi.Name()) ExpectEq(len("Hello, world!"), fi.Size()) - ExpectEq(0600, fi.Mode()) + ExpectEq(applyUmask(0600), fi.Mode()) ExpectThat(fi, fusetesting.MtimeIs(modifyTime)) ExpectThat(fi, fusetesting.BirthtimeIs(createTime)) ExpectFalse(fi.IsDir()) @@ -1059,7 +1062,7 @@ func (t *MemFSTest) Chmod() { // Stat it. fi, err := os.Stat(fileName) AssertEq(nil, err) - ExpectEq(os.FileMode(0754), fi.Mode()) + ExpectEq(applyUmask(0754), fi.Mode()) } func (t *MemFSTest) Chtimes() { From 84fe345196af94a88f1fd867cbd052a9405fb97a Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Mon, 16 Mar 2015 13:00:01 +1100 Subject: [PATCH 2/3] Defined applyUmask. --- samples/memfs/memfs_test.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/samples/memfs/memfs_test.go b/samples/memfs/memfs_test.go index ece380b..8a21b7e 100644 --- a/samples/memfs/memfs_test.go +++ b/samples/memfs/memfs_test.go @@ -71,7 +71,15 @@ func currentGid() uint32 { } // Transform the supplied mode by the current umask. -func applyUmask(m os.FileMode) os.FileMode +func applyUmask(m os.FileMode) os.FileMode { + // HACK(jacobsa): Use umask(2) to change and restore the umask in order to + // figure out what the mask is. See the listing in `man getumask`. + umask := syscall.Umask(0) + syscall.Umask(umask) + + // Apply it. + return m &^ os.FileMode(umask) +} //////////////////////////////////////////////////////////////////////// // Boilerplate From e4005a4fb9bd95c874867f1a0b781781ced84571 Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Mon, 16 Mar 2015 13:00:11 +1100 Subject: [PATCH 3/3] Removed applyUmask where it doesn't apply. --- samples/memfs/memfs_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/memfs/memfs_test.go b/samples/memfs/memfs_test.go index 8a21b7e..98a3d2e 100644 --- a/samples/memfs/memfs_test.go +++ b/samples/memfs/memfs_test.go @@ -1070,7 +1070,7 @@ func (t *MemFSTest) Chmod() { // Stat it. fi, err := os.Stat(fileName) AssertEq(nil, err) - ExpectEq(applyUmask(0754), fi.Mode()) + ExpectEq(0754, fi.Mode()) } func (t *MemFSTest) Chtimes() {