"bufio"
"crypto/md5"
"encoding/base64"
+ "flag"
"fmt"
"io"
"io/ioutil"
"strings"
)
-//TODO add parsing of cmdline
const (
- AccFile = "/usr/local/etc/ddnset/ddnset.acc"
- ZoneFile = "/usr/local/etc/ddnset/ddnset.zon"
- Logfile = "/var/log/ddnset/default.log"
- ListenPort = "1980"
+ DefaultAccFile = "/usr/local/etc/ddnset/ddnset.acc"
+ DefaultZoneFile = "/usr/local/etc/ddnset/ddnset.zon"
+ DefaultLogFile = "/var/log/ddnset/default.log"
+ DefaultListenPort = 1980
)
+var AccFile = flag.String("a", DefaultAccFile, "Path to account file")
+var ZoneFile = flag.String("z", DefaultZoneFile, "Path to zone file")
+var LogFile = flag.String("l", DefaultLogFile, "Path to log file")
+var ListenPort = flag.Uint("p", DefaultListenPort, "Port to listen on")
+
+var Help = flag.Bool("h", false, "Show usage")
+
const (
StatusGood = "good"
StatusBadAuth = "badauth"
func isValidAuth(usr, psw string) (bool, string) {
pwentry := fmt.Sprintf("%s:%x", usr, md5.Sum([]byte(psw)))
- acc, err := os.Open(AccFile)
+ acc, err := os.Open(*AccFile)
if nil == err {
defer acc.Close()
scanner := bufio.NewScanner(acc)
}
func isValidZone(h string) (bool, string) {
- zon, err := os.Open(ZoneFile)
+ zon, err := os.Open(*ZoneFile)
if nil == err {
defer zon.Close()
scanner := bufio.NewScanner(zon)
}
func main() {
+ flag.Parse()
+ if *Help {
+ fmt.Printf("Usage: \n")
+ flag.PrintDefaults()
+ return
+ }
+ fmt.Printf("Current settings: \n")
+ flag.VisitAll(func(f *flag.Flag) { fmt.Printf("%v: %v\n", f.Usage, f.Value) })
http.HandleFunc("/myip", myipHandle)
http.HandleFunc("/myip.php", myipHandle)
http.HandleFunc("/", rootHandle)
- logf, err := os.OpenFile(Logfile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
+ logf, err := os.OpenFile(*LogFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if nil == err {
defer logf.Close()
log.SetOutput(logf)
log.Print(err)
}
- log.Fatal(http.ListenAndServe(":"+ListenPort, nil))
+ log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *ListenPort), nil))
}