diff options
author | Jakob Unterwurzacher | 2016-09-22 19:54:37 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2016-09-25 16:43:17 +0200 |
commit | 35bcc2dca2dc928e3b7c31e34d785b7a42c06722 (patch) | |
tree | 9530244dbb74a028d0f3377eb5767d662ee1ee15 /internal/fusefrontend_reverse | |
parent | b34a665da4a15762fc2e21e125ba705f691ec5d7 (diff) |
reverse: transform long names in OpenDir
Diffstat (limited to 'internal/fusefrontend_reverse')
-rw-r--r-- | internal/fusefrontend_reverse/rfs.go | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/internal/fusefrontend_reverse/rfs.go b/internal/fusefrontend_reverse/rfs.go index 4f516fd..9fac591 100644 --- a/internal/fusefrontend_reverse/rfs.go +++ b/internal/fusefrontend_reverse/rfs.go @@ -218,19 +218,27 @@ func (rfs *reverseFS) OpenDir(cipherPath string, context *fuse.Context) ([]fuse. if entries == nil { return nil, status } + // Virtual gocryptfs.diriv file + dirIVEntry := fuse.DirEntry{syscall.S_IFREG | 0400, nametransform.DirIVFilename} + virtualFiles := []fuse.DirEntry{dirIVEntry} // Encrypt names dirIV := deriveDirIV(cipherPath) for i := range entries { + var cName string // ".gocryptfs.reverse.conf" in the root directory is mapped to "gocryptfs.conf" if cipherPath == "" && entries[i].Name == configfile.ConfReverseName { - entries[i].Name = configfile.ConfDefaultName + cName = configfile.ConfDefaultName } else { - entries[i].Name = rfs.nameTransform.EncryptName(entries[i].Name, dirIV) + cName = rfs.nameTransform.EncryptName(entries[i].Name, dirIV) + if len(cName) > syscall.NAME_MAX { + cName = nametransform.HashLongName(cName) + dotNameFile := fuse.DirEntry{syscall.S_IFREG | 0600, cName + nametransform.LongNameSuffix} + virtualFiles = append(virtualFiles, dotNameFile) + } } + entries[i].Name = cName } - // Add virtual gocryptfs.diriv - entries = append(entries, fuse.DirEntry{syscall.S_IFREG | 0400, nametransform.DirIVFilename}) - + entries = append(entries, virtualFiles...) return entries, fuse.OK } |