HADOOP-16935. Backport HADOOP-10848. Cleanup calling of sun.security.krb5.Config. (#1912)

(cherry picked from commit 0d47d283a6)

Co-authored-by: Akira Ajisaka <aajisaka@apache.org>
This commit is contained in:
Siyao Meng 2020-03-24 16:01:33 -07:00 committed by GitHub
parent 1bbbef38d0
commit 29e1880d27
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 37 deletions

View File

@ -24,7 +24,6 @@ import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
@ -44,6 +43,7 @@ import org.ietf.jgss.GSSException;
import org.ietf.jgss.Oid;
import javax.security.auth.Subject;
import javax.security.auth.kerberos.KerberosPrincipal;
import javax.security.auth.kerberos.KerberosTicket;
import javax.security.auth.kerberos.KeyTab;
@ -90,36 +90,37 @@ public class KerberosUtil {
return (Oid)oidField.get(oidClass);
}
/**
* Return the default realm for this JVM.
*
* @return The default realm
* @throws IllegalArgumentException If the default realm does not exist.
* @throws ClassNotFoundException Not thrown. Exists for compatibility.
* @throws NoSuchMethodException Not thrown. Exists for compatibility.
* @throws IllegalAccessException Not thrown. Exists for compatibility.
* @throws InvocationTargetException Not thrown. Exists for compatibility.
*/
public static String getDefaultRealm()
throws ClassNotFoundException, NoSuchMethodException,
IllegalArgumentException, IllegalAccessException,
InvocationTargetException {
Object kerbConf;
Class<?> classRef;
Method getInstanceMethod;
Method getDefaultRealmMethod;
if (IBM_JAVA) {
classRef = Class.forName("com.ibm.security.krb5.internal.Config");
} else {
classRef = Class.forName("sun.security.krb5.Config");
}
getInstanceMethod = classRef.getMethod("getInstance", new Class[0]);
kerbConf = getInstanceMethod.invoke(classRef, new Object[0]);
getDefaultRealmMethod = classRef.getDeclaredMethod("getDefaultRealm",
new Class[0]);
return (String)getDefaultRealmMethod.invoke(kerbConf, new Object[0]);
// Any name is okay.
return new KerberosPrincipal("tmp", 1).getRealm();
}
/**
* Return the default realm for this JVM.
* If the default realm does not exist, this method returns null.
*
* @return The default realm
*/
public static String getDefaultRealmProtected() {
String realmString = null;
try {
realmString = getDefaultRealm();
} catch (RuntimeException rte) {
//silently catch everything
return getDefaultRealm();
} catch (Exception e) {
//silently return null
//silently catch everything
return null;
}
return realmString;
}
/*

View File

@ -42,7 +42,6 @@ import org.slf4j.LoggerFactory;
import javax.security.auth.login.AppConfigurationEntry;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
@ -1039,19 +1038,11 @@ public class RegistrySecurity extends AbstractService {
* could be determined
*/
public static String getDefaultRealmInJVM() {
try {
return KerberosUtil.getDefaultRealm();
// JDK7
} catch (ClassNotFoundException ignored) {
// ignored
} catch (NoSuchMethodException ignored) {
// ignored
} catch (IllegalAccessException ignored) {
// ignored
} catch (InvocationTargetException ignored) {
// ignored
String realm = KerberosUtil.getDefaultRealmProtected();
if (realm == null) {
realm = "";
}
return "";
return realm;
}
/**