From a7ccdad378391d6d2f3585e35df84e6756bc90ca Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Mon, 20 Jan 2020 09:11:30 +0100 Subject: [PATCH] Fix handling of empty set of values as absence of the key --- main.go | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/main.go b/main.go index 713c697..f1be40a 100644 --- a/main.go +++ b/main.go @@ -246,14 +246,23 @@ func (server *Server) addElements(dn string, attrs Entry) error { } for k, v := range attrs { - json, err := json.Marshal(v) - if err != nil { - return err - } - pair := &consul.KVPair{Key: prefix + "/attribute=" + k, Value: json} - _, err = server.kv.Put(pair, nil) - if err != nil { - return err + path := prefix + "/attribute=" + k + if len(v) == 0 { + // If we have zero values, delete associated k/v pair + _, err := server.kv.Delete(path, nil) + if err != nil { + return err + } + } else { + json, err := json.Marshal(v) + if err != nil { + return err + } + pair := &consul.KVPair{Key: path, Value: json} + _, err = server.kv.Put(pair, nil) + if err != nil { + return err + } } } return nil @@ -454,9 +463,9 @@ func applyFilter(entry Entry, filter message.Filter) (bool, error) { } else if fPresent, ok := filter.(message.FilterPresent); ok { what := string(fPresent) // Case insensitive search - for desc := range entry { + for desc, values := range entry { if strings.EqualFold(what, desc) { - return true, nil + return len(values) > 0, nil } } return false, nil