Skip to content

Commit 5fa2d1c

Browse files
committed
Fixed Bug: CLOUDSTACK-7200 [LDAP] importUsersCmd for a group fails incase any member of a group is not an user
1 parent fefb002 commit 5fa2d1c

3 files changed

Lines changed: 52 additions & 8 deletions

File tree

plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManager.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,10 @@
3030
import javax.naming.directory.SearchResult;
3131

3232
import org.apache.commons.lang.StringUtils;
33+
import org.apache.log4j.Logger;
3334

3435
public class LdapUserManager {
36+
private static final Logger s_logger = Logger.getLogger(LdapUserManager.class.getName());
3537

3638
@Inject
3739
private LdapConfiguration _ldapConfiguration;
@@ -155,7 +157,11 @@ public List<LdapUser> getUsersInGroup(String groupName, DirContext context) thro
155157

156158
while (values.hasMoreElements()) {
157159
String userdn = String.valueOf(values.nextElement());
158-
users.add(getUserForDn(userdn, context));
160+
try{
161+
users.add(getUserForDn(userdn, context));
162+
} catch (NamingException e){
163+
s_logger.info("Userdn: " + userdn + " Not Found:: Exception message: " + e.getMessage());
164+
}
159165
}
160166
}
161167

plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerSpec.groovy

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class LdapUserManagerSpec extends spock.lang.Specification {
4848
@Shared
4949
private def principal
5050

51-
private def createGroupSearchContext() {
51+
private def createGroupSearchContextOneUser() {
5252

5353
def umSearchResult = Mock(SearchResult)
5454
umSearchResult.getName() >> principal;
@@ -75,7 +75,34 @@ class LdapUserManagerSpec extends spock.lang.Specification {
7575
searchUsersResults.add(userSearchResult);
7676

7777
def context = Mock(LdapContext)
78-
context.search(_, _, _) >>> [searchGroupResults, searchUsersResults];
78+
context.search(_, _, _) >>> [searchGroupResults, searchUsersResults, searchGroupResults, new BasicNamingEnumerationImpl()];
79+
80+
return context
81+
}
82+
83+
private def createGroupSearchContextNoUser() {
84+
85+
def umSearchResult = Mock(SearchResult)
86+
umSearchResult.getName() >> principal;
87+
umSearchResult.getAttributes() >> principal
88+
89+
def uniqueMembers = new BasicNamingEnumerationImpl()
90+
uniqueMembers.add(umSearchResult);
91+
def attributes = Mock(Attributes)
92+
def uniqueMemberAttribute = Mock(Attribute)
93+
uniqueMemberAttribute.getId() >> "uniquemember"
94+
uniqueMemberAttribute.getAll() >> uniqueMembers
95+
attributes.get("uniquemember") >> uniqueMemberAttribute
96+
97+
def groupSearchResult = Mock(SearchResult)
98+
groupSearchResult.getName() >> principal;
99+
groupSearchResult.getAttributes() >> attributes
100+
101+
def searchGroupResults = new BasicNamingEnumerationImpl()
102+
searchGroupResults.add(groupSearchResult);
103+
104+
def context = Mock(LdapContext)
105+
context.search(_, _, _) >>> [searchGroupResults, new BasicNamingEnumerationImpl()];
79106

80107
return context
81108
}
@@ -254,16 +281,26 @@ class LdapUserManagerSpec extends spock.lang.Specification {
254281
varGroupName << ["", null, "Murphy"]
255282
}
256283

257-
def "test successful getUsersInGroup"() {
284+
def "test successful getUsersInGroup one user"() {
258285
given: "ldap user manager and ldap config"
259286
def ldapUserManager = new LdapUserManager(ldapConfiguration)
260287

261288
when: "A request for users is made"
262-
def result = ldapUserManager.getUsersInGroup("engineering", createGroupSearchContext())
289+
def result = ldapUserManager.getUsersInGroup("engineering", createGroupSearchContextOneUser())
263290
then: "one user is returned"
264291
result.size() == 1
265292
}
266293

294+
def "test successful getUsersInGroup no user"() {
295+
given: "ldap user manager and ldap config"
296+
def ldapUserManager = new LdapUserManager(ldapConfiguration)
297+
298+
when: "A request for users is made"
299+
def result = ldapUserManager.getUsersInGroup("engineering", createGroupSearchContextNoUser())
300+
then: "no user is returned"
301+
result.size() == 0
302+
}
303+
267304
def "test successful getUserForDn"() {
268305
given: "ldap user manager and ldap config"
269306
def ldapUserManager = new LdapUserManager(ldapConfiguration)

server/src/com/cloud/user/AccountManagerImpl.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import javax.naming.ConfigurationException;
4040

4141
import org.apache.commons.codec.binary.Base64;
42+
import org.apache.commons.lang.StringUtils;
4243
import org.apache.log4j.Logger;
4344

4445
import org.apache.cloudstack.acl.ControlledEntity;
@@ -989,15 +990,15 @@ public UserAccount createUserAccount(final String userName, final String passwor
989990
domainId = Domain.ROOT_DOMAIN;
990991
}
991992

992-
if (userName.isEmpty()) {
993+
if (StringUtils.isEmpty(userName)) {
993994
throw new InvalidParameterValueException("Username is empty");
994995
}
995996

996-
if (firstName.isEmpty()) {
997+
if (StringUtils.isEmpty(firstName)) {
997998
throw new InvalidParameterValueException("Firstname is empty");
998999
}
9991000

1000-
if (lastName.isEmpty()) {
1001+
if (StringUtils.isEmpty(lastName)) {
10011002
throw new InvalidParameterValueException("Lastname is empty");
10021003
}
10031004

0 commit comments

Comments
 (0)