1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.security;
19
20 import io.netty.channel.ChannelPipeline;
21 import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
22
23 import java.io.IOException;
24
25 import javax.security.sasl.Sasl;
26
27 import org.apache.commons.logging.Log;
28 import org.apache.commons.logging.LogFactory;
29 import org.apache.hadoop.hbase.classification.InterfaceAudience;
30 import org.apache.hadoop.security.token.Token;
31 import org.apache.hadoop.security.token.TokenIdentifier;
32
33
34
35
36 @InterfaceAudience.Private
37 public class NettyHBaseSaslRpcClient extends AbstractHBaseSaslRpcClient {
38 private static final Log LOG = LogFactory.getLog(NettyHBaseSaslRpcClient.class);
39
40 public NettyHBaseSaslRpcClient(AuthMethod method, Token<? extends TokenIdentifier> token,
41 String serverPrincipal, boolean fallbackAllowed, String rpcProtection) throws IOException {
42 super(method, token, serverPrincipal, fallbackAllowed, rpcProtection);
43 }
44
45 public void setupSaslHandler(ChannelPipeline p) {
46 String qop = (String) saslClient.getNegotiatedProperty(Sasl.QOP);
47 LOG.trace("SASL client context established. Negotiated QoP " + qop);
48 if (qop == null || "auth".equalsIgnoreCase(qop)) {
49 return;
50 }
51
52 p.addFirst(new SaslWrapHandler(saslClient),
53 new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 4, 0, 4),
54 new SaslUnwrapHandler(saslClient));
55 }
56 }