You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by om...@apache.org on 2011/03/08 05:36:53 UTC
svn commit: r1079116 - in /hadoop/common/branches/yahoo-merge/src: java/
java/org/apache/hadoop/fs/ java/org/apache/hadoop/ipc/
java/org/apache/hadoop/security/ java/org/apache/hadoop/security/authorize/
test/core/org/apache/hadoop/ipc/
Author: omalley
Date: Tue Mar 8 04:36:52 2011
New Revision: 1079116
URL: http://svn.apache.org/viewvc?rev=1079116&view=rev
Log:
commit 1ce77e75307150f04fe85877d9354691dda4bafc
Author: Mahadev Konar <ma...@apache.org>
Date: Mon Nov 1 20:13:33 2010 +0000
HADOOP-6929. RPC should have a way to pass Security information other than protocol annotations. https://issues.apache.org/jira/secure/attachment/12456376/Hadoop-6929_v1.patch (sharad agarwal via mahadev)
+++ b/YAHOO-CHANGES.txt
+ HADOOP-6929. RPC should have a way to pass Security information other
+ than protocol annotations.
+ https://issues.apache.org/jira/secure/attachment/12456376/Hadoop-6929_v1.patch
+ (sharad agarwal via mahadev)
+
Added:
hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/AnnotatedSecurityInfo.java
hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/SecurityInfo.java
Modified:
hadoop/common/branches/yahoo-merge/src/java/core-default.xml
hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/fs/CommonConfigurationKeysPublic.java
hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/ipc/Client.java
hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/SecurityUtil.java
hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/authorize/ServiceAuthorizationManager.java
hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/ipc/TestAvroRpc.java
hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/ipc/TestSaslRPC.java
Modified: hadoop/common/branches/yahoo-merge/src/java/core-default.xml
URL: http://svn.apache.org/viewvc/hadoop/common/branches/yahoo-merge/src/java/core-default.xml?rev=1079116&r1=1079115&r2=1079116&view=diff
==============================================================================
--- hadoop/common/branches/yahoo-merge/src/java/core-default.xml (original)
+++ hadoop/common/branches/yahoo-merge/src/java/core-default.xml Tue Mar 8 04:36:52 2011
@@ -98,6 +98,15 @@
</property>
<property>
+ <name>hadoop.security.info.class.name</name>
+ <value>org.apache.hadoop.security.AnnotatedSecurityInfo</value>
+ <description>
+ Implementation of org.apache.hadoop.security.SecurityInfo interface to
+ be used by RPC for a given protocol.
+ </description>
+</property>
+
+<property>
<name>hadoop.rpc.protection</name>
<value>authentication</value>
<description>This field sets the quality of protection for secured sasl
Modified: hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/fs/CommonConfigurationKeysPublic.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/fs/CommonConfigurationKeysPublic.java?rev=1079116&r1=1079115&r2=1079116&view=diff
==============================================================================
--- hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/fs/CommonConfigurationKeysPublic.java (original)
+++ hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/fs/CommonConfigurationKeysPublic.java Tue Mar 8 04:36:52 2011
@@ -216,5 +216,8 @@ public class CommonConfigurationKeysPubl
/** See <a href="{@docRoot}/../core-default.html">core-default.xml</a> */
public static final String HADOOP_SECURITY_SERVICE_USER_NAME_KEY =
"hadoop.security.service.user.name.key";
+ /** See <a href="{@docRoot}/../core-default.html">core-default.xml</a> */
+ public static final String HADOOP_SECURITY_INFO_CLASS_NAME =
+ "hadoop.security.info.class.name";
}
Modified: hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/ipc/Client.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/ipc/Client.java?rev=1079116&r1=1079115&r2=1079116&view=diff
==============================================================================
--- hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/ipc/Client.java (original)
+++ hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/ipc/Client.java Tue Mar 8 04:36:52 2011
@@ -55,8 +55,10 @@ import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableUtils;
import org.apache.hadoop.io.DataOutputBuffer;
import org.apache.hadoop.net.NetUtils;
+import org.apache.hadoop.security.AnnotatedSecurityInfo;
import org.apache.hadoop.security.KerberosInfo;
import org.apache.hadoop.security.SaslRpcClient;
+import org.apache.hadoop.security.SecurityInfo;
import org.apache.hadoop.security.SaslRpcServer.AuthMethod;
import org.apache.hadoop.security.SecurityUtil;
import org.apache.hadoop.security.UserGroupInformation;
@@ -251,7 +253,8 @@ public class Client {
Class<?> protocol = remoteId.getProtocol();
this.useSasl = UserGroupInformation.isSecurityEnabled();
if (useSasl && protocol != null) {
- TokenInfo tokenInfo = protocol.getAnnotation(TokenInfo.class);
+ TokenInfo tokenInfo = SecurityUtil.getSecurityInfo(
+ conf).getTokenInfo(protocol);
if (tokenInfo != null) {
TokenSelector<? extends TokenIdentifier> tokenSelector = null;
try {
@@ -266,7 +269,8 @@ public class Client {
.getHostAddress() + ":" + addr.getPort()),
ticket.getTokens());
}
- KerberosInfo krbInfo = protocol.getAnnotation(KerberosInfo.class);
+ KerberosInfo krbInfo = SecurityUtil.getSecurityInfo(
+ conf).getKerborosInfo(protocol);
if (krbInfo != null) {
serverPrincipal = remoteId.getServerPrincipal();
if (LOG.isDebugEnabled()) {
@@ -1259,7 +1263,8 @@ public class Client {
if (!UserGroupInformation.isSecurityEnabled() || protocol == null) {
return null;
}
- KerberosInfo krbInfo = protocol.getAnnotation(KerberosInfo.class);
+ KerberosInfo krbInfo = SecurityUtil.getSecurityInfo(
+ conf).getKerborosInfo(protocol);
if (krbInfo != null) {
String serverKey = krbInfo.serverPrincipal();
if (serverKey == null) {
Added: hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/AnnotatedSecurityInfo.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/AnnotatedSecurityInfo.java?rev=1079116&view=auto
==============================================================================
--- hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/AnnotatedSecurityInfo.java (added)
+++ hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/AnnotatedSecurityInfo.java Tue Mar 8 04:36:52 2011
@@ -0,0 +1,39 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.security;
+
+import org.apache.hadoop.security.token.TokenInfo;
+
+/**
+ * Constructs SecurityInfo from Annotations provided in protocol interface.
+ */
+public class AnnotatedSecurityInfo implements SecurityInfo {
+
+ @Override
+ public KerberosInfo getKerborosInfo(Class<?> protocol) {
+ return protocol.getAnnotation(KerberosInfo.class);
+ }
+
+ @Override
+ public TokenInfo getTokenInfo(Class<?> protocol) {
+ return protocol.getAnnotation(TokenInfo.class);
+ }
+
+
+}
Added: hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/SecurityInfo.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/SecurityInfo.java?rev=1079116&view=auto
==============================================================================
--- hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/SecurityInfo.java (added)
+++ hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/SecurityInfo.java Tue Mar 8 04:36:52 2011
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.security;
+
+import org.apache.hadoop.security.token.TokenInfo;
+
+/**
+ * Interface used by RPC to get the Security information for a given
+ * protocol.
+ */
+public interface SecurityInfo {
+
+ /**
+ * Get the KerberosInfo for a given protocol.
+ * @param protocol interface class
+ * @return KerberosInfo
+ */
+ KerberosInfo getKerborosInfo(Class<?> protocol);
+
+ /**
+ * Get the TokenInfo for a given protocol.
+ * @param protocol interface class
+ * @return TokenInfo instance
+ */
+ TokenInfo getTokenInfo(Class<?> protocol);
+
+}
Modified: hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/SecurityUtil.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/SecurityUtil.java?rev=1079116&r1=1079115&r2=1079116&view=diff
==============================================================================
--- hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/SecurityUtil.java (original)
+++ hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/SecurityUtil.java Tue Mar 8 04:36:52 2011
@@ -33,7 +33,7 @@ import org.apache.commons.logging.LogFac
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.security.UserGroupInformation;
+import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
import org.apache.hadoop.net.NetUtils;
import sun.security.jgss.krb5.Krb5Util;
@@ -249,4 +249,25 @@ public class SecurityUtil {
sb.append(host).append(":").append(port);
return sb.toString();
}
+
+ @SuppressWarnings("unchecked")
+ /**
+ * Construct the SecurityInfo instance from the given conf for a
+ * protocol.
+ * @param conf Configuration object with which the protocol is registered.
+ */
+ public static SecurityInfo getSecurityInfo(Configuration conf)
+ throws IOException {
+ try {
+ Class<SecurityInfo> secInfoClass = (Class<SecurityInfo>)
+ conf.getClass(
+ CommonConfigurationKeysPublic.HADOOP_SECURITY_INFO_CLASS_NAME,
+ AnnotatedSecurityInfo.class);
+ SecurityInfo secInfo = secInfoClass.newInstance();
+ return secInfo;
+ } catch (Exception e) {
+ throw new IOException("Can't create the SecurityInfo instance", e);
+ }
+ }
+
}
Modified: hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/authorize/ServiceAuthorizationManager.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/authorize/ServiceAuthorizationManager.java?rev=1079116&r1=1079115&r2=1079116&view=diff
==============================================================================
--- hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/authorize/ServiceAuthorizationManager.java (original)
+++ hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/security/authorize/ServiceAuthorizationManager.java Tue Mar 8 04:36:52 2011
@@ -86,7 +86,13 @@ public class ServiceAuthorizationManager
}
// get client principal key to verify (if available)
- KerberosInfo krbInfo = protocol.getAnnotation(KerberosInfo.class);
+ KerberosInfo krbInfo;
+ try {
+ krbInfo = SecurityUtil.getSecurityInfo(
+ conf).getKerborosInfo(protocol);
+ } catch (IOException e1) {
+ throw new AuthorizationException(e1);
+ }
String clientPrincipal = null;
if (krbInfo != null) {
String clientKey = krbInfo.clientPrincipal();
Modified: hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/ipc/TestAvroRpc.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/ipc/TestAvroRpc.java?rev=1079116&r1=1079115&r2=1079116&view=diff
==============================================================================
--- hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/ipc/TestAvroRpc.java (original)
+++ hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/ipc/TestAvroRpc.java Tue Mar 8 04:36:52 2011
@@ -18,8 +18,14 @@
package org.apache.hadoop.ipc;
+import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION;
+
+import java.io.IOException;
import java.net.InetSocketAddress;
+import javax.security.sasl.Sasl;
+
+import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.avro.ipc.AvroRemoteException;
@@ -27,7 +33,15 @@ import org.apache.avro.util.Utf8;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
+import org.apache.hadoop.io.Text;
+import org.apache.hadoop.ipc.TestSaslRPC.CustomSecurityInfo;
+import org.apache.hadoop.ipc.TestSaslRPC.TestTokenIdentifier;
+import org.apache.hadoop.ipc.TestSaslRPC.TestTokenSecretManager;
import org.apache.hadoop.net.NetUtils;
+import org.apache.hadoop.security.SaslRpcServer;
+import org.apache.hadoop.security.UserGroupInformation;
+import org.apache.hadoop.security.token.Token;
/** Unit tests for AvroRpc. */
public class TestAvroRpc extends TestCase {
@@ -36,8 +50,6 @@ public class TestAvroRpc extends TestCas
public static final Log LOG =
LogFactory.getLog(TestAvroRpc.class);
- private static Configuration conf = new Configuration();
-
int datasize = 1024*100;
int numThreads = 50;
@@ -56,19 +68,47 @@ public class TestAvroRpc extends TestCas
}
}
- public void testCalls() throws Exception {
+ public void testReflect() throws Exception {
+ testReflect(false);
+ }
+
+ public void testSecureReflect() throws Exception {
+ testReflect(true);
+ }
+
+ public void testSpecific() throws Exception {
+ testSpecific(false);
+ }
+
+ public void testSecureSpecific() throws Exception {
+ testSpecific(true);
+ }
+
+ private void testReflect(boolean secure) throws Exception {
Configuration conf = new Configuration();
+ TestTokenSecretManager sm = null;
+ if (secure) {
+ makeSecure(conf);
+ sm = new TestTokenSecretManager();
+ }
+ UserGroupInformation.setConfiguration(conf);
RPC.setProtocolEngine(conf, AvroTestProtocol.class, AvroRpcEngine.class);
Server server = RPC.getServer(AvroTestProtocol.class,
- new TestImpl(), ADDRESS, 0, conf);
- AvroTestProtocol proxy = null;
+ new TestImpl(), ADDRESS, 0, 5, true,
+ conf, sm);
try {
server.start();
-
InetSocketAddress addr = NetUtils.getConnectAddress(server);
- proxy =
+
+ if (secure) {
+ addToken(sm, addr);
+ //QOP must be auth
+ Assert.assertEquals("auth", SaslRpcServer.SASL_PROPS.get(Sasl.QOP));
+ }
+
+ AvroTestProtocol proxy =
(AvroTestProtocol)RPC.getProxy(AvroTestProtocol.class, 0, addr, conf);
-
+
proxy.ping();
String echo = proxy.echo("hello world");
@@ -93,19 +133,54 @@ public class TestAvroRpc extends TestCas
}
}
- public void testAvroSpecificRpc() throws Exception {
+ private void makeSecure(Configuration conf) {
+ conf.set(HADOOP_SECURITY_AUTHENTICATION, "kerberos");
+ conf.set("hadoop.rpc.socket.factory.class.default", "");
+ //Avro doesn't work with security annotations on protocol.
+ //Avro works ONLY with custom security context
+ conf.set(CommonConfigurationKeysPublic.HADOOP_SECURITY_INFO_CLASS_NAME,
+ CustomSecurityInfo.class.getName());
+ }
+
+ private void addToken(TestTokenSecretManager sm,
+ InetSocketAddress addr) throws IOException {
+ final UserGroupInformation current = UserGroupInformation.getCurrentUser();
+
+ TestTokenIdentifier tokenId = new TestTokenIdentifier(new Text(current
+ .getUserName()));
+ Token<TestTokenIdentifier> token = new Token<TestTokenIdentifier>(tokenId,
+ sm);
+ Text host = new Text(addr.getAddress().getHostAddress() + ":"
+ + addr.getPort());
+ token.setService(host);
+ LOG.info("Service IP address for token is " + host);
+ current.addToken(token);
+ }
+
+ private void testSpecific(boolean secure) throws Exception {
Configuration conf = new Configuration();
+ TestTokenSecretManager sm = null;
+ if (secure) {
+ makeSecure(conf);
+ sm = new TestTokenSecretManager();
+ }
+ UserGroupInformation.setConfiguration(conf);
RPC.setProtocolEngine(conf, AvroSpecificTestProtocol.class,
AvroSpecificRpcEngine.class);
Server server = RPC.getServer(AvroSpecificTestProtocol.class,
- new AvroSpecificTestProtocolImpl(),
- ADDRESS, 0, conf);
- AvroSpecificTestProtocol proxy = null;
+ new AvroSpecificTestProtocolImpl(), ADDRESS, 0, 5, true,
+ conf, sm);
try {
server.start();
-
InetSocketAddress addr = NetUtils.getConnectAddress(server);
- proxy =
+
+ if (secure) {
+ addToken(sm, addr);
+ //QOP must be auth
+ Assert.assertEquals("auth", SaslRpcServer.SASL_PROPS.get(Sasl.QOP));
+ }
+
+ AvroSpecificTestProtocol proxy =
(AvroSpecificTestProtocol)RPC.getProxy(AvroSpecificTestProtocol.class,
0, addr, conf);
@@ -134,5 +209,5 @@ public class TestAvroRpc extends TestCas
}
}
-
+
}
Modified: hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/ipc/TestSaslRPC.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/ipc/TestSaslRPC.java?rev=1079116&r1=1079115&r2=1079116&view=diff
==============================================================================
--- hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/ipc/TestSaslRPC.java (original)
+++ hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/ipc/TestSaslRPC.java Tue Mar 8 04:36:52 2011
@@ -18,12 +18,15 @@
package org.apache.hadoop.ipc;
-import static org.apache.hadoop.fs.CommonConfigurationKeys.HADOOP_SECURITY_AUTHENTICATION;
-import static org.junit.Assert.*;
+import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
+import java.lang.annotation.Annotation;
import java.net.InetSocketAddress;
import java.security.PrivilegedExceptionAction;
import java.util.Collection;
@@ -33,28 +36,29 @@ import javax.security.sasl.Sasl;
import junit.framework.Assert;
-import org.apache.commons.logging.*;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.impl.Log4JLogger;
-
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.ipc.Client.ConnectionId;
import org.apache.hadoop.net.NetUtils;
import org.apache.hadoop.security.KerberosInfo;
-import org.apache.hadoop.security.token.SecretManager;
-import org.apache.hadoop.security.token.Token;
-import org.apache.hadoop.security.token.TokenIdentifier;
-import org.apache.hadoop.security.token.TokenInfo;
-import org.apache.hadoop.security.token.TokenSelector;
-import org.apache.hadoop.security.token.SecretManager.InvalidToken;
import org.apache.hadoop.security.SaslInputStream;
import org.apache.hadoop.security.SaslRpcClient;
import org.apache.hadoop.security.SaslRpcServer;
+import org.apache.hadoop.security.SecurityInfo;
import org.apache.hadoop.security.SecurityUtil;
import org.apache.hadoop.security.TestUserGroupInformation;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.UserGroupInformation.AuthenticationMethod;
-
+import org.apache.hadoop.security.token.SecretManager;
+import org.apache.hadoop.security.token.Token;
+import org.apache.hadoop.security.token.TokenIdentifier;
+import org.apache.hadoop.security.token.TokenInfo;
+import org.apache.hadoop.security.token.TokenSelector;
+import org.apache.hadoop.security.token.SecretManager.InvalidToken;
import org.apache.log4j.Level;
import org.junit.Test;
@@ -187,22 +191,70 @@ public class TestSaslRPC {
}
}
+ public static class CustomSecurityInfo implements SecurityInfo {
+
+ @Override
+ public KerberosInfo getKerborosInfo(Class<?> protocol) {
+ return new KerberosInfo() {
+ @Override
+ public Class<? extends Annotation> annotationType() {
+ return null;
+ }
+ @Override
+ public String serverPrincipal() {
+ return SERVER_PRINCIPAL_KEY;
+ }
+ @Override
+ public String clientPrincipal() {
+ return null;
+ }
+ };
+ }
+
+ @Override
+ public TokenInfo getTokenInfo(Class<?> protocol) {
+ return new TokenInfo() {
+ @Override
+ public Class<? extends TokenSelector<? extends
+ TokenIdentifier>> value() {
+ return TestTokenSelector.class;
+ }
+ @Override
+ public Class<? extends Annotation> annotationType() {
+ return null;
+ }
+ };
+ }
+ }
+
@Test
public void testDigestRpc() throws Exception {
TestTokenSecretManager sm = new TestTokenSecretManager();
final Server server = RPC.getServer(TestSaslProtocol.class,
new TestSaslImpl(), ADDRESS, 0, 5, true, conf, sm);
- doDigestRpc(server, sm);
+ doDigestRpc(server, sm, conf);
}
-
+
+ @Test
+ public void testDigestRpcWithoutAnnotation() throws Exception {
+ TestTokenSecretManager sm = new TestTokenSecretManager();
+ Configuration conf1 = new Configuration(conf);
+ conf1.set(CommonConfigurationKeysPublic.HADOOP_SECURITY_INFO_CLASS_NAME,
+ CustomSecurityInfo.class.getName());
+ final Server server = RPC.getServer(TestSaslProtocol.class,
+ new TestSaslImpl(), ADDRESS, 0, 5, true, conf1, sm);
+
+ doDigestRpc(server, sm, conf1);
+ }
+
@Test
public void testSecureToInsecureRpc() throws Exception {
Server server = RPC.getServer(TestSaslProtocol.class,
new TestSaslImpl(), ADDRESS, 0, 5, true, conf, null);
server.disableSecurity();
TestTokenSecretManager sm = new TestTokenSecretManager();
- doDigestRpc(server, sm);
+ doDigestRpc(server, sm, conf);
}
@Test
@@ -213,7 +265,7 @@ public class TestSaslRPC {
boolean succeeded = false;
try {
- doDigestRpc(server, sm);
+ doDigestRpc(server, sm, conf);
} catch (RemoteException e) {
LOG.info("LOGGING MESSAGE: " + e.getLocalizedMessage());
assertTrue(ERROR_MESSAGE.equals(e.getLocalizedMessage()));
@@ -223,7 +275,8 @@ public class TestSaslRPC {
assertTrue(succeeded);
}
- private void doDigestRpc(Server server, TestTokenSecretManager sm)
+ private void doDigestRpc(Server server, TestTokenSecretManager sm,
+ Configuration config)
throws Exception {
server.start();
@@ -242,7 +295,7 @@ public class TestSaslRPC {
TestSaslProtocol proxy = null;
try {
proxy = (TestSaslProtocol) RPC.getProxy(TestSaslProtocol.class,
- TestSaslProtocol.versionID, addr, conf);
+ TestSaslProtocol.versionID, addr, config);
//QOP must be auth
Assert.assertEquals(SaslRpcServer.SASL_PROPS.get(Sasl.QOP), "auth");
proxy.ping();