Use internal server context for group member resolution Replace the hardcoded Account.id(1000000) with oneOffRequestContext.open() for resolving group membership in OWNERS files. On instances where that account does not exist, hidden groups silently return no members. oneOffRequestContext.open() uses Gerrit's InternalUser, which bypasses group visibility checks in GroupControl.canSeeMembers(). This is the same approach used by findUserOrEmail() in this file. Discussed in [1]. [1] https://groups.google.com/g/repo-discuss/c/1Kua6hWszDA/m/PSjubQ4zBAAJ Change-Id: I66d2740ef3d228bc19889a1449d5bd0c98240451
diff --git a/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java b/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java index 07c3dad..e40b53d 100644 --- a/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java +++ b/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java
@@ -22,7 +22,6 @@ import com.google.gerrit.entities.Account.Id; import com.google.gerrit.entities.AccountGroup; import com.google.gerrit.entities.InternalGroup; -import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.account.AccountCache; import com.google.gerrit.server.account.AccountResolver; import com.google.gerrit.server.account.AccountState; @@ -49,7 +48,6 @@ private final AccountCache byId; private final GroupCache groupCache; private final GroupMembers groupMembers; - private final IdentifiedUser adminUser; private final OneOffRequestContext oneOffRequestContext; @Inject @@ -58,13 +56,11 @@ AccountCache byId, GroupCache groupCache, GroupMembers groupMembers, - OneOffRequestContext oneOffRequestContext, - IdentifiedUser.GenericFactory userFactory) { + OneOffRequestContext oneOffRequestContext) { this.resolver = resolver; this.byId = byId; this.groupCache = groupCache; this.groupMembers = groupMembers; - this.adminUser = userFactory.create(Account.id(1000000)); this.oneOffRequestContext = oneOffRequestContext; } @@ -88,8 +84,7 @@ return Collections.emptySet(); } - try (ManualRequestContext ctx = oneOffRequestContext.openAs(adminUser.getAccountId())) { - + try (ManualRequestContext ctx = oneOffRequestContext.open()) { return groupMembers.listAccounts(group.get().getGroupUUID(), null).stream() .map(Account::id) .collect(Collectors.toSet());