Skip to content

Commit 0fa0528

Browse files
szetszwosteveloughran
authored andcommitted
CDPD-73325: HADOOP-19227. ipc.Server accelerate token negotiation only for the default mechanism. (apache#6949)
1 parent 6d88b34 commit 0fa0528

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@
106106
import org.apache.hadoop.ipc.protobuf.RpcHeaderProtos.RPCTraceInfoProto;
107107
import org.apache.hadoop.net.NetUtils;
108108
import org.apache.hadoop.security.AccessControlException;
109+
import org.apache.hadoop.security.SaslConstants;
109110
import org.apache.hadoop.security.SaslPropertiesResolver;
110111
import org.apache.hadoop.security.SaslRpcServer;
111112
import org.apache.hadoop.security.SaslRpcServer.AuthMethod;
@@ -2605,7 +2606,8 @@ private RpcSaslProto buildSaslNegotiateResponse()
26052606
RpcSaslProto negotiateMessage = negotiateResponse;
26062607
// accelerate token negotiation by sending initial challenge
26072608
// in the negotiation response
2608-
if (enabledAuthMethods.contains(AuthMethod.TOKEN)) {
2609+
if (enabledAuthMethods.contains(AuthMethod.TOKEN)
2610+
&& SaslConstants.SASL_MECHANISM_DEFAULT.equals(AuthMethod.TOKEN.getMechanismName())) {
26092611
saslServer = createSaslServer(AuthMethod.TOKEN);
26102612
byte[] challenge = saslServer.evaluateResponse(new byte[0]);
26112613
RpcSaslProto.Builder negotiateBuilder =

hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/SaslConstants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public class SaslConstants {
3232

3333
private static final String SASL_MECHANISM_ENV = "HADOOP_SASL_MECHANISM";
3434
public static final String SASL_MECHANISM;
35-
private static final String SASL_MECHANISM_DEFAULT = "DIGEST-MD5";
35+
public static final String SASL_MECHANISM_DEFAULT = "DIGEST-MD5";
3636

3737
static {
3838
final String mechanism = System.getenv(SASL_MECHANISM_ENV);

hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/SaslRpcClient.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import javax.security.auth.callback.PasswordCallback;
4040
import javax.security.auth.callback.UnsupportedCallbackException;
4141
import javax.security.auth.kerberos.KerberosPrincipal;
42+
import javax.security.sasl.AuthorizeCallback;
4243
import javax.security.sasl.RealmCallback;
4344
import javax.security.sasl.RealmChoiceCallback;
4445
import javax.security.sasl.Sasl;
@@ -681,9 +682,17 @@ public void handle(Callback[] callbacks)
681682
pc = (PasswordCallback) callback;
682683
} else if (callback instanceof RealmCallback) {
683684
rc = (RealmCallback) callback;
685+
} else if (callback instanceof AuthorizeCallback) {
686+
final AuthorizeCallback ac = (AuthorizeCallback) callback;
687+
final String authId = ac.getAuthenticationID();
688+
final String authzId = ac.getAuthorizationID();
689+
ac.setAuthorized(authId.equals(authzId));
690+
if (ac.isAuthorized()) {
691+
ac.setAuthorizedID(authzId);
692+
}
684693
} else {
685694
throw new UnsupportedCallbackException(callback,
686-
"Unrecognized SASL client callback");
695+
"Unrecognized SASL client callback " + callback.getClass());
687696
}
688697
}
689698
if (nc != null) {

0 commit comments

Comments
 (0)