diff options
| -rw-r--r-- | main.go | 12 | ||||
| -rw-r--r-- | pathfs_frontend/fs.go | 21 | 
2 files changed, 22 insertions, 11 deletions
@@ -61,11 +61,13 @@ func initDir(args *argContainer) {  		os.Exit(ERREXIT_INIT)  	} -	// Create gocryptfs.diriv in the root dir -	err = cryptfs.WriteDirIV(args.cipherdir) -	if err != nil { -		fmt.Println(err) -		os.Exit(ERREXIT_INIT) +	if args.diriv && !args.plaintextnames { +		// Create gocryptfs.diriv in the root dir +		err = cryptfs.WriteDirIV(args.cipherdir) +		if err != nil { +			fmt.Println(err) +			os.Exit(ERREXIT_INIT) +		}  	}  	cryptfs.Info.Printf("The filesystem is now ready for mounting.\n") diff --git a/pathfs_frontend/fs.go b/pathfs_frontend/fs.go index 0f462b0..8d05c02 100644 --- a/pathfs_frontend/fs.go +++ b/pathfs_frontend/fs.go @@ -90,7 +90,7 @@ func (fs *FS) OpenDir(dirName string, context *fuse.Context) ([]fuse.DirEntry, f  			return nil, fuse.ToStatus(err)  		}  	} -	// Decrypt filenames +	// Filter and decrypt filenames  	var plain []fuse.DirEntry  	for i := range cipherEntries {  		cName := cipherEntries[i].Name @@ -102,11 +102,13 @@ func (fs *FS) OpenDir(dirName string, context *fuse.Context) ([]fuse.DirEntry, f  			// silently ignore "gocryptfs.diriv" everywhere if dirIV is enabled  			continue  		} -		var name string -		name, err = fs.CryptFS.DecryptName(cName, cachedIV, fs.args.EMENames) -		if err != nil { -			cryptfs.Warn.Printf("Invalid name \"%s\" in dir \"%s\": %s\n", cName, dirName, err) -			continue +		var name string = cName +		if !fs.args.PlaintextNames { +			name, err = fs.CryptFS.DecryptName(cName, cachedIV, fs.args.EMENames) +			if err != nil { +				cryptfs.Warn.Printf("Invalid name \"%s\" in dir \"%s\": %s\n", cName, dirName, err) +				continue +			}  		}  		cipherEntries[i].Name = name  		plain = append(plain, cipherEntries[i]) @@ -251,6 +253,10 @@ func (fs *FS) Mkdir(relPath string, mode uint32, context *fuse.Context) (code fu  	if err != nil {  		return fuse.ToStatus(err)  	} +	if !fs.args.DirIV { +		return fuse.ToStatus(os.Mkdir(encPath, os.FileMode(mode))) +	} +  	// The new directory may take the place of an older one that is still in the cache  	fs.CryptFS.DirIVCacheEnc.Clear()  	// Create directory @@ -290,6 +296,9 @@ func (fs *FS) Rmdir(name string, context *fuse.Context) (code fuse.Status) {  	if err != nil {  		return fuse.ToStatus(err)  	} +	if !fs.args.DirIV { +		return fuse.ToStatus(syscall.Rmdir(encPath)) +	}  	// If the directory is not empty besides gocryptfs.diriv, do not even  	// attempt the dance around gocryptfs.diriv.  | 
