diff --git a/main.go b/main.go index 40ba744..51eb452 100644 --- a/main.go +++ b/main.go @@ -131,14 +131,22 @@ func secureRandBase64(length int) string { func main() { var bind, certFile, keyFile, secret string var showVersion bool - flag.BoolVar(&showVersion, "version", false, "show program's version number and exit") - flag.StringVar(&bind, "bind", defaultBind, "bind server to [HOSTNAME]:PORT") - flag.StringVar(&secret, "secret", "", "shared secret for client authentication") - flag.StringVar(&certFile, "cert", "", "file containing TLS certificate") - flag.StringVar(&keyFile, "key", "", "file containing TLS private key") - flag.Bool("invert", false, "obsolete, not used anymore") - flag.Int("interval", 0, "obsolete, not used anymore") - flag.Parse() + parseFlags := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) + for _, fs := range [](*flag.FlagSet){parseFlags, flag.CommandLine} { + fs.BoolVar(&showVersion, "version", false, "show program's version number and exit") + fs.StringVar(&bind, "bind", defaultBind, "bind server to [HOSTNAME]:PORT") + fs.StringVar(&secret, "secret", "", "shared secret for client authentication") + fs.StringVar(&certFile, "cert", "", "file containing TLS certificate") + fs.StringVar(&keyFile, "key", "", "file containing TLS private key") + } + // ignore obsolete flags for backward compatibility, but don't show them in usage message + parseFlags.Usage = func() {} + parseFlags.Bool("invert", false, "") + parseFlags.Int("interval", 0, "") + if err := parseFlags.Parse(os.Args[1:]); err != nil { + flag.Usage() + os.Exit(2) + } if showVersion { fmt.Println(version) return