fix: ldap: avoid unnecessary import errors (#19547)

Follow up for #19528

If there are multiple existing DN mappings for the same normalized DN,
if they all have the same policy mapping value, we pick one of them of
them instead of returning an import error.
This commit is contained in:
Aditya Manthramurthy 2024-04-18 12:09:19 -07:00 committed by GitHub
parent 2d3898e0d5
commit 98f7821eb3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 2 deletions

View File

@ -1621,10 +1621,31 @@ func (sys *IAMSys) NormalizeLDAPMappingImport(ctx context.Context, isGroup bool,
for normKey, origKeys := range normalizedDNKeysMap {
if len(origKeys) > 1 {
// If there are multiple DN keys that normalize to the same value,
// check if the policy mappings are equal, if they are we don't need
// to return an error.
policiesDiffer := false
firstMappedPolicies := policyMap[origKeys[0]].policySet()
for i := 1; i < len(origKeys); i++ {
otherMappedPolicies := policyMap[origKeys[i]].policySet()
if !firstMappedPolicies.Equals(otherMappedPolicies) {
policiesDiffer = true
break
}
}
if policiesDiffer {
return fmt.Errorf("multiple DNs map to the same LDAP DN[%s]: %v; please remove DNs that are not needed",
normKey, origKeys)
}
// Policies mapped to the DN's are the same, so we remove the extra
// ones from the map.
for i := 1; i < len(origKeys); i++ {
delete(policyMap, origKeys[i])
}
}
// Replacing origKeys[0] with normKey in the policyMap
// len(origKeys) is always > 0, so here len(origKeys) == 1

View File

@ -829,11 +829,17 @@ func TestIAMImportAssetWithLDAP(t *testing.T) {
}
`,
userPolicyMappingsFile: `{}`,
// Contains duplicate mapping with same policy, we should not error out.
groupPolicyMappingsFile: `{
"cn=project.c,ou=groups,ou=swengg,DC=min,dc=io": {
"version": 0,
"policy": "consoleAdmin",
"updatedAt": "2024-04-17T23:54:28.442998301Z"
},
"cn=project.c,ou=groups,OU=swengg,DC=min,DC=io": {
"version": 0,
"policy": "consoleAdmin",
"updatedAt": "2024-04-17T20:54:28.442998301Z"
}
}
`,