config.go: iterate slices via indices to get pointers instead of copies
All checks were successful
continuous-integration/drone/push Build is passing

Iterating over a slice returns a copy of the respective member instead
of a reference to the original slice member. Thus, any modification are
discarded and the pointers saved inside cfg.users and cfg.rrconfigs are
incorrect, too.
This commit is contained in:
Thomas Preisner 2021-09-11 15:09:49 +02:00
parent e15da33296
commit 76286b6388

View file

@ -61,7 +61,8 @@ func prepareConfig(cfg *Config) (*Config, error) {
// populate user map // populate user map
cfg.users = map[string]*User{} cfg.users = map[string]*User{}
for _, user := range cfg.Users { for u := range cfg.Users {
user := &cfg.Users[u]
if _, ok := cfg.users[user.Username]; ok { if _, ok := cfg.users[user.Username]; ok {
return nil, fmt.Errorf("Duplicate username detected: %s", user.Username) return nil, fmt.Errorf("Duplicate username detected: %s", user.Username)
} }
@ -80,12 +81,14 @@ func prepareConfig(cfg *Config) (*Config, error) {
user.records[record] = true user.records[record] = true
globRecords[record] = true globRecords[record] = true
} }
cfg.users[user.Username] = &user cfg.users[user.Username] = user
} }
// populate record map // populate record map
cfg.rrconfigs = map[string]*RRConfig{} cfg.rrconfigs = map[string]*RRConfig{}
for _, record := range cfg.RRConfigs { for r := range cfg.RRConfigs {
record := &cfg.RRConfigs[r]
// check for duplicate record before verifying association to users // check for duplicate record before verifying association to users
if _, ok := cfg.rrconfigs[record.Recordname]; ok { if _, ok := cfg.rrconfigs[record.Recordname]; ok {
return nil, fmt.Errorf("Duplicate record detected: %s", record.Recordname) return nil, fmt.Errorf("Duplicate record detected: %s", record.Recordname)
@ -97,7 +100,7 @@ func prepareConfig(cfg *Config) (*Config, error) {
// need to remove record from globRecords for detecting orphaned records // need to remove record from globRecords for detecting orphaned records
delete(globRecords, record.Recordname) delete(globRecords, record.Recordname)
cfg.rrconfigs[record.Recordname] = &record cfg.rrconfigs[record.Recordname] = record
} }
// check whether all records have been processed // check whether all records have been processed