diff --git a/store/src/java/com/zimbra/cs/account/ldap/LdapProvisioning.java b/store/src/java/com/zimbra/cs/account/ldap/LdapProvisioning.java index 89eb5bd4efe..9f85bd4c7e6 100644 --- a/store/src/java/com/zimbra/cs/account/ldap/LdapProvisioning.java +++ b/store/src/java/com/zimbra/cs/account/ldap/LdapProvisioning.java @@ -9715,7 +9715,55 @@ private void searchZimbraLdap(String base, String query, String[] returnAttrs, LdapClient.closeContext(zlc); } } +////New changes + public List searchLdapAccountsOnReplica(String base, ZLdapFilter filter, String[] returnAttrs) + throws ServiceException { + List result = searchZimbraLdapReplica(base, filter, returnAttrs, false); + List accounts = new ArrayList<>(); + for (ZSearchResultEntry e : result) { + accounts.add(makeAccount(e.getDN(), e.getAttributes())); + } + return accounts; + } + + private List searchZimbraLdapReplica(String base, ZLdapFilter filter, + String[] returnAttrs, boolean useMaster) + throws ServiceException { + + ZLdapContext zlc = null; + try { + zlc = LdapClient.getContext(LdapServerType.get(useMaster), LdapUsage.SEARCH); + return searchRawWithContextOnReplica(zlc, base, filter, returnAttrs); + } finally { + LdapClient.closeContext(zlc); + } + } + + private List searchRawWithContextOnReplica(ZLdapContext zlc, String base, + ZLdapFilter filter, String[] attrs) + throws ServiceException { + List results = new ArrayList<>(); + List accounts = new ArrayList<>(); + try { + ZSearchControls searchControls = ZSearchControls.createSearchControls( + ZSearchScope.SEARCH_SCOPE_SUBTREE, + ZSearchControls.SIZE_UNLIMITED, + attrs + ); + + ZSearchResultEnumeration enumeration = zlc.searchDir(base, zFilter, searchControls); + + while (enumeration.hasMore()) { + results.add(enumeration.next()); + } + + } catch (Exception e) { + throw ServiceException.FAILURE("Raw LDAP search failed for filter: " + filter, e); + } + return results; + } +//// New changes end @Override public void waitForLdapServer() { LdapClient.waitForLdapServer(); diff --git a/store/src/java/com/zimbra/cs/ldap/ZLdapFilterFactory.java b/store/src/java/com/zimbra/cs/ldap/ZLdapFilterFactory.java index 94fd57d89f2..0d7b77c4649 100644 --- a/store/src/java/com/zimbra/cs/ldap/ZLdapFilterFactory.java +++ b/store/src/java/com/zimbra/cs/ldap/ZLdapFilterFactory.java @@ -190,6 +190,10 @@ public static enum FilterId { ZMCONFIGD("ZMCONFIGD"), TODO("TODO"), + ALL_COS_FILTER(SINGLETON.allCOSFilter()), + ALL_DOMAIN_FILTER(SINGLETON.allDomainFilter()), + GLOBAL_CONFIG_FILTER(SINGLETON.globalConfigFilter()), + ALL_ACCOUNTS_FILTER(SINGLETON.allAccountsFilter()), /* * Licensing @@ -571,4 +575,12 @@ public abstract ZLdapFilter velodromeAllCalendarResourcesByDomainAndServer( * HAB */ public abstract ZLdapFilter habOrgUnitByName(String name); + + public abstract ZLdapFilter allCOSFilter(); + + public abstract ZLdapFilter allDomainFilter(); + + public abstract ZLdapFilter globalConfigFilter(); + + public abstract ZLdapFilter allAccountsFilter(); } diff --git a/store/src/java/com/zimbra/cs/ldap/unboundid/UBIDLdapFilterFactory.java b/store/src/java/com/zimbra/cs/ldap/unboundid/UBIDLdapFilterFactory.java index 3bc8a7b763d..f8936c2e610 100644 --- a/store/src/java/com/zimbra/cs/ldap/unboundid/UBIDLdapFilterFactory.java +++ b/store/src/java/com/zimbra/cs/ldap/unboundid/UBIDLdapFilterFactory.java @@ -1669,4 +1669,47 @@ public ZLdapFilter addressListByName(String name) { Filter.createEqualityFilter(Provisioning.A_uid, name), FILTER_ALL_ADDRESS_LISTS)); } + + public ZLdapFilter allCOSFilter() { + return new UBIDLdapFilter( + FilterId.ALL_COS_FILTER, + Filter.createEqualityFilter( + LdapConstants.ATTR_objectClass, "zimbraCOS")); + } + + public ZLdapFilter allDomainFilter () { + return new UBIDLdapFilter( + FilterId.ALL_DOMAIN_FILTER, + Filter.createEqualityFilter( + LdapConstants.ATTR_objectClass, "zimbraDomain")); + } + + public ZLdapFilter globalConfigFilter() { + return new UBIDLdapFilter( + FilterId.GLOBAL_CONFIG_FILTER, + Filter.createEqualityFilter( + LdapConstants.ATTR_objectClass, "zimbraGlobalConfig")); + } + + public ZLdapFilter allAccountsFilter() { + return new UBIDLdapFilter( + FilterId.ALL_ACCOUNTS_FILTER, + Filter.createEqualityFilter( + LdapConstants.ATTR_objectClass, "zimbraAccount")); + } + +// accountExceptionsFilter = Filter.createANDFilter( +// Filter.createNOTFilter(Filter.createEqualityFilter(ACCOUNT_TYPE_ATTRS.SYSTEM_ACCOUNT.getValue(), +// UsageCollectorConstants.TRUE_STR)), +// Filter.createNOTFilter(Filter.createEqualityFilter(ACCOUNT_TYPE_ATTRS.SYSTEM_RES.getValue(), +// UsageCollectorConstants.TRUE_STR)), +// Filter.createNOTFilter(Filter.createEqualityFilter(UsageCollectorConstants.OBJECT_CLASS, +// OBJECT_CLASSES.CAL_RESOURCE.getValue())), +// Filter.createNOTFilter(Filter.createEqualityFilter(ACCOUNT_TYPE_ATTRS.EXT_VIRTUAL_ACCOUNT.getValue(), +// UsageCollectorConstants.TRUE_STR))); +// +// allInternalAccountsFilter = Filter.createANDFilter(allAccountsFilter, accountExceptionsFilter); +// +// defaultCOSDomainFilter = Filter.createANDFilter( +// Filter.createNOTFilter(Filter.createPresenceFilter(UsageCollectorConstants.ZIMBRA_DOMAIN_DEFUALT_COS_ID)), allDomainFilter); }