Author: hairong
Date: Fri Sep 3 21:24:29 2010
New Revision: 992479
URL: http://svn.apache.org/viewvc?rev=992479&view=rev
Log:
HADOOP-6938. ConnectionId.getRemotePrincipal() should check if security is enabled. Contributed
by Kan Zhang.
Modified:
hadoop/common/trunk/CHANGES.txt
hadoop/common/trunk/src/java/org/apache/hadoop/ipc/Client.java
hadoop/common/trunk/src/test/core/org/apache/hadoop/ipc/TestSaslRPC.java
Modified: hadoop/common/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/CHANGES.txt?rev=992479&r1=992478&r2=992479&view=diff
==============================================================================
--- hadoop/common/trunk/CHANGES.txt (original)
+++ hadoop/common/trunk/CHANGES.txt Fri Sep 3 21:24:29 2010
@@ -232,6 +232,9 @@ Trunk (unreleased changes)
HADOOP-6907. Rpc client doesn't use the per-connection conf to figure
out server's Kerberos principal (Kan Zhang via hairong)
+ HADOOP-6938. ConnectionId.getRemotePrincipal() should check if security
+ is enabled. (Kan Zhang via hairong)
+
Release 0.21.0 - Unreleased
INCOMPATIBLE CHANGES
Modified: hadoop/common/trunk/src/java/org/apache/hadoop/ipc/Client.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/src/java/org/apache/hadoop/ipc/Client.java?rev=992479&r1=992478&r2=992479&view=diff
==============================================================================
--- hadoop/common/trunk/src/java/org/apache/hadoop/ipc/Client.java (original)
+++ hadoop/common/trunk/src/java/org/apache/hadoop/ipc/Client.java Fri Sep 3 21:24:29 2010
@@ -87,7 +87,7 @@ public class Client {
private SocketFactory socketFactory; // how to create sockets
private int refCount = 1;
- final private static String PING_INTERVAL_NAME = "ipc.ping.interval";
+ final static String PING_INTERVAL_NAME = "ipc.ping.interval";
final static int DEFAULT_PING_INTERVAL = 60000; // 1 min
final static int PING_CALL_ID = -1;
@@ -1244,18 +1244,19 @@ public class Client {
Class<?> protocol, UserGroupInformation ticket, int rpcTimeout,
Configuration conf) throws IOException {
String remotePrincipal = getRemotePrincipal(conf, addr, protocol);
+ boolean doPing = conf.getBoolean("ipc.client.ping", true);
return new ConnectionId(addr, protocol, ticket,
rpcTimeout, remotePrincipal,
conf.getInt("ipc.client.connection.maxidletime", 10000), // 10s
conf.getInt("ipc.client.connect.max.retries", 10),
conf.getBoolean("ipc.client.tcpnodelay", false),
- conf.getBoolean("ipc.client.ping", true),
- Client.getPingInterval(conf));
+ doPing,
+ (doPing ? Client.getPingInterval(conf) : 0));
}
private static String getRemotePrincipal(Configuration conf,
InetSocketAddress address, Class<?> protocol) throws IOException {
- if (protocol == null) {
+ if (!UserGroupInformation.isSecurityEnabled() || protocol == null) {
return null;
}
KerberosInfo krbInfo = protocol.getAnnotation(KerberosInfo.class);
Modified: hadoop/common/trunk/src/test/core/org/apache/hadoop/ipc/TestSaslRPC.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/src/test/core/org/apache/hadoop/ipc/TestSaslRPC.java?rev=992479&r1=992478&r2=992479&view=diff
==============================================================================
--- hadoop/common/trunk/src/test/core/org/apache/hadoop/ipc/TestSaslRPC.java (original)
+++ hadoop/common/trunk/src/test/core/org/apache/hadoop/ipc/TestSaslRPC.java Fri Sep 3 21:24:29
2010
@@ -255,6 +255,45 @@ public class TestSaslRPC {
}
@Test
+ public void testPingInterval() throws Exception {
+ Configuration newConf = new Configuration(conf);
+ newConf.set(SERVER_PRINCIPAL_KEY, SERVER_PRINCIPAL_1);
+ conf.setInt(Client.PING_INTERVAL_NAME, Client.DEFAULT_PING_INTERVAL);
+ // set doPing to true
+ newConf.setBoolean("ipc.client.ping", true);
+ ConnectionId remoteId = ConnectionId.getConnectionId(
+ new InetSocketAddress(0), TestSaslProtocol.class, null, 0, newConf);
+ assertEquals(Client.DEFAULT_PING_INTERVAL, remoteId.getPingInterval());
+ // set doPing to false
+ newConf.setBoolean("ipc.client.ping", false);
+ remoteId = ConnectionId.getConnectionId(
+ new InetSocketAddress(0), TestSaslProtocol.class, null, 0, newConf);
+ assertEquals(0, remoteId.getPingInterval());
+ }
+
+ @Test
+ public void testGetRemotePrincipal() throws Exception {
+ try {
+ Configuration newConf = new Configuration(conf);
+ newConf.set(SERVER_PRINCIPAL_KEY, SERVER_PRINCIPAL_1);
+ ConnectionId remoteId = ConnectionId.getConnectionId(
+ new InetSocketAddress(0), TestSaslProtocol.class, null, 0, newConf);
+ assertEquals(SERVER_PRINCIPAL_1, remoteId.getServerPrincipal());
+ // this following test needs security to be off
+ newConf.set(HADOOP_SECURITY_AUTHENTICATION, "simple");
+ UserGroupInformation.setConfiguration(newConf);
+ remoteId = ConnectionId.getConnectionId(new InetSocketAddress(0),
+ TestSaslProtocol.class, null, 0, newConf);
+ assertEquals(
+ "serverPrincipal should be null when security is turned off", null,
+ remoteId.getServerPrincipal());
+ } finally {
+ // revert back to security is on
+ UserGroupInformation.setConfiguration(conf);
+ }
+ }
+
+ @Test
public void testPerConnectionConf() throws Exception {
TestTokenSecretManager sm = new TestTokenSecretManager();
final Server server = RPC.getServer(TestSaslProtocol.class,
|