Ensure comment is always a valid key (#8604)

Also fix LDAP leaky connection
This commit is contained in:
Harshavardhana
2019-12-05 04:47:42 -08:00
committed by Nitish Tiwari
parent c9940d8c3f
commit d8e3de0cae
3 changed files with 59 additions and 36 deletions

View File

@@ -399,6 +399,12 @@ func LookupRegion(kv KVS) (string, error) {
func CheckValidKeys(subSys string, kv KVS, validKVS KVS) error {
nkv := KVS{}
for _, kv := range kv {
// Comment is a valid key, its also fully optional
// ignore it since it is a valid key for all
// sub-systems.
if kv.Key == Comment {
continue
}
if _, ok := validKVS.Lookup(kv.Key); !ok {
nkv = append(nkv, kv)
}
@@ -557,23 +563,19 @@ func (c Config) SetKVS(s string, defaultKVS map[string]KVS) error {
continue
}
if len(kv) == 1 && prevK != "" {
kvs = append(kvs, KV{
Key: prevK,
Value: strings.Join([]string{
kvs.Get(prevK),
madmin.SanitizeValue(kv[0]),
}, KvSpaceSeparator),
})
value := strings.Join([]string{
kvs.Get(prevK),
madmin.SanitizeValue(kv[0]),
}, KvSpaceSeparator)
kvs.Set(prevK, value)
continue
}
if len(kv) == 1 {
return Errorf(SafeModeKind, "key '%s', cannot have empty value", kv[0])
if len(kv) == 2 {
prevK = kv[0]
kvs.Set(prevK, madmin.SanitizeValue(kv[1]))
continue
}
prevK = kv[0]
kvs = append(kvs, KV{
Key: kv[0],
Value: madmin.SanitizeValue(kv[1]),
})
return Errorf(SafeModeKind, "key '%s', cannot have empty value", kv[0])
}
tgt := Default
@@ -587,25 +589,27 @@ func (c Config) SetKVS(s string, defaultKVS map[string]KVS) error {
_, defaultOk := defaultKVS[subSys].Lookup(Enable)
if !ok && defaultOk {
// implicit state "on" if not specified.
kvs = append(kvs, KV{
Key: Enable,
Value: EnableOn,
})
kvs.Set(Enable, EnableOn)
}
currKVS := c[subSys][tgt]
currKVS, ok := c[subSys][tgt]
if !ok {
currKVS = defaultKVS[subSys]
}
for _, kv := range kvs {
if kv.Key == Comment {
// Skip comment and add it later.
continue
}
currKVS.Set(kv.Key, kv.Value)
}
for _, defaultKV := range defaultKVS[subSys] {
_, ok := c[subSys][tgt].Lookup(defaultKV.Key)
if !ok {
currKVS.Set(defaultKV.Key, defaultKV.Value)
}
v, ok := kvs.Lookup(Comment)
if ok {
currKVS.Set(Comment, v)
}
copy(c[subSys][tgt], currKVS)
c[subSys][tgt] = currKVS
return nil
}