diff options
| author | Jakob Unterwurzacher | 2016-10-10 08:43:09 +0200 | 
|---|---|---|
| committer | Jakob Unterwurzacher | 2016-10-10 08:53:29 +0200 | 
| commit | 828f7184838be17d04ff4d78d8b066f4947406f3 (patch) | |
| tree | b400497ca98f5902a2dbc22baeaccab4874a9572 | |
| parent | 40420cb4cd2997260fd00a2c1566ea62c146f6eb (diff) | |
fusefrontend: Also preserve the owner in Mkdir
This already worked for files but was missing for dirs.
| -rw-r--r-- | internal/fusefrontend/fs.go | 3 | ||||
| -rw-r--r-- | internal/fusefrontend/fs_dir.go | 22 | 
2 files changed, 22 insertions, 3 deletions
| diff --git a/internal/fusefrontend/fs.go b/internal/fusefrontend/fs.go index 26a5b5e..33053de 100644 --- a/internal/fusefrontend/fs.go +++ b/internal/fusefrontend/fs.go @@ -153,10 +153,11 @@ func (fs *FS) Create(path string, flags uint32, mode uint32, context *fuse.Conte  			return nil, fuse.ToStatus(err)  		}  	} +	// Set owner  	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) +			tlog.Warn.Printf("Create: Chown failed: %v", err)  		}  	}  	return NewFile(fd, writeOnly, fs.contentEnc) diff --git a/internal/fusefrontend/fs_dir.go b/internal/fusefrontend/fs_dir.go index a3b2ccf..b7a0251 100644 --- a/internal/fusefrontend/fs_dir.go +++ b/internal/fusefrontend/fs_dir.go @@ -20,7 +20,8 @@ import (  func (fs *FS) mkdirWithIv(cPath string, mode uint32) error {  	// Between the creation of the directory and the creation of gocryptfs.diriv -	// the directory is inconsistent. Take the lock to prevent other readers. +	// the directory is inconsistent. Take the lock to prevent other readers +	// from seeing it.  	fs.dirIVLock.Lock()  	// The new directory may take the place of an older one that is still in the cache  	fs.nameTransform.DirIVCache.Clear() @@ -51,6 +52,13 @@ func (fs *FS) Mkdir(newPath string, mode uint32, context *fuse.Context) (code fu  	}  	if fs.args.PlaintextNames {  		err = os.Mkdir(cPath, os.FileMode(mode)) +		// Set owner +		if fs.args.PreserveOwner { +			err = os.Chown(cPath, int(context.Owner.Uid), int(context.Owner.Gid)) +			if err != nil { +				tlog.Warn.Printf("Mkdir: Chown failed: %v", err) +			} +		}  		return fuse.ToStatus(err)  	} @@ -94,7 +102,17 @@ func (fs *FS) Mkdir(newPath string, mode uint32, context *fuse.Context) (code fu  			tlog.Warn.Printf("Mkdir: Chmod failed: %v", err)  		}  	} - +	// Set owner +	if fs.args.PreserveOwner { +		err = os.Chown(cPath, int(context.Owner.Uid), int(context.Owner.Gid)) +		if err != nil { +			tlog.Warn.Printf("Mkdir: Chown failed: %v", err) +		} +		err = os.Chown(filepath.Join(cPath, nametransform.DirIVFilename), int(context.Owner.Uid), int(context.Owner.Gid)) +		if err != nil { +			tlog.Warn.Printf("Mkdir: Chown failed: %v", err) +		} +	}  	return fuse.OK  } | 
