diff options
| author | Jakob Unterwurzacher | 2022-01-27 15:44:09 +0100 | 
|---|---|---|
| committer | Jakob Unterwurzacher | 2022-01-27 15:44:09 +0100 | 
| commit | ba75aa1ab0dcef8ad8c8fbb11e8895413ad26787 (patch) | |
| tree | a64b15a0b69bbecf4900a4ae0fc77fac303a4f10 | |
| parent | b636f79f8981f2b782a26dbf074ed457157d8413 (diff) | |
root_test: add TestOverlay ; syscallcompat: add QuirkNoUserXattr
| -rw-r--r-- | internal/syscallcompat/quirks.go | 2 | ||||
| -rw-r--r-- | internal/syscallcompat/quirks_linux.go | 4 | ||||
| -rw-r--r-- | tests/root_test/root_test.go | 31 | 
3 files changed, 37 insertions, 0 deletions
diff --git a/internal/syscallcompat/quirks.go b/internal/syscallcompat/quirks.go index 110c00d..858f16d 100644 --- a/internal/syscallcompat/quirks.go +++ b/internal/syscallcompat/quirks.go @@ -13,6 +13,8 @@ const (  	// On MacOS ExFAT, all empty files share inode number 1:  	// https://github.com/rfjakob/gocryptfs/issues/585  	QuirkDuplicateIno1 +	// QuirkNoUserXattr means that user.* xattrs are not supported +	QuirkNoUserXattr  )  func logQuirk(s string) { diff --git a/internal/syscallcompat/quirks_linux.go b/internal/syscallcompat/quirks_linux.go index bcdcf07..5ef2d8a 100644 --- a/internal/syscallcompat/quirks_linux.go +++ b/internal/syscallcompat/quirks_linux.go @@ -27,5 +27,9 @@ func DetectQuirks(cipherdir string) (q uint64) {  		q |= QuirkBrokenFalloc  	} +	if uint32(st.Type) == unix.TMPFS_MAGIC { +		logQuirk("tmpfs detected, no extended attributes except acls will work.") +	} +  	return q  } diff --git a/tests/root_test/root_test.go b/tests/root_test/root_test.go index fe38cfa..462aaeb 100644 --- a/tests/root_test/root_test.go +++ b/tests/root_test/root_test.go @@ -362,3 +362,34 @@ func TestBtrfsQuirks(t *testing.T) {  		t.Errorf("wrong quirk: %v", quirk)  	}  } + +func TestOverlay(t *testing.T) { +	if os.Getuid() != 0 { +		t.Skip("must run as root") +	} +	cDir := test_helpers.InitFS(t) +	if syscallcompat.DetectQuirks(cDir)|syscallcompat.QuirkNoUserXattr != 0 { +		t.Logf("No user xattrs! overlay mount will likely fail.") +	} +	os.Chmod(cDir, 0755) +	pDir := cDir + ".mnt" +	test_helpers.MountOrFatal(t, cDir, pDir, "-allow_other", "-extpass=echo test") +	defer test_helpers.UnmountPanic(pDir) + +	for _, d := range []string{"lower", "upper", "work", "merged"} { +		err := os.Mkdir(pDir+"/"+d, 0700) +		if err != nil { +			t.Fatal(err) +		} +	} +	ovlMnt := pDir + "/merged" +	cmd := exec.Command("mount", "-t", "overlay", "overlay", +		"-o", "lowerdir="+pDir+"/lower,upperdir="+pDir+"/upper,workdir="+pDir+"/work", +		ovlMnt) +	out, err := cmd.CombinedOutput() +	if err != nil { +		t.Log(string(out)) +		t.Fatal(err) +	} +	defer syscall.Unmount(ovlMnt, 0) +}  | 
