diff --git a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ldap/JdkLdapClient.java b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ldap/JdkLdapClient.java index 00d98df2a006..0fb461f585ee 100644 --- a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ldap/JdkLdapClient.java +++ b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ldap/JdkLdapClient.java @@ -84,6 +84,15 @@ public JdkLdapClient(LdapClientConfig ldapConfig) ldapConfig.getTruststorePassword()); } + @Override + public T processLdapContext(String userName, String password, LdapContextProcessor contextProcessor) + throws NamingException + { + try (CloseableContext context = createUserDirContext(userName, password)) { + return contextProcessor.process(context.context); + } + } + @Override public T executeLdapQuery(String userName, String password, LdapQuery ldapQuery, LdapSearchResultProcessor resultProcessor) throws NamingException diff --git a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ldap/LdapClient.java b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ldap/LdapClient.java index 302f7a6a231e..763521c45e6a 100644 --- a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ldap/LdapClient.java +++ b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ldap/LdapClient.java @@ -15,10 +15,14 @@ import javax.naming.NamingEnumeration; import javax.naming.NamingException; +import javax.naming.directory.DirContext; import javax.naming.directory.SearchResult; public interface LdapClient { + T processLdapContext(String userName, String password, LdapContextProcessor contextProcessor) + throws NamingException; + T executeLdapQuery(String userName, String password, LdapQuery ldapQuery, LdapSearchResultProcessor resultProcessor) throws NamingException; @@ -27,4 +31,10 @@ interface LdapSearchResultProcessor T process(NamingEnumeration searchResults) throws NamingException; } + + interface LdapContextProcessor + { + T process(DirContext dirContext) + throws NamingException; + } } diff --git a/plugin/trino-password-authenticators/src/main/java/io/trino/plugin/password/ldap/LdapAuthenticatorClient.java b/plugin/trino-password-authenticators/src/main/java/io/trino/plugin/password/ldap/LdapAuthenticatorClient.java index 37b0b3da534a..2f3fe6524fd9 100644 --- a/plugin/trino-password-authenticators/src/main/java/io/trino/plugin/password/ldap/LdapAuthenticatorClient.java +++ b/plugin/trino-password-authenticators/src/main/java/io/trino/plugin/password/ldap/LdapAuthenticatorClient.java @@ -38,14 +38,7 @@ public LdapAuthenticatorClient(LdapClient ldapClient) public void validatePassword(String userDistinguishedName, String password) throws NamingException { - ldapClient.executeLdapQuery( - userDistinguishedName, - password, - new LdapQuery.LdapQueryBuilder() - .withSearchBase(userDistinguishedName) - .withSearchFilter(userDistinguishedName) - .build(), - searchResults -> null); + ldapClient.processLdapContext(userDistinguishedName, password, context -> null); } public boolean isGroupMember(String searchBase, String groupSearch, String contextUserDistinguishedName, String contextPassword)