From: Sergey Matveev Date: Sun, 10 Jan 2016 12:28:24 +0000 (+0300) Subject: Do not exit if JSON configuration failed during runtime X-Git-Tag: 5.1^2~7 X-Git-Url: http://www.git.cypherpunks.ru/?p=govpn.git;a=commitdiff_plain;h=5bdcecf9c5ba070fceeeb45864ff7a88af7dd44c Do not exit if JSON configuration failed during runtime Signed-off-by: Sergey Matveev --- diff --git a/src/govpn/cmd/govpn-server/conf.go b/src/govpn/cmd/govpn-server/conf.go index fcee362..3668107 100644 --- a/src/govpn/cmd/govpn-server/conf.go +++ b/src/govpn/cmd/govpn-server/conf.go @@ -20,6 +20,7 @@ package main import ( "encoding/json" + "errors" "io/ioutil" "log" "time" @@ -36,22 +37,22 @@ var ( idsCache *govpn.CipherCache ) -func confRead() map[govpn.PeerId]*govpn.PeerConf { +func confRead() (*map[govpn.PeerId]*govpn.PeerConf, error) { data, err := ioutil.ReadFile(*confPath) if err != nil { - log.Fatalln("Unable to read configuration:", err) + return nil, err } confsRaw := new(map[string]govpn.PeerConf) err = json.Unmarshal(data, confsRaw) if err != nil { - log.Fatalln("Unable to parse configuration:", err) + return nil, err } confs := make(map[govpn.PeerId]*govpn.PeerConf, len(*confsRaw)) for name, pc := range *confsRaw { verifier, err := govpn.VerifierFromString(pc.VerifierRaw) if err != nil { - log.Fatalln("Unable to decode the key:", err.Error(), pc.VerifierRaw) + return nil, errors.New("Unable to decode verifier: " + err.Error()) } if pc.Encless { pc.Noise = true @@ -81,21 +82,29 @@ func confRead() map[govpn.PeerId]*govpn.PeerConf { conf.Timeout = time.Second * time.Duration(pc.TimeoutInt) confs[*verifier.Id] = &conf } - return confs + return &confs, nil } -func confRefresh() { - confs = confRead() +func confRefresh() error { + newConfs, err := confRead() + if err != nil { + log.Println("Unable to parse peers configuration:", err) + return err + } + confs = *newConfs ids := make([]govpn.PeerId, 0, len(confs)) for peerId, _ := range confs { ids = append(ids, peerId) } idsCache.Update(ids) + return nil } func confInit() { idsCache = govpn.NewCipherCache(nil) - confRefresh() + if err := confRefresh(); err != nil { + log.Fatalln(err) + } go func() { for { time.Sleep(RefreshRate)