svn merge -c 1325500 from trunk. FIXES: HADOOP-7510. Tokens should use original hostname provided instead of ip (Daryn Sharp via bobby)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1325503 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Joseph Evans 2012-04-12 20:45:51 +00:00
parent d550503dbb
commit ecde9c7f16
4 changed files with 34 additions and 13 deletions

View File

@ -316,6 +316,9 @@ Release 0.23.3 - UNRELEASED
HADOOP-8014. ViewFileSystem does not correctly implement getDefaultBlockSize, HADOOP-8014. ViewFileSystem does not correctly implement getDefaultBlockSize,
getDefaultReplication, getContentSummary (John George via bobby) getDefaultReplication, getContentSummary (John George via bobby)
HADOOP-7510. Tokens should use original hostname provided instead of ip
(Daryn Sharp via bobby)
Release 0.23.2 - UNRELEASED Release 0.23.2 - UNRELEASED
NEW FEATURES NEW FEATURES

View File

@ -53,7 +53,6 @@ import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
import org.apache.hadoop.ipc.RpcPayloadHeader.*; import org.apache.hadoop.ipc.RpcPayloadHeader.*;
import org.apache.hadoop.ipc.protobuf.IpcConnectionContextProtos.IpcConnectionContextProto; import org.apache.hadoop.ipc.protobuf.IpcConnectionContextProtos.IpcConnectionContextProto;
import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable; import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableUtils; import org.apache.hadoop.io.WritableUtils;
import org.apache.hadoop.io.DataOutputBuffer; import org.apache.hadoop.io.DataOutputBuffer;
@ -243,8 +242,8 @@ public class Client {
this.remoteId = remoteId; this.remoteId = remoteId;
this.server = remoteId.getAddress(); this.server = remoteId.getAddress();
if (server.isUnresolved()) { if (server.isUnresolved()) {
throw NetUtils.wrapException(remoteId.getAddress().getHostName(), throw NetUtils.wrapException(server.getHostName(),
remoteId.getAddress().getPort(), server.getPort(),
null, null,
0, 0,
new UnknownHostException()); new UnknownHostException());
@ -274,9 +273,8 @@ public class Client {
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
throw new IOException(e.toString()); throw new IOException(e.toString());
} }
InetSocketAddress addr = remoteId.getAddress(); token = tokenSelector.selectToken(
token = tokenSelector.selectToken(new Text(addr.getAddress() SecurityUtil.buildTokenService(server),
.getHostAddress() + ":" + addr.getPort()),
ticket.getTokens()); ticket.getTokens());
} }
KerberosInfo krbInfo = SecurityUtil.getKerberosInfo(protocol, conf); KerberosInfo krbInfo = SecurityUtil.getKerberosInfo(protocol, conf);
@ -305,7 +303,7 @@ public class Client {
+ protocol.getSimpleName()); + protocol.getSimpleName());
this.setName("IPC Client (" + socketFactory.hashCode() +") connection to " + this.setName("IPC Client (" + socketFactory.hashCode() +") connection to " +
remoteId.getAddress().toString() + server.toString() +
" from " + ((ticket==null)?"an unknown user":ticket.getUserName())); " from " + ((ticket==null)?"an unknown user":ticket.getUserName()));
this.setDaemon(true); this.setDaemon(true);
} }
@ -751,7 +749,6 @@ public class Client {
} }
} }
@SuppressWarnings("unused")
public InetSocketAddress getRemoteAddress() { public InetSocketAddress getRemoteAddress() {
return server; return server;
} }
@ -1159,7 +1156,7 @@ public class Client {
call.error.fillInStackTrace(); call.error.fillInStackTrace();
throw call.error; throw call.error;
} else { // local exception } else { // local exception
InetSocketAddress address = remoteId.getAddress(); InetSocketAddress address = connection.getRemoteAddress();
throw NetUtils.wrapException(address.getHostName(), throw NetUtils.wrapException(address.getHostName(),
address.getPort(), address.getPort(),
NetUtils.getHostname(), NetUtils.getHostname(),

View File

@ -344,8 +344,8 @@ public class NetUtils {
/** /**
* Returns InetSocketAddress that a client can use to * Returns InetSocketAddress that a client can use to
* connect to the server. Server.getListenerAddress() is not correct when * connect to the server. Server.getListenerAddress() is not correct when
* the server binds to "0.0.0.0". This returns "127.0.0.1:port" when * the server binds to "0.0.0.0". This returns "hostname:port" of the server,
* the getListenerAddress() returns "0.0.0.0:port". * or "127.0.0.1:port" when the getListenerAddress() returns "0.0.0.0:port".
* *
* @param server * @param server
* @return socket address that a client can use to connect to the server. * @return socket address that a client can use to connect to the server.
@ -353,7 +353,12 @@ public class NetUtils {
public static InetSocketAddress getConnectAddress(Server server) { public static InetSocketAddress getConnectAddress(Server server) {
InetSocketAddress addr = server.getListenerAddress(); InetSocketAddress addr = server.getListenerAddress();
if (addr.getAddress().isAnyLocalAddress()) { if (addr.getAddress().isAnyLocalAddress()) {
addr = createSocketAddrForHost("127.0.0.1", addr.getPort()); try {
addr = new InetSocketAddress(InetAddress.getLocalHost(), addr.getPort());
} catch (UnknownHostException uhe) {
// shouldn't get here unless the host doesn't have a loopback iface
addr = createSocketAddrForHost("127.0.0.1", addr.getPort());
}
} }
return addr; return addr;
} }
@ -655,7 +660,7 @@ public class NetUtils {
} }
InetAddress addr = null; InetAddress addr = null;
try { try {
addr = InetAddress.getByName(host); addr = SecurityUtil.getByName(host);
if (NetworkInterface.getByInetAddress(addr) == null) { if (NetworkInterface.getByInetAddress(addr) == null) {
addr = null; // Not a local address addr = null; // Not a local address
} }

View File

@ -21,6 +21,7 @@ package org.apache.hadoop.ipc;
import java.io.Closeable; import java.io.Closeable;
import java.io.IOException; import java.io.IOException;
import java.net.ConnectException; import java.net.ConnectException;
import java.net.InetAddress;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.lang.management.ManagementFactory; import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo; import java.lang.management.ThreadInfo;
@ -41,6 +42,8 @@ import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.retry.RetryPolicies; import org.apache.hadoop.io.retry.RetryPolicies;
import org.apache.hadoop.io.retry.RetryProxy; import org.apache.hadoop.io.retry.RetryProxy;
import org.apache.hadoop.ipc.Client.ConnectionId; import org.apache.hadoop.ipc.Client.ConnectionId;
import org.apache.hadoop.ipc.TestSaslRPC.TestSaslImpl;
import org.apache.hadoop.ipc.TestSaslRPC.TestSaslProtocol;
import org.apache.hadoop.metrics2.MetricsRecordBuilder; import org.apache.hadoop.metrics2.MetricsRecordBuilder;
import org.apache.hadoop.net.NetUtils; import org.apache.hadoop.net.NetUtils;
import org.apache.hadoop.security.authorize.AuthorizationException; import org.apache.hadoop.security.authorize.AuthorizationException;
@ -542,6 +545,19 @@ public class TestRPC {
} }
} }
@Test
public void testServerAddress() throws IOException {
Server server = RPC.getServer(TestProtocol.class,
new TestImpl(), ADDRESS, 0, 5, true, conf, null);
InetSocketAddress bindAddr = null;
try {
bindAddr = NetUtils.getConnectAddress(server);
} finally {
server.stop();
}
assertEquals(bindAddr.getAddress(), InetAddress.getLocalHost());
}
@Test @Test
public void testAuthorization() throws Exception { public void testAuthorization() throws Exception {
Configuration conf = new Configuration(); Configuration conf = new Configuration();