summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJoe Tsai <joetsai@digital-static.net>2022-07-05 18:27:31 -0700
committerGitHub <noreply@github.com>2022-07-05 18:27:31 -0700
commitfe3426b4c72aa32e5cc5f1a3cdc7c346ce585940 (patch)
tree43e0561bf899f6bc65b1a035e7efbe77fdb3eb77
parentd6817d0f22fe2c3dc8c6fcfe9e4d607d7ae59a76 (diff)
downloadtailscale-fe3426b4c72aa32e5cc5f1a3cdc7c346ce585940.tar.xz
tailscale-fe3426b4c72aa32e5cc5f1a3cdc7c346ce585940.zip
logpolicy: fix config initialization bug (#5010)
If ConfigFromFile cannot find the configuration file, we must not initialize it with NewConfig. Instead, we need it to fail validation so that it eventually writes a newly constructed configuration file. Otherwise, new tailscale instances will never be able store a persistent log config and start with a new config file upon every bootup. Signed-off-by: Joe Tsai <joetsai@digital-static.net>
-rw-r--r--logpolicy/logpolicy.go7
1 files changed, 4 insertions, 3 deletions
diff --git a/logpolicy/logpolicy.go b/logpolicy/logpolicy.go
index 558a9d642..952c3dc79 100644
--- a/logpolicy/logpolicy.go
+++ b/logpolicy/logpolicy.go
@@ -112,6 +112,8 @@ func NewConfig(collection string) *Config {
// and that the PrivateID and PublicID pair are sensible.
func (c *Config) Validate(collection string) error {
switch {
+ case c == nil:
+ return errors.New("config is nil")
case c.Collection != collection:
return fmt.Errorf("config collection %q does not match %q", c.Collection, collection)
case c.PrivateID.IsZero():
@@ -509,11 +511,10 @@ func New(collection string) *Policy {
newc, err := ConfigFromFile(cfgPath)
if err != nil {
earlyLogf("logpolicy.ConfigFromFile %v: %v", cfgPath, err)
- newc = NewConfig(collection)
}
if err := newc.Validate(collection); err != nil {
- earlyLogf("logpolicy.Config.Validate for %q: %v", cfgPath, err)
- newc := NewConfig(collection)
+ earlyLogf("logpolicy.Config.Validate for %v: %v", cfgPath, err)
+ newc = NewConfig(collection)
if err := newc.Save(cfgPath); err != nil {
earlyLogf("logpolicy.Config.Save for %v: %v", cfgPath, err)
}