From 76286b6388e368d471fbbd4eee4ca7539f5e6530 Mon Sep 17 00:00:00 2001 From: Thomas Preisner Date: Sat, 11 Sep 2021 15:09:49 +0200 Subject: [PATCH] config.go: iterate slices via indices to get pointers instead of copies 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. --- config.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/config.go b/config.go index efcbd3d..633bae2 100644 --- a/config.go +++ b/config.go @@ -61,7 +61,8 @@ func prepareConfig(cfg *Config) (*Config, error) { // populate user map 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 { return nil, fmt.Errorf("Duplicate username detected: %s", user.Username) } @@ -80,12 +81,14 @@ func prepareConfig(cfg *Config) (*Config, error) { user.records[record] = true globRecords[record] = true } - cfg.users[user.Username] = &user + cfg.users[user.Username] = user } // populate record map 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 if _, ok := cfg.rrconfigs[record.Recordname]; ok { 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 delete(globRecords, record.Recordname) - cfg.rrconfigs[record.Recordname] = &record + cfg.rrconfigs[record.Recordname] = record } // check whether all records have been processed