HADOOP-9283. Add support for running the Hadoop client on AIX. Contributed by Aaron T. Myers.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1443303 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
90c3700c52
commit
411bb0bd99
|
@ -345,6 +345,8 @@ Release 2.0.4-beta - UNRELEASED
|
||||||
|
|
||||||
NEW FEATURES
|
NEW FEATURES
|
||||||
|
|
||||||
|
HADOOP-9283. Add support for running the Hadoop client on AIX. (atm)
|
||||||
|
|
||||||
IMPROVEMENTS
|
IMPROVEMENTS
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
|
@ -301,17 +301,25 @@ public class UserGroupInformation {
|
||||||
|
|
||||||
private static String OS_LOGIN_MODULE_NAME;
|
private static String OS_LOGIN_MODULE_NAME;
|
||||||
private static Class<? extends Principal> OS_PRINCIPAL_CLASS;
|
private static Class<? extends Principal> OS_PRINCIPAL_CLASS;
|
||||||
|
|
||||||
private static final boolean windows =
|
private static final boolean windows =
|
||||||
System.getProperty("os.name").startsWith("Windows");
|
System.getProperty("os.name").startsWith("Windows");
|
||||||
private static final boolean is64Bit =
|
private static final boolean is64Bit =
|
||||||
System.getProperty("os.arch").contains("64");
|
System.getProperty("os.arch").contains("64");
|
||||||
|
private static final boolean ibmJava = System.getProperty("java.vendor").contains("IBM");
|
||||||
|
private static final boolean aix = System.getProperty("os.name").equals("AIX");
|
||||||
|
|
||||||
/* Return the OS login module class name */
|
/* Return the OS login module class name */
|
||||||
private static String getOSLoginModuleName() {
|
private static String getOSLoginModuleName() {
|
||||||
if (System.getProperty("java.vendor").contains("IBM")) {
|
if (ibmJava) {
|
||||||
return windows ? (is64Bit
|
if (windows) {
|
||||||
? "com.ibm.security.auth.module.Win64LoginModule"
|
return is64Bit ? "com.ibm.security.auth.module.Win64LoginModule"
|
||||||
: "com.ibm.security.auth.module.NTLoginModule")
|
: "com.ibm.security.auth.module.NTLoginModule";
|
||||||
: "com.ibm.security.auth.module.LinuxLoginModule";
|
} else if (aix) {
|
||||||
|
return "com.ibm.security.auth.module.AIXLoginModule";
|
||||||
|
} else {
|
||||||
|
return "com.ibm.security.auth.module.LinuxLoginModule";
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return windows ? "com.sun.security.auth.module.NTLoginModule"
|
return windows ? "com.sun.security.auth.module.NTLoginModule"
|
||||||
: "com.sun.security.auth.module.UnixLoginModule";
|
: "com.sun.security.auth.module.UnixLoginModule";
|
||||||
|
@ -323,11 +331,14 @@ public class UserGroupInformation {
|
||||||
private static Class<? extends Principal> getOsPrincipalClass() {
|
private static Class<? extends Principal> getOsPrincipalClass() {
|
||||||
ClassLoader cl = ClassLoader.getSystemClassLoader();
|
ClassLoader cl = ClassLoader.getSystemClassLoader();
|
||||||
try {
|
try {
|
||||||
if (System.getProperty("java.vendor").contains("IBM")) {
|
if (ibmJava) {
|
||||||
if (windows) {
|
if (windows) {
|
||||||
return (Class<? extends Principal>) (is64Bit
|
return (Class<? extends Principal>) (is64Bit
|
||||||
? cl.loadClass("com.ibm.security.auth.UsernamePrincipal")
|
? cl.loadClass("com.ibm.security.auth.UsernamePrincipal")
|
||||||
: cl.loadClass("com.ibm.security.auth.NTUserPrincipal"));
|
: cl.loadClass("com.ibm.security.auth.NTUserPrincipal"));
|
||||||
|
} else if (aix) {
|
||||||
|
return (Class<? extends Principal>)
|
||||||
|
cl.loadClass("com.ibm.security.auth.AIXPrincipal");
|
||||||
} else {
|
} else {
|
||||||
return (Class<? extends Principal>) (is64Bit
|
return (Class<? extends Principal>) (is64Bit
|
||||||
? cl.loadClass("com.ibm.security.auth.UsernamePrincipal")
|
? cl.loadClass("com.ibm.security.auth.UsernamePrincipal")
|
||||||
|
@ -418,12 +429,21 @@ public class UserGroupInformation {
|
||||||
private static final Map<String,String> USER_KERBEROS_OPTIONS =
|
private static final Map<String,String> USER_KERBEROS_OPTIONS =
|
||||||
new HashMap<String,String>();
|
new HashMap<String,String>();
|
||||||
static {
|
static {
|
||||||
USER_KERBEROS_OPTIONS.put("doNotPrompt", "true");
|
if (ibmJava) {
|
||||||
USER_KERBEROS_OPTIONS.put("useTicketCache", "true");
|
USER_KERBEROS_OPTIONS.put("useDefaultCcache", "true");
|
||||||
USER_KERBEROS_OPTIONS.put("renewTGT", "true");
|
} else {
|
||||||
|
USER_KERBEROS_OPTIONS.put("doNotPrompt", "true");
|
||||||
|
USER_KERBEROS_OPTIONS.put("useTicketCache", "true");
|
||||||
|
USER_KERBEROS_OPTIONS.put("renewTGT", "true");
|
||||||
|
}
|
||||||
String ticketCache = System.getenv("KRB5CCNAME");
|
String ticketCache = System.getenv("KRB5CCNAME");
|
||||||
if (ticketCache != null) {
|
if (ticketCache != null) {
|
||||||
USER_KERBEROS_OPTIONS.put("ticketCache", ticketCache);
|
if (ibmJava) {
|
||||||
|
// The first value searched when "useDefaultCcache" is used.
|
||||||
|
System.setProperty("KRB5CCNAME", ticketCache);
|
||||||
|
} else {
|
||||||
|
USER_KERBEROS_OPTIONS.put("ticketCache", ticketCache);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
USER_KERBEROS_OPTIONS.putAll(BASIC_JAAS_OPTIONS);
|
USER_KERBEROS_OPTIONS.putAll(BASIC_JAAS_OPTIONS);
|
||||||
}
|
}
|
||||||
|
@ -434,10 +454,14 @@ public class UserGroupInformation {
|
||||||
private static final Map<String,String> KEYTAB_KERBEROS_OPTIONS =
|
private static final Map<String,String> KEYTAB_KERBEROS_OPTIONS =
|
||||||
new HashMap<String,String>();
|
new HashMap<String,String>();
|
||||||
static {
|
static {
|
||||||
KEYTAB_KERBEROS_OPTIONS.put("doNotPrompt", "true");
|
if (ibmJava) {
|
||||||
KEYTAB_KERBEROS_OPTIONS.put("useKeyTab", "true");
|
KEYTAB_KERBEROS_OPTIONS.put("credsType", "both");
|
||||||
KEYTAB_KERBEROS_OPTIONS.put("storeKey", "true");
|
} else {
|
||||||
KEYTAB_KERBEROS_OPTIONS.put("refreshKrb5Config", "true");
|
KEYTAB_KERBEROS_OPTIONS.put("doNotPrompt", "true");
|
||||||
|
KEYTAB_KERBEROS_OPTIONS.put("useKeyTab", "true");
|
||||||
|
KEYTAB_KERBEROS_OPTIONS.put("storeKey", "true");
|
||||||
|
KEYTAB_KERBEROS_OPTIONS.put("refreshKrb5Config", "true");
|
||||||
|
}
|
||||||
KEYTAB_KERBEROS_OPTIONS.putAll(BASIC_JAAS_OPTIONS);
|
KEYTAB_KERBEROS_OPTIONS.putAll(BASIC_JAAS_OPTIONS);
|
||||||
}
|
}
|
||||||
private static final AppConfigurationEntry KEYTAB_KERBEROS_LOGIN =
|
private static final AppConfigurationEntry KEYTAB_KERBEROS_LOGIN =
|
||||||
|
@ -462,7 +486,12 @@ public class UserGroupInformation {
|
||||||
} else if (USER_KERBEROS_CONFIG_NAME.equals(appName)) {
|
} else if (USER_KERBEROS_CONFIG_NAME.equals(appName)) {
|
||||||
return USER_KERBEROS_CONF;
|
return USER_KERBEROS_CONF;
|
||||||
} else if (KEYTAB_KERBEROS_CONFIG_NAME.equals(appName)) {
|
} else if (KEYTAB_KERBEROS_CONFIG_NAME.equals(appName)) {
|
||||||
KEYTAB_KERBEROS_OPTIONS.put("keyTab", keytabFile);
|
if (ibmJava) {
|
||||||
|
KEYTAB_KERBEROS_OPTIONS.put("useKeytab",
|
||||||
|
prependFileAuthority(keytabFile));
|
||||||
|
} else {
|
||||||
|
KEYTAB_KERBEROS_OPTIONS.put("keyTab", keytabFile);
|
||||||
|
}
|
||||||
KEYTAB_KERBEROS_OPTIONS.put("principal", keytabPrincipal);
|
KEYTAB_KERBEROS_OPTIONS.put("principal", keytabPrincipal);
|
||||||
return KEYTAB_KERBEROS_CONF;
|
return KEYTAB_KERBEROS_CONF;
|
||||||
}
|
}
|
||||||
|
@ -470,6 +499,11 @@ public class UserGroupInformation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String prependFileAuthority(String keytabPath) {
|
||||||
|
return keytabPath.startsWith("file://") ? keytabPath
|
||||||
|
: "file://" + keytabPath;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a javax.security configuration that is created at runtime.
|
* Represents a javax.security configuration that is created at runtime.
|
||||||
*/
|
*/
|
||||||
|
@ -666,6 +700,7 @@ public class UserGroupInformation {
|
||||||
}
|
}
|
||||||
loginUser.spawnAutoRenewalThreadForUserCreds();
|
loginUser.spawnAutoRenewalThreadForUserCreds();
|
||||||
} catch (LoginException le) {
|
} catch (LoginException le) {
|
||||||
|
LOG.debug("failure to login", le);
|
||||||
throw new IOException("failure to login", le);
|
throw new IOException("failure to login", le);
|
||||||
}
|
}
|
||||||
if (LOG.isDebugEnabled()) {
|
if (LOG.isDebugEnabled()) {
|
||||||
|
|
Loading…
Reference in New Issue