Have incremental crawl update the "everyone" group
This fixes b/15155221 and b/15156405.
diff --git a/src/com/google/enterprise/adaptor/ad/AdAdaptor.java b/src/com/google/enterprise/adaptor/ad/AdAdaptor.java
index 2db0331..3590e91 100644
--- a/src/com/google/enterprise/adaptor/ad/AdAdaptor.java
+++ b/src/com/google/enterprise/adaptor/ad/AdAdaptor.java
@@ -525,6 +525,7 @@
private void resolvePrimaryGroups(Set<AdEntity> entities) {
int nadds = 0;
int missingGroups = 0;
+ Set<AdEntity> additionalGroupsToPush = new HashSet<AdEntity>();
for (AdEntity e : entities) {
if (e.isGroup()) {
continue;
@@ -543,8 +544,17 @@
}
members.get(primaryGroup).add(user.getDn());
wellKnownMembership.get(everyone).add(user.getDn());
+ // add the primary and "everyone" groups to the list of modified entries
+ // this is a no-op for a full crawl, but is needed for incremental crawl
+ // (and this routine does not know which type of crawl is being run).
+ additionalGroupsToPush.add(primaryGroup);
+ // "everyone" group added below, at most once
nadds++;
}
+ if (!additionalGroupsToPush.isEmpty()) {
+ entities.addAll(additionalGroupsToPush);
+ entities.add(everyone);
+ }
log.log(Level.FINE, "# primary groups: {0}", members.keySet().size());
if (missingGroups > 0) {
log.log(Level.FINE, "# missing primary groups: {0}", missingGroups);
diff --git a/test/com/google/enterprise/adaptor/ad/AdAdaptorTest.java b/test/com/google/enterprise/adaptor/ad/AdAdaptorTest.java
index dabe94b..a00b22b 100644
--- a/test/com/google/enterprise/adaptor/ad/AdAdaptorTest.java
+++ b/test/com/google/enterprise/adaptor/ad/AdAdaptorTest.java
@@ -268,6 +268,7 @@
.addSearchResult(filter, "sAMAccountName", searchDn, "sam");
AdEntity userGroup = new AdEntity("S-1-5-32-users", "users");
+ AdEntity everyone = new AdEntity("S-1-1-0", "CN=everyone");
AdServer adServer = new AdServer("localhost", ldapContext);
adServer.initialize();
@@ -289,13 +290,12 @@
final AdAdaptor.GroupCatalog golden = new AdAdaptor.GroupCatalog(
defaultLocalizedStringMap(), "example.com", /*feedBuiltinGroups=*/ true,
- /*entities*/ Sets.newHashSet(goldenEntity),
+ /*entities*/ Sets.newHashSet(goldenEntity, userGroup, everyone),
/*members*/ goldenMembers,
/*bySid*/ goldenSid,
/*byDn*/ goldenDn,
/*domain*/ goldenDomain);
golden.wellKnownMembership.get(golden.everyone).add(goldenEntity.getDn());
-
assertTrue(golden.equals(groupCatalog));
// make sure readEverythingFrom call is idempotent