diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-06-02 12:02:37 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2019-06-02 12:02:37 +0200 |
commit | 1f1cbab8e456e9871aa1d7a7ea30be0c3fec7d7c (patch) | |
tree | 1a958c1273901cb61706147f5b582f21356a795f /cmd | |
parent | 19949feca6cdf9c4d2d1b76b31e2c92f3fb4f9b7 (diff) |
Add command line option for config file
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/zdns/main.go | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/cmd/zdns/main.go b/cmd/zdns/main.go index 76a42f8..3f1ddb9 100644 --- a/cmd/zdns/main.go +++ b/cmd/zdns/main.go @@ -3,20 +3,44 @@ package main import ( "log" "os" + "path/filepath" + "github.com/jessevdk/go-flags" "github.com/mpolden/zdns" "github.com/mpolden/zdns/dns" ) +const ( + configName = ".zdnsrc" +) + +type options struct { + Config string `short:"f" long:"config" description:"Config file" value-name:"FILE" default:"~/.zdnsrc"` + Log *log.Logger +} + +func (o *options) readConfig() (zdns.Config, error) { + name := o.Config + if o.Config == "~/"+configName { + home := os.Getenv("HOME") + name = filepath.Join(home, configName) + } + f, err := os.Open(name) + if err != nil { + return zdns.Config{}, err + } + return zdns.ReadConfig(f) +} + func main() { + var opts options log := log.New(os.Stderr, "zdns: ", 0) - // TODO: Add command line options - f, err := os.Open("/Users/martin/.zdnsrc") - if err != nil { + p := flags.NewParser(&opts, flags.HelpFlag|flags.PassDoubleDash) + if _, err := p.Parse(); err != nil { log.Fatal(err) } - defer f.Close() - conf, err := zdns.ReadConfig(f) + + conf, err := opts.readConfig() if err != nil { log.Fatal(err) } @@ -25,7 +49,7 @@ func main() { log.Fatal(err) } server.Logger = log - if err := server.ListenAndServe(":10053", "udp"); err != nil { + if err := server.ListenAndServe(conf.Listen, conf.Protocol); err != nil { log.Fatal(err) } } |