diff options
| author | Sebastian Lackner | 2017-11-28 00:38:17 +0100 | 
|---|---|---|
| committer | rfjakob | 2017-11-28 09:28:06 +0100 | 
| commit | 295c4c2b852c83ff265466cdeba3cbbc05820e4a (patch) | |
| tree | 19aef0ccde1cec4f1f487243c25b50bf910e1679 /internal/fusefrontend | |
| parent | 3f68b0c09af2b3070346e27b384e80116e515f73 (diff) | |
fusefrontend: Set owner after symlink creation in PlaintextNames mode
This is already done in regular mode, but was missing when PlaintextNames mode
is enabled. As a result, symlinks created by non-root users were still owned
by root afterwards.
Fixes https://github.com/rfjakob/gocryptfs/issues/176
Diffstat (limited to 'internal/fusefrontend')
| -rw-r--r-- | internal/fusefrontend/fs.go | 13 | 
1 files changed, 6 insertions, 7 deletions
| diff --git a/internal/fusefrontend/fs.go b/internal/fusefrontend/fs.go index 05167df..bb2f192 100644 --- a/internal/fusefrontend/fs.go +++ b/internal/fusefrontend/fs.go @@ -427,16 +427,15 @@ func (fs *FS) Symlink(target string, linkName string, context *fuse.Context) (co  	if err != nil {  		return fuse.ToStatus(err)  	} -	if fs.args.PlaintextNames { -		err = os.Symlink(target, cPath) -		return fuse.ToStatus(err) +	var cTarget string = target +	if !fs.args.PlaintextNames { +		// Symlinks are encrypted like file contents (GCM) and base64-encoded +		cBinTarget := fs.contentEnc.EncryptBlock([]byte(target), 0, nil) +		cTarget = fs.nameTransform.B64.EncodeToString(cBinTarget)  	} -	// Symlinks are encrypted like file contents (GCM) and base64-encoded -	cBinTarget := fs.contentEnc.EncryptBlock([]byte(target), 0, nil) -	cTarget := fs.nameTransform.B64.EncodeToString(cBinTarget)  	// Handle long file name  	cName := filepath.Base(cPath) -	if nametransform.IsLongContent(cName) { +	if !fs.args.PlaintextNames && nametransform.IsLongContent(cName) {  		var dirfd *os.File  		dirfd, err = os.Open(filepath.Dir(cPath))  		if err != nil { | 
