From ccf6d00728a8cb107ae2a829f89e7e234e468efb Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Thu, 10 Dec 2015 01:12:05 +0100 Subject: Add missing PlaintextNames checks in OpenDir, Mkdir, Rmdir, initDir Plaintextnames support has bitrotted during the DirIV additions, this needs test cases. Will be added in a future patch. Fixes issue #9. --- pathfs_frontend/fs.go | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'pathfs_frontend') 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. -- cgit v1.2.3