diff options
author | Jakob Unterwurzacher | 2016-09-20 19:45:28 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2016-09-25 16:43:17 +0200 |
commit | d9db75ebd263510dfcf93853f0e111012b82f828 (patch) | |
tree | b631b9005a3e6bb518c3b990acb9f9f23612a369 /cli_args.go | |
parent | 3d59c7dd6a39312e8672185cc70b9c24e22380ec (diff) |
main: factor out cli arg parsing
The main function has gotten way too big.
Diffstat (limited to 'cli_args.go')
-rw-r--r-- | cli_args.go | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/cli_args.go b/cli_args.go new file mode 100644 index 0000000..413245c --- /dev/null +++ b/cli_args.go @@ -0,0 +1,76 @@ +package main + +import ( + "flag" + "os" + "strconv" + + "github.com/rfjakob/gocryptfs/internal/configfile" + "github.com/rfjakob/gocryptfs/internal/prefer_openssl" + "github.com/rfjakob/gocryptfs/internal/tlog" +) + +// argContainer stores the parsed CLI 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, + memprofile, o string + notifypid, scryptn int +} + +var flagSet *flag.FlagSet + +// parseCliArgs - parse command line arguments +func parseCliArgs() (args argContainer) { + var err error + var opensslAuto string + + flagSet = flag.NewFlagSet(tlog.ProgramName, flag.ExitOnError) + flagSet.Usage = usageText + flagSet.BoolVar(&args.debug, "d", false, "") + flagSet.BoolVar(&args.debug, "debug", false, "Enable debug output") + flagSet.BoolVar(&args.fusedebug, "fusedebug", false, "Enable fuse library debug output") + flagSet.BoolVar(&args.init, "init", false, "Initialize encrypted directory") + flagSet.BoolVar(&args.zerokey, "zerokey", false, "Use all-zero dummy master key") + // Tri-state true/false/auto + flagSet.StringVar(&opensslAuto, "openssl", "auto", "Use OpenSSL instead of built-in Go crypto") + flagSet.BoolVar(&args.passwd, "passwd", false, "Change password") + flagSet.BoolVar(&args.foreground, "f", false, "Stay in the foreground") + flagSet.BoolVar(&args.version, "version", false, "Print version and exit") + flagSet.BoolVar(&args.plaintextnames, "plaintextnames", false, "Do not encrypt file names") + flagSet.BoolVar(&args.quiet, "q", false, "") + flagSet.BoolVar(&args.quiet, "quiet", false, "Quiet - silence informational messages") + flagSet.BoolVar(&args.nosyslog, "nosyslog", false, "Do not redirect output to syslog when running in the background") + flagSet.BoolVar(&args.wpanic, "wpanic", false, "When encountering a warning, panic and exit immediately") + flagSet.BoolVar(&args.longnames, "longnames", true, "Store names longer than 176 bytes in extra files") + flagSet.BoolVar(&args.allow_other, "allow_other", false, "Allow other users to access the filesystem. "+ + "Only works if user_allow_other is set in /etc/fuse.conf.") + flagSet.BoolVar(&args.ro, "ro", false, "Mount the filesystem read-only") + flagSet.BoolVar(&args.reverse, "reverse", false, "Reverse mode") + flagSet.StringVar(&args.masterkey, "masterkey", "", "Mount with explicit master key") + 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.o, "o", "", "Pass additional mount options to the kernel, comma-separated list") + flagSet.IntVar(&args.notifypid, "notifypid", 0, "Send USR1 to the specified process after "+ + "successful mount - used internally for daemonization") + flagSet.IntVar(&args.scryptn, "scryptn", configfile.ScryptDefaultLogN, "scrypt cost parameter logN. "+ + "Setting this to a lower value speeds up mounting but makes the password susceptible to brute-force attacks") + flagSet.Parse(os.Args[1:]) + + // "-openssl" needs some post-processing + if opensslAuto == "auto" { + args.openssl = prefer_openssl.PreferOpenSSL() + } else { + args.openssl, err = strconv.ParseBool(opensslAuto) + if err != nil { + tlog.Fatal.Printf("Invalid \"-openssl\" setting: %v", err) + os.Exit(ERREXIT_USAGE) + } + } + + return args +} |