Fetch domain groups too
git-svn-id: https://svn.apache.org/repos/asf/manifoldcf/branches/CONNECTORS-891@1568784 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SPSProxyHelper.java b/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SPSProxyHelper.java
index 39d37b1..855798c 100644
--- a/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SPSProxyHelper.java
+++ b/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SPSProxyHelper.java
@@ -1304,8 +1304,7 @@
if (!activeDirectoryAuthority)
{
- // Do we want to return user ID via getUserInfo?
- // MHL
+ // Do we want to return user ID via getUserInfo? A:No; user login is the right thing to return.
rval = "U"+userLogin;
}
else
@@ -1352,26 +1351,47 @@
throws ManifoldCFException, java.net.MalformedURLException, javax.xml.rpc.ServiceException, java.rmi.RemoteException
{
List<String> rval = new ArrayList<String>();
+
+ com.microsoft.schemas.sharepoint.soap.directory.GetUserCollectionFromGroupResponseGetUserCollectionFromGroupResult roleResp = userCall.getUserCollectionFromGroup(groupName);
+ org.apache.axis.message.MessageElement[] roleList = roleResp.get_any();
+
+ if (roleList.length != 1)
+ throw new ManifoldCFException("Bad response - expecting one outer 'GetUserCollectionFromGroup' node, saw "+Integer.toString(roleList.length));
+
+ MessageElement roles = roleList[0];
+ if (!roles.getElementName().getLocalName().equals("GetUserCollectionFromGroup"))
+ throw new ManifoldCFException("Bad response - outer node should have been 'GetUserCollectionFromGroup' node");
+
+ Iterator rolesIter = roles.getChildElements();
+
if (!activeDirectoryAuthority)
{
- // Do we want to map this to an ID using usergroup.getGroupInfo? Or will we be unable to find the group
- // then if it is an AD group?
- // MHL
+ // We need not only the group itself, but its user children that are Claims-based entities
rval.add("G"+groupName);
+ while (rolesIter.hasNext())
+ {
+ MessageElement child = (MessageElement)rolesIter.next();
+ if (child.getElementName().getLocalName().equals("Users"))
+ {
+ Iterator usersIterator = child.getChildElements();
+ while (usersIterator.hasNext())
+ {
+ MessageElement user = (MessageElement)usersIterator.next();
+ if (user.getElementName().getLocalName().equals("User"))
+ {
+ String isDomainGroup = user.getAttribute("IsDomainGroup");
+ if (isDomainGroup != null && isDomainGroup.equals("True"))
+ {
+ // Add a user token for the domain group
+ rval.add("U"+user.getAttribute("LoginName"));
+ }
+ }
+ }
+ }
+ }
}
else
{
- com.microsoft.schemas.sharepoint.soap.directory.GetUserCollectionFromGroupResponseGetUserCollectionFromGroupResult roleResp = userCall.getUserCollectionFromGroup(groupName);
- org.apache.axis.message.MessageElement[] roleList = roleResp.get_any();
-
- if (roleList.length != 1)
- throw new ManifoldCFException("Bad response - expecting one outer 'GetUserCollectionFromGroup' node, saw "+Integer.toString(roleList.length));
-
- MessageElement roles = roleList[0];
- if (!roles.getElementName().getLocalName().equals("GetUserCollectionFromGroup"))
- throw new ManifoldCFException("Bad response - outer node should have been 'GetUserCollectionFromGroup' node");
-
- Iterator rolesIter = roles.getChildElements();
while (rolesIter.hasNext())
{
MessageElement child = (MessageElement)rolesIter.next();