Преглед на файлове

HADOOP-7982. UserGroupInformation fails to login if thread's context classloader can't load HadoopLoginModule. Contributed by Todd Lipcon.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1@1233749 13f79535-47bb-0310-9956-ffa450edef68
Todd Lipcon преди 13 години
родител
ревизия
89dc287779
променени са 2 файла, в които са добавени 15 реда и са изтрити 2 реда
  1. 3 0
      CHANGES.txt
  2. 12 2
      src/core/org/apache/hadoop/security/UserGroupInformation.java

+ 3 - 0
CHANGES.txt

@@ -86,6 +86,9 @@ Release 1.1.0 - unreleased
     HDFS-2790. FSNamesystem.setTimes throws exception with wrong
     configuration name in the message. (Arpit Gupta via eli)
 
+    HADOOP-7982. UserGroupInformation fails to login if thread's context
+    classloader can't load HadoopLoginModule. (todd)
+
   IMPROVEMENTS
 
     MAPREDUCE-2517. Add system tests to Gridmix. (Vinay Thota via amarrk)

+ 12 - 2
src/core/org/apache/hadoop/security/UserGroupInformation.java

@@ -371,9 +371,19 @@ public class UserGroupInformation {
   
   private static LoginContext
   newLoginContext(String appName, Subject subject) throws LoginException {
-    return new LoginContext(appName, subject, null, new HadoopConfiguration());
+    // Temporarily switch the thread's ContextClassLoader to match this
+    // class's classloader, so that we can properly load HadoopLoginModule
+    // from the JAAS libraries.
+    Thread t = Thread.currentThread();
+    ClassLoader oldCCL = t.getContextClassLoader();
+    t.setContextClassLoader(HadoopLoginModule.class.getClassLoader());
+    try {
+      return new LoginContext(appName, subject, null, new HadoopConfiguration());
+    } finally {
+      t.setContextClassLoader(oldCCL);
+    }
   }
-  
+
   private LoginContext getLogin() {
     return user.getLogin();
   }