diff options
author | Jakob Unterwurzacher | 2021-08-16 18:40:48 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2021-08-16 19:23:58 +0200 |
commit | b2724070d95234a8cd281f275211e0f827a8bbe1 (patch) | |
tree | 0c4efc4714d0826ac99ec40c905a111c9f9c7015 /internal/fusefrontend_reverse/node.go | |
parent | ad4b99170b9ad438909f5cba8c32109a18697a7a (diff) |
reverse mode: implement -one-file-system
Fixes https://github.com/rfjakob/gocryptfs/issues/475
Diffstat (limited to 'internal/fusefrontend_reverse/node.go')
-rw-r--r-- | internal/fusefrontend_reverse/node.go | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/internal/fusefrontend_reverse/node.go b/internal/fusefrontend_reverse/node.go index 787b99b..1b2fd67 100644 --- a/internal/fusefrontend_reverse/node.go +++ b/internal/fusefrontend_reverse/node.go @@ -22,6 +22,10 @@ import ( // in a `gocryptfs -reverse` mount. type Node struct { fs.Inode + // isOtherFilesystem is used for --one-filesystem. + // It is set when the device number of this file or directory + // is different from n.rootNode().rootDev. + isOtherFilesystem bool } // Lookup - FUSE call for discovering a file. @@ -31,7 +35,14 @@ func (n *Node) Lookup(ctx context.Context, cName string, out *fuse.EntryOut) (ch if t == typeDiriv { // gocryptfs.diriv return n.lookupDiriv(ctx, out) - } else if t == typeName { + } + rn := n.rootNode() + if rn.args.OneFileSystem && n.isOtherFilesystem { + // With --one-file-system, we present mountpoints as empty. That is, + // it contains only a gocryptfs.diriv file (allowed above). + return nil, syscall.ENOENT + } + if t == typeName { // gocryptfs.longname.*.name return n.lookupLongnameName(ctx, cName, out) } else if t == typeConfig { |