public class org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer extends java.lang.Object implements org.apache.zookeeper.server.quorum.auth.QuorumAuthServer
{
private static final org.slf4j.Logger LOG;
private static final int MAX_RETRIES;
private final org.apache.zookeeper.Login serverLogin;
private final boolean quorumRequireSasl;
public void <init>(boolean, java.lang.String, java.util.Set) throws javax.security.sasl.SaslException
{
java.lang.Throwable v;
javax.security.auth.login.LoginException v;
java.lang.Object[] v;
javax.security.sasl.SaslException v;
org.apache.zookeeper.Login v, v;
int v;
java.lang.String v, v;
javax.security.auth.login.Configuration v, v;
boolean v;
org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer v;
java.util.Set v;
org.apache.zookeeper.common.ZKConfig v;
javax.security.auth.login.AppConfigurationEntry[] v;
org.apache.zookeeper.server.quorum.auth.SaslQuorumServerCallbackHandler v;
v := @this: org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer;
v := @parameter: boolean;
v := @parameter: java.lang.String;
v := @parameter: java.util.Set;
specialinvoke v.<java.lang.Object: void <init>()>();
v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: boolean quorumRequireSasl> = v;
label:
v = staticinvoke <javax.security.auth.login.Configuration: javax.security.auth.login.Configuration getConfiguration()>();
v = virtualinvoke v.<javax.security.auth.login.Configuration: javax.security.auth.login.AppConfigurationEntry[] getAppConfigurationEntry(java.lang.String)>(v);
if v == null goto label;
v = lengthof v;
if v != 0 goto label;
label:
v = new javax.security.auth.login.LoginException;
v = newarray (java.lang.Object)[1];
v[0] = v;
v = staticinvoke <java.lang.String: java.lang.String format(java.lang.String,java.lang.Object[])>("SASL-authentication failed because the specified JAAS configuration section \'%s\' could not be found.", v);
specialinvoke v.<javax.security.auth.login.LoginException: void <init>(java.lang.String)>(v);
throw v;
label:
v = new org.apache.zookeeper.server.quorum.auth.SaslQuorumServerCallbackHandler;
v = staticinvoke <javax.security.auth.login.Configuration: javax.security.auth.login.Configuration getConfiguration()>();
specialinvoke v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumServerCallbackHandler: void <init>(javax.security.auth.login.Configuration,java.lang.String,java.util.Set)>(v, v, v);
v = new org.apache.zookeeper.Login;
v = new org.apache.zookeeper.common.ZKConfig;
specialinvoke v.<org.apache.zookeeper.common.ZKConfig: void <init>()>();
specialinvoke v.<org.apache.zookeeper.Login: void <init>(java.lang.String,javax.security.auth.callback.CallbackHandler,org.apache.zookeeper.common.ZKConfig)>(v, v, v);
v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.apache.zookeeper.Login serverLogin> = v;
v = v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.apache.zookeeper.Login serverLogin>;
virtualinvoke v.<org.apache.zookeeper.Login: void startThreadIfNeeded()>();
label:
goto label;
label:
v := @caughtexception;
v = new javax.security.sasl.SaslException;
specialinvoke v.<javax.security.sasl.SaslException: void <init>(java.lang.String,java.lang.Throwable)>("Failed to initialize authentication mechanism using SASL", v);
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
}
public void authenticate(java.net.Socket, java.io.DataInputStream) throws javax.security.sasl.SaslException
{
byte[] v, v, v;
java.net.SocketAddress v, v, v;
javax.security.sasl.SaslException v, v, v, v, v;
java.lang.Integer v;
org.apache.zookeeper.Login v, v;
javax.security.auth.callback.CallbackHandler v;
java.io.DataOutputStream v, v;
boolean v, v, v, v, v, v, v;
java.lang.Exception v;
org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status v, v, v, v;
java.lang.Throwable v;
java.io.DataInputStream v;
java.net.Socket v;
java.lang.Object[] v;
int v;
java.lang.Boolean v;
java.lang.String v, v;
java.io.OutputStream v;
org.slf4j.Logger v, v, v, v, v, v, v, v, v, v;
org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer v;
java.io.IOException v;
javax.security.auth.Subject v;
javax.security.sasl.SaslServer v;
v := @this: org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer;
v := @parameter: java.net.Socket;
v := @parameter: java.io.DataInputStream;
v = null;
v = null;
label:
v = staticinvoke <org.apache.zookeeper.server.quorum.auth.QuorumAuth: boolean nextPacketIsAuth(java.io.DataInputStream)>(v);
if v != 0 goto label;
v = v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: boolean quorumRequireSasl>;
if v == 0 goto label;
v = new javax.security.sasl.SaslException;
specialinvoke v.<javax.security.sasl.SaslException: void <init>(java.lang.String)>("Learner not trying to authenticate and authentication is required");
throw v;
label:
return;
label:
v = specialinvoke v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: byte[] receive(java.io.DataInputStream)>(v);
v = 0;
v = new java.io.DataOutputStream;
v = virtualinvoke v.<java.net.Socket: java.io.OutputStream getOutputStream()>();
specialinvoke v.<java.io.DataOutputStream: void <init>(java.io.OutputStream)>(v);
v = v;
v = null;
v = v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.apache.zookeeper.Login serverLogin>;
v = virtualinvoke v.<org.apache.zookeeper.Login: javax.security.auth.Subject getSubject()>();
v = v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.apache.zookeeper.Login serverLogin>;
v = v.<org.apache.zookeeper.Login: javax.security.auth.callback.CallbackHandler callbackHandler>;
v = <org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.slf4j.Logger LOG>;
v = staticinvoke <org.apache.zookeeper.util.SecurityUtils: javax.security.sasl.SaslServer createSaslServer(javax.security.auth.Subject,java.lang.String,java.lang.String,javax.security.auth.callback.CallbackHandler,org.slf4j.Logger)>(v, "zookeeper-quorum", "zk-quorum-sasl-md5", v, v);
label:
v = interfaceinvoke v.<javax.security.sasl.SaslServer: boolean isComplete()>();
if v != 0 goto label;
v = interfaceinvoke v.<javax.security.sasl.SaslServer: byte[] evaluateResponse(byte[])>(v);
v = interfaceinvoke v.<javax.security.sasl.SaslServer: boolean isComplete()>();
if v != 0 goto label;
v = v + 1;
if v <= 5 goto label;
v = <org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status: org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status ERROR>;
specialinvoke v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: void send(java.io.DataOutputStream,byte[],org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status)>(v, v, v);
v = <org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.slf4j.Logger LOG>;
v = virtualinvoke v.<java.net.Socket: java.net.SocketAddress getRemoteSocketAddress()>();
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
interfaceinvoke v.<org.slf4j.Logger: void warn(java.lang.String,java.lang.Object,java.lang.Object)>("Failed to authenticate using SASL, server addr: {}, retries={} exceeded.", v, v);
goto label;
label:
v = <org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status: org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status IN_PROGRESS>;
specialinvoke v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: void send(java.io.DataOutputStream,byte[],org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status)>(v, v, v);
v = specialinvoke v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: byte[] receive(java.io.DataInputStream)>(v);
goto label;
label:
v = interfaceinvoke v.<javax.security.sasl.SaslServer: boolean isComplete()>();
if v == 0 goto label;
v = <org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status: org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status SUCCESS>;
specialinvoke v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: void send(java.io.DataOutputStream,byte[],org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status)>(v, v, v);
v = <org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.slf4j.Logger LOG>;
v = virtualinvoke v.<java.net.Socket: java.net.SocketAddress getRemoteSocketAddress()>();
interfaceinvoke v.<org.slf4j.Logger: void info(java.lang.String,java.lang.Object)>("Successfully completed the authentication using SASL. learner addr: {}", v);
label:
interfaceinvoke v.<javax.security.sasl.SaslServer: void dispose()>();
label:
goto label;
label:
v := @caughtexception;
v = <org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void error(java.lang.String,java.lang.Throwable)>("SaslServer dispose() failed", v);
goto label;
label:
v := @caughtexception;
label:
if v == null goto label;
v = newarray (byte)[0];
v = <org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status: org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status ERROR>;
specialinvoke v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: void send(java.io.DataOutputStream,byte[],org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status)>(v, v, v);
label:
goto label;
label:
v := @caughtexception;
v = <org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void warn(java.lang.String,java.lang.Throwable)>("Exception while sending failed status", v);
label:
v = v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: boolean quorumRequireSasl>;
if v == 0 goto label;
v = <org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void error(java.lang.String,java.lang.Throwable)>("Failed to authenticate using SASL", v);
v = new javax.security.sasl.SaslException;
v = virtualinvoke v.<java.lang.Exception: java.lang.String getMessage()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Failed to authenticate using SASL: \u0001");
specialinvoke v.<javax.security.sasl.SaslException: void <init>(java.lang.String)>(v);
throw v;
label:
v = <org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void warn(java.lang.String,java.lang.Throwable)>("Failed to authenticate using SASL", v);
v = <org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.slf4j.Logger LOG>;
v = newarray (java.lang.Object)[3];
v = virtualinvoke v.<java.net.Socket: java.net.SocketAddress getRemoteSocketAddress()>();
v[0] = v;
v[1] = "quorum.auth.serverRequireSasl";
v = v.<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: boolean quorumRequireSasl>;
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(v);
v[2] = v;
interfaceinvoke v.<org.slf4j.Logger: void warn(java.lang.String,java.lang.Object[])>("Maintaining learner connection despite SASL authentication failure. server addr: {}, {}: {}", v);
label:
if v == null goto label;
label:
interfaceinvoke v.<javax.security.sasl.SaslServer: void dispose()>();
label:
goto label;
label:
v := @caughtexception;
v = <org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void error(java.lang.String,java.lang.Throwable)>("SaslServer dispose() failed", v);
goto label;
label:
v := @caughtexception;
if v == null goto label;
label:
interfaceinvoke v.<javax.security.sasl.SaslServer: void dispose()>();
label:
goto label;
label:
v := @caughtexception;
v = <org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void error(java.lang.String,java.lang.Throwable)>("SaslServer dispose() failed", v);
label:
throw v;
label:
return;
catch javax.security.sasl.SaslException from label to label with label;
catch java.lang.Exception from label to label with label;
catch java.lang.Exception from label to label with label;
catch java.io.IOException from label to label with label;
catch javax.security.sasl.SaslException from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
catch javax.security.sasl.SaslException from label to label with label;
}
private byte[] receive(java.io.DataInputStream) throws java.io.IOException
{
byte[] v;
java.io.DataInputStream v;
org.apache.zookeeper.server.quorum.QuorumAuthPacket v;
org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer v;
org.apache.jute.BinaryInputArchive v;
v := @this: org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer;
v := @parameter: java.io.DataInputStream;
v = new org.apache.zookeeper.server.quorum.QuorumAuthPacket;
specialinvoke v.<org.apache.zookeeper.server.quorum.QuorumAuthPacket: void <init>()>();
v = staticinvoke <org.apache.jute.BinaryInputArchive: org.apache.jute.BinaryInputArchive getArchive(java.io.InputStream)>(v);
virtualinvoke v.<org.apache.zookeeper.server.quorum.QuorumAuthPacket: void deserialize(org.apache.jute.InputArchive,java.lang.String)>(v, "qpconnect");
v = virtualinvoke v.<org.apache.zookeeper.server.quorum.QuorumAuthPacket: byte[] getToken()>();
return v;
}
private void send(java.io.DataOutputStream, byte[], org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status) throws java.io.IOException
{
byte[] v;
org.apache.jute.BinaryOutputArchive v;
org.apache.zookeeper.server.quorum.QuorumAuthPacket v;
org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer v;
java.io.BufferedOutputStream v;
org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status v, v, v;
java.io.DataOutputStream v;
v := @this: org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer;
v := @parameter: java.io.DataOutputStream;
v := @parameter: byte[];
v := @parameter: org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status;
v = new java.io.BufferedOutputStream;
specialinvoke v.<java.io.BufferedOutputStream: void <init>(java.io.OutputStream)>(v);
v = staticinvoke <org.apache.jute.BinaryOutputArchive: org.apache.jute.BinaryOutputArchive getArchive(java.io.OutputStream)>(v);
if v != null goto label;
v = <org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status: org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status SUCCESS>;
if v == v goto label;
v = <org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status: org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status IN_PROGRESS>;
v = staticinvoke <org.apache.zookeeper.server.quorum.auth.QuorumAuth: org.apache.zookeeper.server.quorum.QuorumAuthPacket createPacket(org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status,byte[])>(v, null);
goto label;
label:
v = staticinvoke <org.apache.zookeeper.server.quorum.auth.QuorumAuth: org.apache.zookeeper.server.quorum.QuorumAuthPacket createPacket(org.apache.zookeeper.server.quorum.auth.QuorumAuth$Status,byte[])>(v, v);
label:
virtualinvoke v.<org.apache.jute.BinaryOutputArchive: void writeRecord(org.apache.jute.Record,java.lang.String)>(v, "qpconnect");
virtualinvoke v.<java.io.BufferedOutputStream: void flush()>();
return;
}
static void <clinit>()
{
org.slf4j.Logger v;
v = staticinvoke <org.slf4j.LoggerFactory: org.slf4j.Logger getLogger(java.lang.Class)>(class "Lorg/apache/zookeeper/server/quorum/auth/SaslQuorumAuthServer;");
<org.apache.zookeeper.server.quorum.auth.SaslQuorumAuthServer: org.slf4j.Logger LOG> = v;
return;
}
}