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/trunk@1325500 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ecb30a48c4
commit
047a7b276c
@ -432,6 +432,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
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
@ -53,7 +53,6 @@
|
|||||||
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 Connection(ConnectionId remoteId) throws IOException {
|
|||||||
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 Connection(ConnectionId remoteId) throws IOException {
|
|||||||
} 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 Connection(ConnectionId remoteId) throws IOException {
|
|||||||
+ 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 @@ private synchronized boolean waitForWork() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public InetSocketAddress getRemoteAddress() {
|
public InetSocketAddress getRemoteAddress() {
|
||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
@ -1159,7 +1156,7 @@ public Writable call(RpcKind rpcKind, Writable rpcRequest,
|
|||||||
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(),
|
||||||
|
@ -344,8 +344,8 @@ public static List <String[]> getAllStaticResolutions() {
|
|||||||
/**
|
/**
|
||||||
* 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 static List <String[]> getAllStaticResolutions() {
|
|||||||
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 static InetAddress getLocalInetAddress(String host)
|
|||||||
}
|
}
|
||||||
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
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
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.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 @@ private void doRPCs(Configuration conf, boolean expectFailure) throws Exception
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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();
|
||||||
|
Loading…
Reference in New Issue
Block a user