fusefrontend: fix -force_owner not affecting MKNOD
Fixes https://github.com/rfjakob/gocryptfs/issues/629
This commit is contained in:
parent
c23a7f2259
commit
5f955423b7
@ -277,7 +277,13 @@ func (n *Node) Mknod(ctx context.Context, name string, mode, rdev uint32, out *f
|
|||||||
errno = fs.ToErrno(err)
|
errno = fs.ToErrno(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
inode = n.newChild(ctx, st, out)
|
inode = n.newChild(ctx, st, out)
|
||||||
|
|
||||||
|
if rn.args.ForceOwner != nil {
|
||||||
|
out.Owner = *rn.args.ForceOwner
|
||||||
|
}
|
||||||
|
|
||||||
return inode, 0
|
return inode, 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -427,10 +427,11 @@ func TestFsync(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// force_owner was broken by the v2.0 rewrite:
|
// force_owner was broken by the v2.0 rewrite:
|
||||||
// The owner was only forced for GETATTR, but not for CREATE or LOOKUP.
|
// The owner was only forced for GETATTR, but not for CREATE, LOOKUP, MKNOD.
|
||||||
//
|
//
|
||||||
// https://github.com/rfjakob/gocryptfs/issues/609
|
// https://github.com/rfjakob/gocryptfs/issues/609
|
||||||
// https://github.com/rfjakob/gocryptfs/pull/610
|
// https://github.com/rfjakob/gocryptfs/pull/610
|
||||||
|
// https://github.com/rfjakob/gocryptfs/issues/629
|
||||||
func TestForceOwner(t *testing.T) {
|
func TestForceOwner(t *testing.T) {
|
||||||
cDir := test_helpers.InitFS(t)
|
cDir := test_helpers.InitFS(t)
|
||||||
os.Chmod(cDir, 0777) // Mount needs to be accessible for us
|
os.Chmod(cDir, 0777) // Mount needs to be accessible for us
|
||||||
@ -479,6 +480,18 @@ func TestForceOwner(t *testing.T) {
|
|||||||
t.Errorf("GETATTR returned uid or gid != 1234: %#v", st)
|
t.Errorf("GETATTR returned uid or gid != 1234: %#v", st)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test MKNOD
|
||||||
|
sock := pDir + "/sock"
|
||||||
|
if err := syscall.Mknod(sock, syscall.S_IFSOCK|0600, 0); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if err := syscall.Stat(sock, &st); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if st.Uid != 1234 || st.Gid != 1234 {
|
||||||
|
t.Errorf("MKNOD returned uid or gid != 1234: %#v", st)
|
||||||
|
}
|
||||||
|
|
||||||
// Remount to clear cache
|
// Remount to clear cache
|
||||||
test_helpers.UnmountPanic(pDir)
|
test_helpers.UnmountPanic(pDir)
|
||||||
test_helpers.MountOrFatal(t, cDir, pDir, "-force_owner=1234:1234", "-extpass=echo test")
|
test_helpers.MountOrFatal(t, cDir, pDir, "-force_owner=1234:1234", "-extpass=echo test")
|
||||||
|
Loading…
Reference in New Issue
Block a user