From 2165560e0ae06fad93f93406741f9dc7323d5dcd Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Wed, 24 Jul 2019 15:58:19 +0800 Subject: [PATCH] fix: validate info when importing ldap user/group/domain --- pkg/keystone/driver/ldap/info.go | 4 ++++ pkg/keystone/driver/ldap/sync.go | 21 +++++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/pkg/keystone/driver/ldap/info.go b/pkg/keystone/driver/ldap/info.go index 6f9074e065..78ad6654e6 100644 --- a/pkg/keystone/driver/ldap/info.go +++ b/pkg/keystone/driver/ldap/info.go @@ -30,3 +30,7 @@ type SGroupInfo struct { SDomainInfo Members []string } + +func (info SDomainInfo) isValid() bool { + return len(info.DN) > 0 && len(info.Id) > 0 && len(info.Name) > 0 +} diff --git a/pkg/keystone/driver/ldap/sync.go b/pkg/keystone/driver/ldap/sync.go index 15ba7667a1..8f2905c783 100644 --- a/pkg/keystone/driver/ldap/sync.go +++ b/pkg/keystone/driver/ldap/sync.go @@ -106,14 +106,17 @@ func (self *SLDAPDriver) syncDomains(ctx context.Context, cli *ldaputils.SLDAPCl if err != nil { return errors.Wrap(err, "searchLDAP") } - domainIds := make([]string, len(entries)) + domainIds := make([]string, 0) for i := range entries { domainInfo := self.entry2Domain(entries[i]) + if !domainInfo.isValid() { + continue + } domain, err := self.syncDomainInfo(ctx, domainInfo) if err != nil { return errors.Wrap(err, "syncDomainInfo") } - domainIds[i] = domain.Id + domainIds = append(domainIds, domain.Id) userIdMap, err := self.syncUsers(ctx, cli, domain.Id, domainInfo.DN) if err != nil { return errors.Wrap(err, "syncUsers") @@ -245,15 +248,18 @@ func (self *SLDAPDriver) syncUsers(ctx context.Context, cli *ldaputils.SLDAPClie if err != nil { return nil, errors.Wrap(err, "searchLDAP") } - userIds := make([]string, len(entries)) + userIds := make([]string, 0) userIdMap := make(map[string]string) for i := range entries { userInfo := self.entry2User(entries[i]) + if !userInfo.isValid() { + continue + } userId, err := self.syncUserDB(ctx, userInfo, domainId) if err != nil { return nil, errors.Wrap(err, "syncUserDB") } - userIds[i] = userId + userIds = append(userIds, userId) if self.ldapConfig.GroupMembersAreIds { userIdMap[userInfo.Id] = userId } else { @@ -370,14 +376,17 @@ func (self *SLDAPDriver) syncGroups(ctx context.Context, cli *ldaputils.SLDAPCli if err != nil { return errors.Wrap(err, "searchLDAP") } - groupIds := make([]string, len(entries)) + groupIds := make([]string, 0) for i := range entries { groupInfo := self.entry2Group(entries[i]) + if !groupInfo.isValid() { + continue + } groupId, err := self.syncGroupDB(ctx, groupInfo, domainId, userIdMap) if err != nil { return errors.Wrap(err, "syncGroupDB") } - groupIds[i] = groupId + groupIds = append(groupIds, groupId) } deleteGroups, err := models.GroupManager.FetchGroupsInDomain(domainId, groupIds) if err != nil {