aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-06-02 12:02:37 +0200
committerMartin Polden <mpolden@mpolden.no>2019-06-02 12:02:37 +0200
commit1f1cbab8e456e9871aa1d7a7ea30be0c3fec7d7c (patch)
tree1a958c1273901cb61706147f5b582f21356a795f /cmd
parent19949feca6cdf9c4d2d1b76b31e2c92f3fb4f9b7 (diff)
Add command line option for config file
Diffstat (limited to 'cmd')
-rw-r--r--cmd/zdns/main.go36
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)
}
}