mirror of
https://github.com/minio/minio.git
synced 2025-01-13 16:03:21 -05:00
Fix updateGroupMembershipsForLDAP
behavior with unicode (#20137)
This commit is contained in:
parent
0680af7414
commit
b368d4cc13
28
cmd/iam.go
28
cmd/iam.go
@ -1442,11 +1442,13 @@ func (sys *IAMSys) updateGroupMembershipsForLDAP(ctx context.Context) {
|
||||
// 1. Collect all LDAP users with active creds.
|
||||
allCreds := sys.store.GetSTSAndServiceAccounts()
|
||||
// List of unique LDAP (parent) user DNs that have active creds
|
||||
var parentUsers []string
|
||||
// Map of LDAP user to list of active credential objects
|
||||
var parentUserActualDNList []string
|
||||
// Map of LDAP user (internal representation) to list of active credential objects
|
||||
parentUserToCredsMap := make(map[string][]auth.Credentials)
|
||||
// DN to ldap username mapping for each LDAP user
|
||||
parentUserToLDAPUsernameMap := make(map[string]string)
|
||||
actualDNToLDAPUsernameMap := make(map[string]string)
|
||||
// External (actual) LDAP DN to internal normalized representation
|
||||
actualDNToParentUserMap := make(map[string]string)
|
||||
for _, cred := range allCreds {
|
||||
// Expired credentials don't need parent user updates.
|
||||
if cred.IsExpired() {
|
||||
@ -1489,25 +1491,28 @@ func (sys *IAMSys) updateGroupMembershipsForLDAP(ctx context.Context) {
|
||||
continue
|
||||
}
|
||||
|
||||
ldapUsername, ok := jwtClaims.Lookup(ldapUserN)
|
||||
if !ok {
|
||||
ldapUsername, okUserN := jwtClaims.Lookup(ldapUserN)
|
||||
ldapActualDN, okDN := jwtClaims.Lookup(ldapActualUser)
|
||||
if !okUserN || !okDN {
|
||||
// skip this cred - we dont have the
|
||||
// username info needed
|
||||
continue
|
||||
}
|
||||
|
||||
// Collect each new cred.ParentUser into parentUsers
|
||||
parentUsers = append(parentUsers, cred.ParentUser)
|
||||
parentUserActualDNList = append(parentUserActualDNList, ldapActualDN)
|
||||
|
||||
// Update the ldapUsernameMap
|
||||
parentUserToLDAPUsernameMap[cred.ParentUser] = ldapUsername
|
||||
actualDNToLDAPUsernameMap[ldapActualDN] = ldapUsername
|
||||
|
||||
// Update the actualDNToParentUserMap
|
||||
actualDNToParentUserMap[ldapActualDN] = cred.ParentUser
|
||||
}
|
||||
parentUserToCredsMap[cred.ParentUser] = append(parentUserToCredsMap[cred.ParentUser], cred)
|
||||
|
||||
}
|
||||
|
||||
// 2. Query LDAP server for groups of the LDAP users collected.
|
||||
updatedGroups, err := sys.LDAPConfig.LookupGroupMemberships(parentUsers, parentUserToLDAPUsernameMap)
|
||||
updatedGroups, err := sys.LDAPConfig.LookupGroupMemberships(parentUserActualDNList, actualDNToLDAPUsernameMap)
|
||||
if err != nil {
|
||||
// Log and return on error - perhaps it'll work the next time.
|
||||
iamLogIf(GlobalContext, err)
|
||||
@ -1515,8 +1520,9 @@ func (sys *IAMSys) updateGroupMembershipsForLDAP(ctx context.Context) {
|
||||
}
|
||||
|
||||
// 3. Update creds for those users whose groups are changed
|
||||
for _, parentUser := range parentUsers {
|
||||
currGroupsSet := updatedGroups[parentUser]
|
||||
for _, parentActualDN := range parentUserActualDNList {
|
||||
currGroupsSet := updatedGroups[parentActualDN]
|
||||
parentUser := actualDNToParentUserMap[parentActualDN]
|
||||
currGroups := currGroupsSet.ToSlice()
|
||||
for _, cred := range parentUserToCredsMap[parentUser] {
|
||||
gSet := set.CreateStringSet(cred.Groups...)
|
||||
|
Loading…
Reference in New Issue
Block a user