Fix AD groups in ACLs

Previously, AD groups were being added to ACLs as users.
diff --git a/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java b/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
index dd46e7f..93e3294 100644
--- a/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
+++ b/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
@@ -1603,7 +1603,11 @@
       }
       Map<Integer, String> userMap = new HashMap<Integer, String>();
       for (UserDescription user : site.getWeb().getUsers().getUser()) {
-        userMap.put(user.getID(), user.getLoginName().intern());
+        if (user.getIsDomainGroup() == TrueFalseType.TRUE) {
+          groupMap.put(user.getID(), user.getName().intern());
+        } else {
+          userMap.put(user.getID(), user.getLoginName().intern());
+        }
       }
       MemberIdMapping mapping = new MemberIdMapping(userMap, groupMap);
       log.exiting("SiteDataClient", "retrieveMemberIdMapping", mapping);
diff --git a/test/com/google/enterprise/adaptor/sharepoint/SharePointAdaptorTest.java b/test/com/google/enterprise/adaptor/sharepoint/SharePointAdaptorTest.java
index 2d85d78..daf59d4 100644
--- a/test/com/google/enterprise/adaptor/sharepoint/SharePointAdaptorTest.java
+++ b/test/com/google/enterprise/adaptor/sharepoint/SharePointAdaptorTest.java
@@ -440,6 +440,41 @@
   }
 
   @Test
+  public void testGetDocContentSiteCollectionWithAdGroup() throws Exception {
+    SiteDataFactory siteDataFactory = MockSiteDataFactory.blank()
+        .endpoint(VS_ENDPOINT, MockSiteData.blank()
+            .register(VS_CONTENT_EXCHANGE)
+            .register(SITES_SITECOLLECTION_SAW_EXCHANGE))
+        .endpoint(SITES_SITECOLLECTION_ENDPOINT, MockSiteData.blank()
+            .register(SITES_SITECOLLECTION_URLSEG_EXCHANGE)
+            .register(SITES_SITECOLLECTION_S_CONTENT_EXCHANGE
+              .replaceInContent("Name=\"spuser1\"", "Name=\"GDC-PSL\\group\"")
+              .replaceInContent("IsDomainGroup=\"False\"",
+                "IsDomainGroup=\"True\""))
+            .register(SITES_SITECOLLECTION_SC_CONTENT_EXCHANGE
+              .replaceInContent("Name=\"spuser1\"", "Name=\"GDC-PSL\\group\"")
+              .replaceInContent("IsDomainGroup=\"False\"",
+                "IsDomainGroup=\"True\"")));
+
+    adaptor = new SharePointAdaptor(siteDataFactory,
+        new UnsupportedUserGroupFactory(), new UnsupportedHttpClient(),
+        executorFactory);
+    adaptor.init(new MockAdaptorContext(config, null));
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    GetContentsRequest request = new GetContentsRequest(
+        new DocId("http://localhost:1/sites/SiteCollection"));
+    GetContentsResponse response = new GetContentsResponse(baos);
+    adaptor.getDocContent(request, response);
+    assertEquals(new Acl.Builder()
+        .setEverythingCaseInsensitive()
+        .setInheritFrom(new DocId(""))
+        .setInheritanceType(Acl.InheritanceType.PARENT_OVERRIDES)
+        .setPermitGroups(groups("chinese1 Members", "chinese1 Owners",
+            "chinese1 Visitors", "GDC-PSL\\group")).build(),
+        response.getAcl());
+  }
+
+  @Test
   public void testGetDocContentList() throws Exception {
     SiteDataSoap siteData = MockSiteData.blank()
         .register(SITES_SITECOLLECTION_LISTS_CUSTOMLIST_URLSEG_EXCHANGE)