From dac631e91da0bbb11d652f315425161b7c8b8e0d Mon Sep 17 00:00:00 2001 From: Andrea Patricelli Date: Thu, 20 Jun 2024 11:03:52 +0200 Subject: [PATCH 1/2] [AD-77] utilities use internal search to look for object to update --- .../connid/bundles/ad/search/ADSearch.java | 15 ++++++ .../connid/bundles/ad/util/ADUtilities.java | 49 +++++++------------ 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/main/java/net/tirasa/connid/bundles/ad/search/ADSearch.java b/src/main/java/net/tirasa/connid/bundles/ad/search/ADSearch.java index dd3ff3e..d717a41 100644 --- a/src/main/java/net/tirasa/connid/bundles/ad/search/ADSearch.java +++ b/src/main/java/net/tirasa/connid/bundles/ad/search/ADSearch.java @@ -19,6 +19,7 @@ import java.util.Collections; import java.util.List; import java.util.Set; +import java.util.function.BiFunction; import java.util.stream.Collectors; import javax.naming.InvalidNameException; import javax.naming.NamingException; @@ -41,6 +42,7 @@ import net.tirasa.connid.bundles.ldap.search.LdapSearchResultsHandler; import net.tirasa.connid.bundles.ldap.search.LdapSearchStrategy; import org.identityconnectors.common.logging.Log; +import org.identityconnectors.framework.common.objects.ConnectorObject; import org.identityconnectors.framework.common.objects.ObjectClass; import org.identityconnectors.framework.common.objects.OperationOptions; import org.identityconnectors.framework.common.objects.ResultsHandler; @@ -81,6 +83,19 @@ public ADSearch( : ((ADConfiguration) conn.getConfiguration()).getBaseContexts()); } + public final void execute(final BiFunction, ConnectorObject> connObjSupplier) { + final String[] attrsToGetOption = options.getAttributesToGet(); + final Set attrsToGet = utils.getAttributesToGet(attrsToGetOption, oclass); + + getInternalSearch(attrsToGet).execute(new LdapSearchResultsHandler() { + + @Override + public boolean handle(final String baseDN, final SearchResult result) { + return handler.handle(connObjSupplier.apply(result, attrsToGet)); + } + }); + } + @Override public final void execute() { final String[] attrsToGetOption = options.getAttributesToGet(); diff --git a/src/main/java/net/tirasa/connid/bundles/ad/util/ADUtilities.java b/src/main/java/net/tirasa/connid/bundles/ad/util/ADUtilities.java index 340cee4..e9d1d34 100644 --- a/src/main/java/net/tirasa/connid/bundles/ad/util/ADUtilities.java +++ b/src/main/java/net/tirasa/connid/bundles/ad/util/ADUtilities.java @@ -56,6 +56,7 @@ import net.tirasa.connid.bundles.ad.ADConfiguration; import net.tirasa.connid.bundles.ad.ADConnection; import net.tirasa.connid.bundles.ad.ADConnector; +import net.tirasa.connid.bundles.ad.search.ADSearch; import net.tirasa.connid.bundles.ldap.LdapConnection; import net.tirasa.connid.bundles.ldap.commons.GroupHelper; import net.tirasa.connid.bundles.ldap.commons.LdapConstants; @@ -64,7 +65,6 @@ import net.tirasa.connid.bundles.ldap.schema.LdapSchema; import net.tirasa.connid.bundles.ldap.search.LdapFilter; import net.tirasa.connid.bundles.ldap.search.LdapInternalSearch; -import net.tirasa.connid.bundles.ldap.search.LdapSearch; import net.tirasa.connid.bundles.ldap.search.LdapSearches; import org.identityconnectors.common.CollectionUtil; import org.identityconnectors.common.StringUtil; @@ -528,41 +528,30 @@ public LdapEntry getEntryToBeUpdated(final String entryDN) { return obj; } - private String getEntryToBeUpdatedQuery(final Uid uid, final ObjectClass oclass) { - return connection.getSchema().getLdapUidAttribute(oclass) + "=" - + (OBJECTGUID.equals(connection.getSchema().getLdapUidAttribute(oclass)) - ? getEscapedGUID(uid.getUidValue()) - : uid.getUidValue()); - } - public ConnectorObject getEntryToBeUpdated(final Uid uid, final ObjectClass oclass) { OperationOptionsBuilder builder = new OperationOptionsBuilder(); builder.setAttributesToGet(Arrays.asList(UACCONTROL_ATTR, SDDL_ATTR, OBJECTSID, PRIMARYGROUPID)); - LdapFilter filter = LdapFilter.forNativeFilter(getEntryToBeUpdatedQuery(uid, oclass)); + final String filter = connection.getSchema().getLdapUidAttribute(oclass) + "=" + uid.getUidValue(); LOG.ok("Searching for object of class {0} with filter {1}", oclass.getObjectClassValue(), filter); - final ConnectorObject obj = new LdapSearch(connection, oclass, filter, null, builder.build()) { - - @Override - protected ConnectorObject createConnectorObject(final String baseDN, - final SearchResult result, - final Set attrsToGet, - final boolean emptyAttrWhenNotFound) { - - try { - // cannot use default createConnectorObject, since payload may contain Active Directory binary - // and/or special attributes - return createMinimalConnectorObject(result.getNameInNamespace(), - result.getAttributes(), - attrsToGet, - oclass); - } catch (NamingException e) { - throw new ConnectorException("Error while creating connector object", e); - } + final ConnectorObject[] results = new ConnectorObject[] { null }; + new ADSearch(connection, oclass, LdapFilter.forNativeFilter(filter), connectorObject -> { + results[0] = connectorObject; + return false; + }, builder.build()).execute((result, attrsToGet) -> { + try { + return createMinimalConnectorObject(result.getNameInNamespace(), + result.getAttributes(), + attrsToGet, + oclass); + } catch (NamingException e) { + throw new ConnectorException(e); } - }.getSingleResult(); + }); + + ConnectorObject obj = results[0]; if (obj == null) { throw new ConnectorException("Entry not found"); @@ -659,10 +648,6 @@ public Set getGroups(final String entryDN, final String... baseContexts) return ldapGroups; } - private static String getEscapedGUID(final String unescapedGUID) { - return Hex.getEscaped(GUID.getGuidAsByteArray(unescapedGUID)); - } - private Attribute manageUACAttribute(final Attributes profile, final ObjectClass oclass, final LdapEntry entry, From e5d8493465fcf68fb7502136d673e1fa6310157d Mon Sep 17 00:00:00 2001 From: Andrea Patricelli Date: Thu, 20 Jun 2024 11:15:18 +0200 Subject: [PATCH 2/2] restore correct exception --- .../java/net/tirasa/connid/bundles/ad/util/ADUtilities.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/tirasa/connid/bundles/ad/util/ADUtilities.java b/src/main/java/net/tirasa/connid/bundles/ad/util/ADUtilities.java index e9d1d34..f9c24ca 100644 --- a/src/main/java/net/tirasa/connid/bundles/ad/util/ADUtilities.java +++ b/src/main/java/net/tirasa/connid/bundles/ad/util/ADUtilities.java @@ -547,7 +547,7 @@ public ConnectorObject getEntryToBeUpdated(final Uid uid, final ObjectClass ocla attrsToGet, oclass); } catch (NamingException e) { - throw new ConnectorException(e); + throw new ConnectorException("Error while creating connector object", e); } });