You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by so...@apache.org on 2021/05/04 10:34:24 UTC
[hadoop] branch trunk updated: HADOOP-17675.
LdapGroupsMapping$LdapSslSocketFactory ClassNotFoundException (#2965)
This is an automated email from the ASF dual-hosted git repository.
sodonnell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push:
new 0d78d73 HADOOP-17675. LdapGroupsMapping$LdapSslSocketFactory ClassNotFoundException (#2965)
0d78d73 is described below
commit 0d78d73973cf8643c4120678ebeea9cde473a2c4
Author: Istvan Fajth <pi...@cloudera.com>
AuthorDate: Tue May 4 12:33:59 2021 +0200
HADOOP-17675. LdapGroupsMapping$LdapSslSocketFactory ClassNotFoundException (#2965)
---
.../apache/hadoop/security/LdapGroupsMapping.java | 24 +++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/LdapGroupsMapping.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/LdapGroupsMapping.java
index 10483a2..17934ad 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/LdapGroupsMapping.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/LdapGroupsMapping.java
@@ -643,7 +643,29 @@ public class LdapGroupsMapping
env.put("com.sun.jndi.ldap.read.timeout", conf.get(READ_TIMEOUT,
String.valueOf(READ_TIMEOUT_DEFAULT)));
- ctx = new InitialDirContext(env);
+ // See HADOOP-17675 for details TLDR:
+ // From a native thread the thread's context classloader is null.
+ // jndi internally in the InitialDirContext specifies the context
+ // classloader for Class.forName, and as it is null, jndi will use the
+ // bootstrap classloader in this case to laod the socket factory
+ // implementation.
+ // BUT
+ // Bootstrap classloader does not have it in its classpath, so throws a
+ // ClassNotFoundException.
+ // This affects Impala for example when it uses LdapGroupsMapping.
+ ClassLoader currentContextLoader =
+ Thread.currentThread().getContextClassLoader();
+ if (currentContextLoader == null) {
+ try {
+ Thread.currentThread().setContextClassLoader(
+ this.getClass().getClassLoader());
+ ctx = new InitialDirContext(env);
+ } finally {
+ Thread.currentThread().setContextClassLoader(null);
+ }
+ } else {
+ ctx = new InitialDirContext(env);
+ }
}
return ctx;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org