diriv: fix readdir
It decrypted all file names using the root directory iv
This commit is contained in:
parent
fe7355f9ee
commit
3b2143bafc
@ -10,6 +10,7 @@ import (
|
|||||||
// readDirIV - read the "gocryptfs.diriv" file from "dir" (absolute path)
|
// readDirIV - read the "gocryptfs.diriv" file from "dir" (absolute path)
|
||||||
func (be *CryptFS) readDirIV(dir string) (iv []byte, err error) {
|
func (be *CryptFS) readDirIV(dir string) (iv []byte, err error) {
|
||||||
ivfile := filepath.Join(dir, DIRIV_FILENAME)
|
ivfile := filepath.Join(dir, DIRIV_FILENAME)
|
||||||
|
Debug.Printf("readDirIV: reading %s\n", ivfile)
|
||||||
iv, err = ioutil.ReadFile(ivfile)
|
iv, err = ioutil.ReadFile(ivfile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Warn.Printf("readDirIV: %v\n", err)
|
Warn.Printf("readDirIV: %v\n", err)
|
||||||
@ -63,6 +64,7 @@ func (be *CryptFS) DecryptPathDirIV(encryptedPath string, rootDir string) (strin
|
|||||||
var wd = rootDir
|
var wd = rootDir
|
||||||
var plainNames []string
|
var plainNames []string
|
||||||
encryptedNames := strings.Split(encryptedPath, "/")
|
encryptedNames := strings.Split(encryptedPath, "/")
|
||||||
|
Debug.Printf("DecryptPathDirIV: decrypting %v\n", encryptedNames)
|
||||||
for _, encryptedName := range encryptedNames {
|
for _, encryptedName := range encryptedNames {
|
||||||
iv, err := be.readDirIV(wd)
|
iv, err := be.readDirIV(wd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -89,7 +89,15 @@ func (fs *FS) OpenDir(dirName string, context *fuse.Context) ([]fuse.DirEntry, f
|
|||||||
// silently ignore "gocryptfs.diriv" everywhere if dirIV is enabled
|
// silently ignore "gocryptfs.diriv" everywhere if dirIV is enabled
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
name, err := fs.decryptPath(cName)
|
var name string
|
||||||
|
if !fs.dirIV {
|
||||||
|
name, err = fs.decryptPath(cName)
|
||||||
|
} else {
|
||||||
|
// When dirIV is enabled we need the full path to be able to decrypt it
|
||||||
|
cPath := filepath.Join(cDirName, cName)
|
||||||
|
name, err = fs.decryptPath(cPath)
|
||||||
|
name = filepath.Base(name)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cryptfs.Warn.Printf("Invalid name \"%s\" in dir \"%s\": %s\n", cName, dirName, err)
|
cryptfs.Warn.Printf("Invalid name \"%s\" in dir \"%s\": %s\n", cName, dirName, err)
|
||||||
continue
|
continue
|
||||||
|
Loading…
x
Reference in New Issue
Block a user