HADOOP-11287. Simplify UGI#reloginFromKeytab for Java 7+. Contributed by Li Lu.

This commit is contained in:
Haohui Mai 2014-12-08 21:10:32 -08:00
parent 46a7365164
commit e2c1ef4deb
2 changed files with 5 additions and 16 deletions

View File

@ -52,6 +52,9 @@ Release 2.7.0 - UNRELEASED
HADOOP-11313. Adding a document about NativeLibraryChecker.
(Tsuyoshi OZAWA via cnauroth)
HADOOP-11287. Simplify UGI#reloginFromKeytab for Java 7+.
(Li Lu via wheat9)
OPTIMIZATIONS
HADOOP-11323. WritableComparator#compare keeps reference to byte array.

View File

@ -42,9 +42,9 @@ import java.util.Set;
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.kerberos.KerberosKey;
import javax.security.auth.kerberos.KerberosPrincipal;
import javax.security.auth.kerberos.KerberosTicket;
import javax.security.auth.kerberos.KeyTab;
import javax.security.auth.login.AppConfigurationEntry;
import javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag;
import javax.security.auth.login.LoginContext;
@ -598,20 +598,6 @@ public class UserGroupInformation {
user.setLogin(login);
}
private static Class<?> KEY_TAB_CLASS = KerberosKey.class;
static {
try {
// We use KEY_TAB_CLASS to determine if the UGI is logged in from
// keytab. In JDK6 and JDK7, if useKeyTab and storeKey are specified
// in the Krb5LoginModule, then some number of KerberosKey objects
// are added to the Subject's private credentials. However, in JDK8,
// a KeyTab object is added instead. More details in HADOOP-10786.
KEY_TAB_CLASS = Class.forName("javax.security.auth.kerberos.KeyTab");
} catch (ClassNotFoundException cnfe) {
// Ignore. javax.security.auth.kerberos.KeyTab does not exist in JDK6.
}
}
/**
* Create a UserGroupInformation for the given subject.
* This does not change the subject or acquire new credentials.
@ -620,7 +606,7 @@ public class UserGroupInformation {
UserGroupInformation(Subject subject) {
this.subject = subject;
this.user = subject.getPrincipals(User.class).iterator().next();
this.isKeytab = !subject.getPrivateCredentials(KEY_TAB_CLASS).isEmpty();
this.isKeytab = !subject.getPrivateCredentials(KeyTab.class).isEmpty();
this.isKrbTkt = !subject.getPrivateCredentials(KerberosTicket.class).isEmpty();
}