diff options
author | Jakob Unterwurzacher | 2020-08-01 20:47:59 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2020-08-01 21:14:10 +0200 |
commit | 13dc7657ba0aac4da3f4b80ba231a919fdfae0f5 (patch) | |
tree | d13781bacb4a02327f519d399e946f83fd13e5c7 /internal/fusefrontend_reverse_v1api/ctlsock_interface.go | |
parent | dd3d8c100bc9e84c44b2efb55e536b2fc0ded37e (diff) |
v2api/reverse: move old fusefrontend_reverse out of the way
fusefrontend_reverse -> fusefrontend_reverse_v1api
Diffstat (limited to 'internal/fusefrontend_reverse_v1api/ctlsock_interface.go')
-rw-r--r-- | internal/fusefrontend_reverse_v1api/ctlsock_interface.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/internal/fusefrontend_reverse_v1api/ctlsock_interface.go b/internal/fusefrontend_reverse_v1api/ctlsock_interface.go new file mode 100644 index 0000000..f7b8afd --- /dev/null +++ b/internal/fusefrontend_reverse_v1api/ctlsock_interface.go @@ -0,0 +1,38 @@ +package fusefrontend_reverse + +import ( + "path/filepath" + "strings" + + "golang.org/x/sys/unix" + + "github.com/rfjakob/gocryptfs/internal/ctlsocksrv" + "github.com/rfjakob/gocryptfs/internal/pathiv" +) + +var _ ctlsocksrv.Interface = &ReverseFS{} // Verify that interface is implemented. + +// EncryptPath implements ctlsock.Backend. +// This is used for the control socket and for the "-exclude" logic. +func (rfs *ReverseFS) EncryptPath(plainPath string) (string, error) { + if rfs.args.PlaintextNames || plainPath == "" { + return plainPath, nil + } + cipherPath := "" + parts := strings.Split(plainPath, "/") + for _, part := range parts { + dirIV := pathiv.Derive(cipherPath, pathiv.PurposeDirIV) + encryptedPart := rfs.nameTransform.EncryptName(part, dirIV) + if rfs.args.LongNames && len(encryptedPart) > unix.NAME_MAX { + encryptedPart = rfs.nameTransform.HashLongName(encryptedPart) + } + cipherPath = filepath.Join(cipherPath, encryptedPart) + } + return cipherPath, nil +} + +// DecryptPath implements ctlsock.Backend +func (rfs *ReverseFS) DecryptPath(cipherPath string) (string, error) { + p, err := rfs.decryptPath(cipherPath) + return p, err +} |