From cf27037f20723e934320edeff7f8aa356bdca467 Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Sun, 3 Mar 2019 13:25:30 +0100 Subject: Allow multiple -extpass arguments To support arguments containing spaces, -extpass can now be passed multiple times. https://github.com/rfjakob/gocryptfs/issues/289 --- cli_args.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'cli_args.go') diff --git a/cli_args.go b/cli_args.go index a4da85c..425730a 100644 --- a/cli_args.go +++ b/cli_args.go @@ -32,9 +32,11 @@ type argContainer struct { sharedstorage, devrandom, fsck, trezor bool // Mount options with opposites dev, nodev, suid, nosuid, exec, noexec, rw, ro bool - masterkey, mountpoint, cipherdir, cpuprofile, extpass, + masterkey, mountpoint, cipherdir, cpuprofile, memprofile, ko, passfile, ctlsock, fsname, force_owner, trace string - // For reverse mode, --exclude is available. It can be specified multiple times. + // -extpass can be passed multiple times + extpass multipleStrings + // For reverse mode, -exclude is available. It can be specified multiple times. exclude multipleStrings // Configuration file name override config string @@ -62,6 +64,11 @@ func (s *multipleStrings) Set(val string) error { return nil } +func (s *multipleStrings) Empty() bool { + s2 := []string(*s) + return len(s2) == 0 +} + var flagSet *flag.FlagSet // prefixOArgs transform options passed via "-o foo,bar" into regular options @@ -179,7 +186,6 @@ func parseCliOpts() (args argContainer) { flagSet.StringVar(&args.cpuprofile, "cpuprofile", "", "Write cpu profile to specified file") flagSet.StringVar(&args.memprofile, "memprofile", "", "Write memory profile to specified file") flagSet.StringVar(&args.config, "config", "", "Use specified config file instead of CIPHERDIR/gocryptfs.conf") - flagSet.StringVar(&args.extpass, "extpass", "", "Use external program for the password prompt") flagSet.StringVar(&args.passfile, "passfile", "", "Read password from file") flagSet.StringVar(&args.ko, "ko", "", "Pass additional options directly to the kernel, comma-separated list") flagSet.StringVar(&args.ctlsock, "ctlsock", "", "Create control socket at specified path") @@ -190,6 +196,8 @@ func parseCliOpts() (args argContainer) { // -e, --exclude flagSet.Var(&args.exclude, "e", "Alias for -exclude") flagSet.Var(&args.exclude, "exclude", "Exclude relative path from reverse view") + // -extpass + flagSet.Var(&args.extpass, "extpass", "Use external program for the password prompt") flagSet.IntVar(&args.notifypid, "notifypid", 0, "Send USR1 to the specified process after "+ "successful mount - used internally for daemonization") @@ -248,7 +256,7 @@ func parseCliOpts() (args argContainer) { args.allow_other = false args.ko = "noexec" } - if args.extpass != "" && args.passfile != "" { + if !args.extpass.Empty() && args.passfile != "" { tlog.Fatal.Printf("The options -extpass and -passfile cannot be used at the same time") os.Exit(exitcodes.Usage) } @@ -256,11 +264,11 @@ func parseCliOpts() (args argContainer) { tlog.Fatal.Printf("The options -passfile and -masterkey cannot be used at the same time") os.Exit(exitcodes.Usage) } - if args.extpass != "" && args.masterkey != "" { + if !args.extpass.Empty() && args.masterkey != "" { tlog.Fatal.Printf("The options -extpass and -masterkey cannot be used at the same time") os.Exit(exitcodes.Usage) } - if args.extpass != "" && args.trezor { + if !args.extpass.Empty() && args.trezor { tlog.Fatal.Printf("The options -extpass and -trezor cannot be used at the same time") os.Exit(exitcodes.Usage) } -- cgit v1.2.3