diff options
| -rw-r--r-- | cli_args.go | 10 | ||||
| -rw-r--r-- | init_dir.go | 56 | ||||
| -rw-r--r-- | main.go | 49 | 
3 files changed, 65 insertions, 50 deletions
| diff --git a/cli_args.go b/cli_args.go index 413245c..4c91f44 100644 --- a/cli_args.go +++ b/cli_args.go @@ -10,20 +10,22 @@ import (  	"github.com/rfjakob/gocryptfs/internal/tlog"  ) -// argContainer stores the parsed CLI arguments +// argContainer stores the parsed CLI options and arguments  type argContainer struct {  	debug, init, zerokey, fusedebug, openssl, passwd, foreground, version,  	plaintextnames, quiet, nosyslog, wpanic,  	longnames, allow_other, ro, reverse bool -	masterkey, mountpoint, cipherdir, cpuprofile, config, extpass, +	masterkey, mountpoint, cipherdir, cpuprofile, extpass,  	memprofile, o string +	// Configuration file name override +	config             string  	notifypid, scryptn int  }  var flagSet *flag.FlagSet -// parseCliArgs - parse command line arguments -func parseCliArgs() (args argContainer) { +// parseCliOpts - parse command line options (i.e. arguments that start with "-") +func parseCliOpts() (args argContainer) {  	var err error  	var opensslAuto string diff --git a/init_dir.go b/init_dir.go new file mode 100644 index 0000000..11abe50 --- /dev/null +++ b/init_dir.go @@ -0,0 +1,56 @@ +package main + +import ( +	"os" +	"path/filepath" +	"strings" + +	"github.com/rfjakob/gocryptfs/internal/configfile" +	"github.com/rfjakob/gocryptfs/internal/nametransform" +	"github.com/rfjakob/gocryptfs/internal/readpassword" +	"github.com/rfjakob/gocryptfs/internal/tlog" +) + +// initDir initializes an empty directory for use as a gocryptfs cipherdir. +func initDir(args *argContainer) { +	err := checkDirEmpty(args.cipherdir) +	if err != nil { +		tlog.Fatal.Printf("Invalid cipherdir: %v", err) +		os.Exit(ERREXIT_INIT) +	} + +	// Create gocryptfs.conf +	if args.extpass == "" { +		tlog.Info.Printf("Choose a password for protecting your files.") +	} else { +		tlog.Info.Printf("Using password provided via -extpass.") +	} +	password := readpassword.Twice(args.extpass) +	creator := tlog.ProgramName + " " + GitVersion +	err = configfile.CreateConfFile(args.config, password, args.plaintextnames, args.scryptn, creator) +	if err != nil { +		tlog.Fatal.Println(err) +		os.Exit(ERREXIT_INIT) +	} + +	if !args.plaintextnames { +		// Create gocryptfs.diriv in the root dir +		err = nametransform.WriteDirIV(args.cipherdir) +		if err != nil { +			tlog.Fatal.Println(err) +			os.Exit(ERREXIT_INIT) +		} +	} + +	tlog.Info.Printf(tlog.ColorGreen + "The filesystem has been created successfully." + tlog.ColorReset) +	wd, _ := os.Getwd() +	friendlyPath, _ := filepath.Rel(wd, args.cipherdir) +	if strings.HasPrefix(friendlyPath, "../") { +		// A relative path that starts with "../" is pretty unfriendly, just +		// keep the absolute path. +		friendlyPath = args.cipherdir +	} +	tlog.Info.Printf(tlog.ColorGrey+"You can now mount it using: %s %s MOUNTPOINT"+tlog.ColorReset, +		tlog.ProgramName, friendlyPath) +	os.Exit(0) +} @@ -24,7 +24,6 @@ import (  	"github.com/rfjakob/gocryptfs/internal/cryptocore"  	"github.com/rfjakob/gocryptfs/internal/fusefrontend"  	"github.com/rfjakob/gocryptfs/internal/fusefrontend_reverse" -	"github.com/rfjakob/gocryptfs/internal/nametransform"  	"github.com/rfjakob/gocryptfs/internal/readpassword"  	"github.com/rfjakob/gocryptfs/internal/tlog"  ) @@ -50,50 +49,6 @@ var GitVersionFuse = pleaseBuildBash  // Unix timestamp, set by build.bash  var BuildTime = "0" -// initDir initializes an empty directory for use as a gocryptfs cipherdir. -func initDir(args *argContainer) { -	err := checkDirEmpty(args.cipherdir) -	if err != nil { -		tlog.Fatal.Printf("Invalid cipherdir: %v", err) -		os.Exit(ERREXIT_INIT) -	} - -	// Create gocryptfs.conf -	if args.extpass == "" { -		tlog.Info.Printf("Choose a password for protecting your files.") -	} else { -		tlog.Info.Printf("Using password provided via -extpass.") -	} -	password := readpassword.Twice(args.extpass) -	creator := tlog.ProgramName + " " + GitVersion -	err = configfile.CreateConfFile(args.config, password, args.plaintextnames, args.scryptn, creator) -	if err != nil { -		tlog.Fatal.Println(err) -		os.Exit(ERREXIT_INIT) -	} - -	if !args.plaintextnames { -		// Create gocryptfs.diriv in the root dir -		err = nametransform.WriteDirIV(args.cipherdir) -		if err != nil { -			tlog.Fatal.Println(err) -			os.Exit(ERREXIT_INIT) -		} -	} - -	tlog.Info.Printf(tlog.ColorGreen + "The filesystem has been created successfully." + tlog.ColorReset) -	wd, _ := os.Getwd() -	friendlyPath, _ := filepath.Rel(wd, args.cipherdir) -	if strings.HasPrefix(friendlyPath, "../") { -		// A relative path that starts with "../" is pretty unfriendly, just -		// keep the absolute path. -		friendlyPath = args.cipherdir -	} -	tlog.Info.Printf(tlog.ColorGrey+"You can now mount it using: %s %s MOUNTPOINT"+tlog.ColorReset, -		tlog.ProgramName, friendlyPath) -	os.Exit(0) -} -  func usageText() {  	printVersion()  	fmt.Printf(` @@ -157,7 +112,9 @@ func main() {  	runtime.GOMAXPROCS(4)  	var err error -	args := parseCliArgs() +	// Parse all command-line options (i.e. arguments starting with "-") +	// into "args". Path arguments are parsed below. +	args := parseCliOpts()  	// Fork a child into the background if "-f" is not set AND we are mounting  	// a filesystem. The child will do all the work. | 
