From f6dad8d0fae25b5d88ad036b841fea10b7296ccb Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Thu, 3 Jan 2019 13:32:13 +0100 Subject: nametransform: simplify WriteDirIV to WriteDirIVAt Un-spaghettify the function and let the callers open the directory. --- init_dir.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'init_dir.go') diff --git a/init_dir.go b/init_dir.go index 5d5cbc9..1f5a7fc 100644 --- a/init_dir.go +++ b/init_dir.go @@ -6,12 +6,14 @@ import ( "os" "path/filepath" "strings" + "syscall" "github.com/rfjakob/gocryptfs/internal/configfile" "github.com/rfjakob/gocryptfs/internal/cryptocore" "github.com/rfjakob/gocryptfs/internal/exitcodes" "github.com/rfjakob/gocryptfs/internal/nametransform" "github.com/rfjakob/gocryptfs/internal/readpassword" + "github.com/rfjakob/gocryptfs/internal/syscallcompat" "github.com/rfjakob/gocryptfs/internal/tlog" ) @@ -96,7 +98,12 @@ func initDir(args *argContainer) { // Forward mode with filename encryption enabled needs a gocryptfs.diriv file // in the root dir if !args.plaintextnames && !args.reverse { - err = nametransform.WriteDirIV(-1, args.cipherdir) + // Open cipherdir (following symlinks) + dirfd, err := syscall.Open(args.cipherdir, syscall.O_RDONLY|syscall.O_DIRECTORY|syscallcompat.O_PATH, 0) + if err == nil { + err = nametransform.WriteDirIVAt(dirfd) + syscall.Close(dirfd) + } if err != nil { tlog.Fatal.Println(err) os.Exit(exitcodes.Init) -- cgit v1.2.3