aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/fusefrontend/args.go3
-rw-r--r--internal/fusefrontend/fs.go7
-rw-r--r--main.go5
3 files changed, 14 insertions, 1 deletions
diff --git a/internal/fusefrontend/args.go b/internal/fusefrontend/args.go
index b3fa665..78b9b5b 100644
--- a/internal/fusefrontend/args.go
+++ b/internal/fusefrontend/args.go
@@ -7,4 +7,7 @@ type Args struct {
OpenSSL bool
PlaintextNames bool
LongNames bool
+ // Should we chown a file after it has been created?
+ // This only makes sense if (1) allow_other is set and (2) we run as root.
+ PreserveOwner bool
}
diff --git a/internal/fusefrontend/fs.go b/internal/fusefrontend/fs.go
index 640c45d..9ae57fa 100644
--- a/internal/fusefrontend/fs.go
+++ b/internal/fusefrontend/fs.go
@@ -145,7 +145,12 @@ func (fs *FS) Create(path string, flags uint32, mode uint32, context *fuse.Conte
return nil, fuse.ToStatus(err)
}
}
-
+ if fs.args.PreserveOwner {
+ err = fd.Chown(int(context.Owner.Uid), int(context.Owner.Gid))
+ if err != nil {
+ tlog.Warn.Printf("PreserveOwner: Chown failed: %v", err)
+ }
+ }
return NewFile(fd, writeOnly, fs.contentEnc)
}
diff --git a/main.go b/main.go
index b7ff97d..c87cc87 100644
--- a/main.go
+++ b/main.go
@@ -374,6 +374,11 @@ func initFuseFrontend(key []byte, args argContainer, confFile *configfile.ConfFi
// Settings from the config file override command line args
frontendArgs.PlaintextNames = confFile.IsFeatureFlagSet(configfile.FlagPlaintextNames)
}
+ // If allow_other is set and we run as root, try to give newly created files to
+ // the right user.
+ if args.allow_other && os.Getuid() == 0 {
+ frontendArgs.PreserveOwner = true
+ }
jsonBytes, _ := json.MarshalIndent(frontendArgs, "", "\t")
tlog.Debug.Printf("frontendArgs: %s", string(jsonBytes))