diff --git a/backend/backend.go b/backend/backend.go index 17b6638..6023a8f 100644 --- a/backend/backend.go +++ b/backend/backend.go @@ -576,3 +576,5 @@ func (b *Backend) Lookup(qname string) (rrs []dns.RR, err error) { btx.qname = qname return btx.Do() } + +// © 2014 Hugo Landau GPLv3 or later diff --git a/main.go b/main.go index 670b23f..27c24e9 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import "github.com/hlandau/degoutils/config" import "github.com/hlandau/degoutils/log" +import "github.com/hlandau/degoutils/daemon" import "github.com/hlandau/ncdns/server" func main() { @@ -10,8 +11,22 @@ func main() { ConfigFilePaths: []string { "etc/ncdns.conf", "/etc/ncdns/ncdns.conf", }, } config.ParseFatal(&cfg) + + err := daemon.Init() + log.Fatale(err) + + if cfg.Daemonize { + err := daemon.Daemonize() + log.Fatale(err) + } + + err = daemon.DropPrivileges(cfg.UID, cfg.GID) + log.Fatale(err, "can't drop privileges") + s, err := server.NewServer(&cfg) log.Fatale(err) s.Run() } + +// © 2014 Hugo Landau GPLv3 or later diff --git a/namecoin/extratypes/extratypes.go b/namecoin/extratypes/extratypes.go index 1946683..eb69699 100644 --- a/namecoin/extratypes/extratypes.go +++ b/namecoin/extratypes/extratypes.go @@ -63,3 +63,5 @@ func replyParser(m json.RawMessage) (interface{}, error) { func init() { btcjson.RegisterCustomCmd("name_show", nil, replyParser, "name_show ") } + +// © 2014 Hugo Landau GPLv3 or later diff --git a/namecoin/namecoin.go b/namecoin/namecoin.go index 7a3dce9..b4c432e 100644 --- a/namecoin/namecoin.go +++ b/namecoin/namecoin.go @@ -77,4 +77,4 @@ func (nc *NamecoinConn) Query(name string) (v string, err error) { } } -// © 2014 Hugo Landau GPLv3 or later +// © 2014 Hugo Landau GPLv3 or later diff --git a/server/server.go b/server/server.go index 5121b8e..ad5f936 100644 --- a/server/server.go +++ b/server/server.go @@ -31,6 +31,10 @@ type ServerConfig struct { CacheMaxEntries int `default:"1000" usage:"Maximum name cache entries"` SelfName string `default:"" usage:"Canonical name for this nameserver (default: autogenerated psuedo-hostname resolving to SelfIP; SelfIP is not used if this is set)"` SelfIP string `default:"127.127.127.127" usage:"The canonical IP address for this service"` + + Daemonize bool `default:"false" usage:"Daemonize (doesn't fork)"` + UID int `default:"0" usage:"UID to drop privileges to if run as root"` + GID int `default:"0" usage:"GID to drop privileges to if run as root"` } func NewServer(cfg *ServerConfig) (s *Server, err error) { diff --git a/util/util.go b/util/util.go index d095c57..ad95210 100644 --- a/util/util.go +++ b/util/util.go @@ -13,3 +13,5 @@ func SplitDomainHead(name string) (head string, rest string, err error) { return } + +// © 2014 Hugo Landau GPLv3 or later