public void initiate(final String mechanismName) { logger.trace("Initiating SASL exchange."); try { final ByteString responseData; final SaslClient saslClient = connection.getSaslClient(); if (saslClient.hasInitialResponse()) { responseData = ByteString.copyFrom(evaluateChallenge(ugi, saslClient, new byte[0])); } else { responseData = ByteString.EMPTY; } client.send(new AuthenticationOutcomeListener<>(client, connection, saslRpcType, ugi, completionListener), connection, saslRpcType, SaslMessage.newBuilder() .setMechanism(mechanismName) .setStatus(SaslStatus.SASL_START) .setData(responseData) .build(), SaslMessage.class, true /* the connection will not be backed up at this point */); logger.trace("Initiated SASL exchange."); } catch (final Exception e) { completionListener.failed(RpcException.mapException(e)); } }
context.sender.send(new Response(context.saslResponseType, challenge.build()));
public void mergeFrom(com.dyuproject.protostuff.Input input, org.apache.drill.exec.proto.UserBitShared.SaslMessage.Builder builder) throws java.io.IOException { for(int number = input.readFieldNumber(this);; number = input.readFieldNumber(this)) { switch(number) { case 0: return; case 1: builder.setMechanism(input.readString()); break; case 2: builder.setData(com.google.protobuf.ByteString.copyFrom(input.readByteArray())); break; case 3: builder.setStatus(org.apache.drill.exec.proto.UserBitShared.SaslStatus.valueOf(input.readEnum())); break; default: input.handleUnknownField(number, this); } } } public boolean isInitialized(org.apache.drill.exec.proto.UserBitShared.SaslMessage.Builder builder)
@Override public <S extends ServerConnection<S>, T extends EnumLite> void process(SaslResponseContext<S, T> context) throws Exception { // at this point, #isComplete must be false; so try once, fail otherwise final SaslServer saslServer = context.connection.getSaslServer(); evaluateResponse(saslServer, context.saslResponse.getData().toByteArray()); // discard challenge if (saslServer.isComplete()) { final SaslMessage.Builder challenge = SaslMessage.newBuilder(); challenge.setStatus(SaslStatus.SASL_SUCCESS); handleSuccess(context, challenge, saslServer); } else { final S connection = context.connection; logger.info("Failed to authenticate client from {} with encryption context:{}", connection.getRemoteAddress().toString(), connection.getEncryptionCtxtString()); throw new SaslException(String.format("Client allegedly succeeded authentication but server did not. " + "Suspicious? [Details: %s]", connection.getEncryptionCtxtString())); } } }
@Override public <S extends ServerConnection<S>, T extends EnumLite> void process(SaslResponseContext<S, T> context) throws Exception { final SaslMessage.Builder challenge = SaslMessage.newBuilder(); final SaslServer saslServer = context.connection.getSaslServer(); final byte[] challengeBytes = evaluateResponse(saslServer, context.saslResponse.getData().toByteArray()); if (saslServer.isComplete()) { challenge.setStatus(SaslStatus.SASL_SUCCESS); if (challengeBytes != null) { challenge.setData(ByteString.copyFrom(challengeBytes)); } handleSuccess(context, challenge, saslServer); } else { challenge.setStatus(SaslStatus.SASL_IN_PROGRESS) .setData(ByteString.copyFrom(challengeBytes)); context.sender.send(new Response(context.saslResponseType, challenge.build())); } } }
public Builder mergeFrom(org.apache.drill.exec.proto.UserBitShared.SaslMessage other) { if (other == org.apache.drill.exec.proto.UserBitShared.SaslMessage.getDefaultInstance()) return this; if (other.hasMechanism()) { bitField0_ |= 0x00000001; mechanism_ = other.mechanism_; onChanged(); } if (other.hasData()) { setData(other.getData()); } if (other.hasStatus()) { setStatus(other.getStatus()); } this.mergeUnknownFields(other.getUnknownFields()); return this; }
private Builder() { maybeForceBuilderInitialization(); }
public Builder clone() { return create().mergeFrom(buildPartial()); }
private static Builder create() { return new Builder(); }
public boolean isInitialized(org.apache.drill.exec.proto.UserBitShared.SaslMessage.Builder builder) { return builder.isInitialized(); } public org.apache.drill.exec.proto.UserBitShared.SaslMessage.Builder newMessage()
@java.lang.Override protected Builder newBuilderForType( com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } /**
private Builder( com.google.protobuf.GeneratedMessage.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() {
public org.apache.drill.exec.proto.UserBitShared.SaslMessage build() { org.apache.drill.exec.proto.UserBitShared.SaslMessage result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } return result; }
public void mergeFrom(com.dyuproject.protostuff.Input input, org.apache.drill.exec.proto.UserBitShared.SaslMessage.Builder builder) throws java.io.IOException { for(int number = input.readFieldNumber(this);; number = input.readFieldNumber(this)) { switch(number) { case 0: return; case 1: builder.setMechanism(input.readString()); break; case 2: builder.setData(com.google.protobuf.ByteString.copyFrom(input.readByteArray())); break; case 3: builder.setStatus(org.apache.drill.exec.proto.UserBitShared.SaslStatus.valueOf(input.readEnum())); break; default: input.handleUnknownField(number, this); } } } public boolean isInitialized(org.apache.drill.exec.proto.UserBitShared.SaslMessage.Builder builder)
public Builder mergeFrom(org.apache.drill.exec.proto.UserBitShared.SaslMessage other) { if (other == org.apache.drill.exec.proto.UserBitShared.SaslMessage.getDefaultInstance()) return this; if (other.hasMechanism()) { bitField0_ |= 0x00000001; mechanism_ = other.mechanism_; onChanged(); } if (other.hasData()) { setData(other.getData()); } if (other.hasStatus()) { setStatus(other.getStatus()); } this.mergeUnknownFields(other.getUnknownFields()); return this; }
private Builder() { maybeForceBuilderInitialization(); }
private static Builder create() { return new Builder(); }
public Builder clone() { return create().mergeFrom(buildPartial()); }
@Override public <CC extends ClientConnection> SaslMessage process(SaslChallengeContext<CC> context) throws Exception { final SaslMessage.Builder response = SaslMessage.newBuilder(); final SaslClient saslClient = context.connection.getSaslClient(); final byte[] responseBytes = evaluateChallenge(context.ugi, saslClient, context.challenge.getData().toByteArray()); final boolean isComplete = saslClient.isComplete(); logger.trace("Evaluated challenge. Completed? {}.", isComplete); response.setData(responseBytes != null ? ByteString.copyFrom(responseBytes) : ByteString.EMPTY); // if isComplete, the client will get one more response from server response.setStatus(isComplete ? SaslStatus.SASL_SUCCESS : SaslStatus.SASL_IN_PROGRESS); return response.build(); } }
public boolean isInitialized(org.apache.drill.exec.proto.UserBitShared.SaslMessage.Builder builder) { return builder.isInitialized(); } public org.apache.drill.exec.proto.UserBitShared.SaslMessage.Builder newMessage()