public final class org.apache.zookeeper.util.SecurityUtils extends java.lang.Object
{
public static final java.lang.String QUORUM_HOSTNAME_PATTERN;
public void <init>()
{
org.apache.zookeeper.util.SecurityUtils v;
v := @this: org.apache.zookeeper.util.SecurityUtils;
specialinvoke v.<java.lang.Object: void <init>()>();
return;
}
public static javax.security.sasl.SaslClient createSaslClient(javax.security.auth.Subject, java.lang.String, java.lang.String, java.lang.String, org.slf4j.Logger, java.lang.String) throws javax.security.sasl.SaslException
{
javax.security.sasl.SaslClient v;
boolean v, v, v;
org.ietf.jgss.GSSCredential v;
org.ietf.jgss.Oid v;
java.util.Set v, v, v, v, v;
org.apache.zookeeper.SaslClientCallbackHandler v;
org.ietf.jgss.GSSException v;
java.lang.Exception v;
java.lang.Object[] v, v, v;
java.lang.String[] v;
org.apache.zookeeper.util.SecurityUtils$1 v;
org.apache.zookeeper.server.auth.KerberosName v, v;
java.lang.String v, v, v, v, v, v, v, v, v, v, v;
org.slf4j.Logger v;
javax.security.auth.Subject v;
org.ietf.jgss.GSSManager v;
java.lang.Object v, v, v, v;
v := @parameter: javax.security.auth.Subject;
v := @parameter: java.lang.String;
v := @parameter: java.lang.String;
v := @parameter: java.lang.String;
v := @parameter: org.slf4j.Logger;
v := @parameter: java.lang.String;
v = virtualinvoke v.<javax.security.auth.Subject: java.util.Set getPrincipals()>();
v = interfaceinvoke v.<java.util.Set: boolean isEmpty()>();
if v == 0 goto label;
interfaceinvoke v.<org.slf4j.Logger: void info(java.lang.String,java.lang.Object)>("{} will use DIGEST-MD5 as SASL mechanism.", v);
v = newarray (java.lang.String)[1];
v[0] = "DIGEST-MD5";
v = virtualinvoke v.<javax.security.auth.Subject: java.util.Set getPublicCredentials()>();
v = interfaceinvoke v.<java.util.Set: java.lang.Object[] toArray()>();
v = v[0];
v = virtualinvoke v.<javax.security.auth.Subject: java.util.Set getPrivateCredentials()>();
v = interfaceinvoke v.<java.util.Set: java.lang.Object[] toArray()>();
v = v[0];
v = new org.apache.zookeeper.SaslClientCallbackHandler;
specialinvoke v.<org.apache.zookeeper.SaslClientCallbackHandler: void <init>(java.lang.String,java.lang.String)>(v, v);
v = staticinvoke <javax.security.sasl.Sasl: javax.security.sasl.SaslClient createSaslClient(java.lang.String[],java.lang.String,java.lang.String,java.lang.String,java.util.Map,javax.security.auth.callback.CallbackHandler)>(v, v, v, v, null, v);
return v;
label:
v = virtualinvoke v.<javax.security.auth.Subject: java.util.Set getPrincipals()>();
v = interfaceinvoke v.<java.util.Set: java.lang.Object[] toArray()>();
v = v[0];
v = staticinvoke <java.lang.Boolean: boolean getBoolean(java.lang.String)>("sun.security.jgss.native");
if v == 0 goto label;
label:
v = staticinvoke <org.ietf.jgss.GSSManager: org.ietf.jgss.GSSManager getInstance()>();
v = new org.ietf.jgss.Oid;
specialinvoke v.<org.ietf.jgss.Oid: void <init>(java.lang.String)>("1.2.840.113554.1.2.2");
v = virtualinvoke v.<org.ietf.jgss.GSSManager: org.ietf.jgss.GSSCredential createCredential(org.ietf.jgss.GSSName,int,org.ietf.jgss.Oid,int)>(null, 0, v, 1);
v = virtualinvoke v.<javax.security.auth.Subject: java.util.Set getPrivateCredentials()>();
interfaceinvoke v.<java.util.Set: boolean add(java.lang.Object)>(v);
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object,java.lang.Object)>("Added private credential to {} principal name: \'{}\'", v, v);
label:
goto label;
label:
v := @caughtexception;
interfaceinvoke v.<org.slf4j.Logger: void warn(java.lang.String,java.lang.Throwable)>("Cannot add private credential to subject; authentication at the server may fail", v);
label:
v = new org.apache.zookeeper.server.auth.KerberosName;
v = interfaceinvoke v.<java.security.Principal: java.lang.String getName()>();
specialinvoke v.<org.apache.zookeeper.server.auth.KerberosName: void <init>(java.lang.String)>(v);
v = virtualinvoke v.<org.apache.zookeeper.server.auth.KerberosName: java.lang.String getRealm()>();
v = staticinvoke <java.lang.System: java.lang.String getProperty(java.lang.String,java.lang.String)>("zookeeper.server.realm", v);
v = v;
v = virtualinvoke v.<java.lang.String: boolean contains(java.lang.CharSequence)>("@");
if v != 0 goto label;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String,java.lang.String)>(v, 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[])>("\u0001@\u0001");
label:
v = new org.apache.zookeeper.server.auth.KerberosName;
specialinvoke v.<org.apache.zookeeper.server.auth.KerberosName: void <init>(java.lang.String)>(v);
v = virtualinvoke v.<org.apache.zookeeper.server.auth.KerberosName: java.lang.String getServiceName()>();
v = virtualinvoke v.<org.apache.zookeeper.server.auth.KerberosName: java.lang.String getHostName()>();
v = virtualinvoke v.<org.apache.zookeeper.server.auth.KerberosName: java.lang.String toString()>();
label:
v = new org.apache.zookeeper.util.SecurityUtils$1;
specialinvoke v.<org.apache.zookeeper.util.SecurityUtils$1: void <init>(org.slf4j.Logger,java.lang.String,java.lang.String,java.lang.String,java.lang.String)>(v, v, v, v, v);
v = staticinvoke <javax.security.auth.Subject: java.lang.Object doAs(javax.security.auth.Subject,java.security.PrivilegedExceptionAction)>(v, v);
label:
return v;
label:
v := @caughtexception;
interfaceinvoke v.<org.slf4j.Logger: void error(java.lang.String,java.lang.Throwable)>("Exception while trying to create SASL client", v);
return null;
catch org.ietf.jgss.GSSException from label to label with label;
catch java.lang.Exception from label to label with label;
}
public static javax.security.sasl.SaslServer createSaslServer(javax.security.auth.Subject, java.lang.String, java.lang.String, javax.security.auth.callback.CallbackHandler, org.slf4j.Logger)
{
java.lang.IndexOutOfBoundsException v;
javax.security.sasl.SaslException v;
javax.security.auth.callback.CallbackHandler v;
boolean v;
org.ietf.jgss.GSSCredential v;
org.ietf.jgss.Oid v, v;
java.util.Set v, v, v;
org.ietf.jgss.GSSException v;
java.lang.Object[] v;
org.apache.zookeeper.util.SecurityUtils$2 v;
int v, v, v, v;
java.lang.String v, v, v, v, v, v, v;
java.security.PrivilegedActionException v;
org.slf4j.Logger v;
javax.security.auth.Subject v;
org.ietf.jgss.GSSManager v;
java.lang.Object v, v;
org.ietf.jgss.GSSName v, v;
javax.security.sasl.SaslServer v;
v := @parameter: javax.security.auth.Subject;
v := @parameter: java.lang.String;
v := @parameter: java.lang.String;
v := @parameter: javax.security.auth.callback.CallbackHandler;
v := @parameter: org.slf4j.Logger;
if v == null goto label;
v = virtualinvoke v.<javax.security.auth.Subject: java.util.Set getPrincipals()>();
v = interfaceinvoke v.<java.util.Set: int size()>();
if v <= 0 goto label;
label:
v = virtualinvoke v.<javax.security.auth.Subject: java.util.Set getPrincipals()>();
v = interfaceinvoke v.<java.util.Set: java.lang.Object[] toArray()>();
v = v[0];
v = interfaceinvoke v.<java.security.Principal: java.lang.String getName()>();
v = virtualinvoke v.<java.lang.String: int indexOf(java.lang.String)>("/");
v = virtualinvoke v.<java.lang.String: java.lang.String substring(int,int)>(0, v);
v = v + 1;
v = virtualinvoke v.<java.lang.String: java.lang.String substring(int)>(v);
v = virtualinvoke v.<java.lang.String: int indexOf(java.lang.String)>("@");
v = virtualinvoke v.<java.lang.String: java.lang.String substring(int,int)>(0, v);
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object)>("serviceHostname is \'{}\'", v);
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object)>("servicePrincipalName is \'{}\'", v);
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object)>("SASL mechanism(mech) is \'{}\'", "GSSAPI");
v = staticinvoke <java.lang.Boolean: boolean getBoolean(java.lang.String)>("sun.security.jgss.native");
if v == 0 goto label;
label:
v = staticinvoke <org.ietf.jgss.GSSManager: org.ietf.jgss.GSSManager getInstance()>();
v = new org.ietf.jgss.Oid;
specialinvoke v.<org.ietf.jgss.Oid: void <init>(java.lang.String)>("1.2.840.113554.1.2.2");
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String,java.lang.String)>(v, 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[])>("\u0001@\u0001");
v = <org.ietf.jgss.GSSName: org.ietf.jgss.Oid NT_HOSTBASED_SERVICE>;
v = virtualinvoke v.<org.ietf.jgss.GSSManager: org.ietf.jgss.GSSName createName(java.lang.String,org.ietf.jgss.Oid)>(v, v);
v = virtualinvoke v.<org.ietf.jgss.GSSManager: org.ietf.jgss.GSSCredential createCredential(org.ietf.jgss.GSSName,int,org.ietf.jgss.Oid,int)>(v, 0, v, 2);
v = virtualinvoke v.<javax.security.auth.Subject: java.util.Set getPrivateCredentials()>();
interfaceinvoke v.<java.util.Set: boolean add(java.lang.Object)>(v);
v = interfaceinvoke v.<org.ietf.jgss.GSSCredential: org.ietf.jgss.GSSName getName()>();
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object,java.lang.Object)>("Added private credential to service principal name: \'{}\', GSSCredential name: {}", v, v);
label:
goto label;
label:
v := @caughtexception;
interfaceinvoke v.<org.slf4j.Logger: void warn(java.lang.String,java.lang.Throwable)>("Cannot add private credential to subject; clients authentication may fail", v);
label:
v = new org.apache.zookeeper.util.SecurityUtils$2;
specialinvoke v.<org.apache.zookeeper.util.SecurityUtils$2: void <init>(java.lang.String,java.lang.String,javax.security.auth.callback.CallbackHandler,org.slf4j.Logger)>(v, v, v, v);
v = staticinvoke <javax.security.auth.Subject: java.lang.Object doAs(javax.security.auth.Subject,java.security.PrivilegedExceptionAction)>(v, v);
label:
return v;
label:
v := @caughtexception;
interfaceinvoke v.<org.slf4j.Logger: void error(java.lang.String,java.lang.Throwable)>("Zookeeper Quorum member experienced a PrivilegedActionException exception while creating a SaslServer using a JAAS principal context", v);
label:
goto label;
label:
v := @caughtexception;
interfaceinvoke v.<org.slf4j.Logger: void error(java.lang.String,java.lang.Throwable)>("server principal name/hostname determination error", v);
goto label;
label:
v = staticinvoke <javax.security.sasl.Sasl: javax.security.sasl.SaslServer createSaslServer(java.lang.String,java.lang.String,java.lang.String,java.util.Map,javax.security.auth.callback.CallbackHandler)>("DIGEST-MD5", v, v, null, v);
label:
return v;
label:
v := @caughtexception;
interfaceinvoke v.<org.slf4j.Logger: void error(java.lang.String,java.lang.Throwable)>("Zookeeper Quorum member failed to create a SaslServer to interact with a client during session initiation", v);
label:
return null;
catch org.ietf.jgss.GSSException from label to label with label;
catch java.security.PrivilegedActionException from label to label with label;
catch java.lang.IndexOutOfBoundsException from label to label with label;
catch java.lang.IndexOutOfBoundsException from label to label with label;
catch javax.security.sasl.SaslException from label to label with label;
}
public static java.lang.String getServerPrincipal(java.lang.String, java.lang.String)
{
int v;
java.lang.String[] v;
java.lang.String v, v, v, v;
boolean v;
v := @parameter: java.lang.String;
v := @parameter: java.lang.String;
v = staticinvoke <org.apache.zookeeper.util.SecurityUtils: java.lang.String[] getComponents(java.lang.String)>(v);
if v == null goto label;
v = lengthof v;
if v != 2 goto label;
v = v[1];
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("_HOST");
if v != 0 goto label;
label:
return v;
label:
v = staticinvoke <org.apache.zookeeper.util.SecurityUtils: java.lang.String replacePattern(java.lang.String[],java.lang.String)>(v, v);
return v;
}
private static java.lang.String[] getComponents(java.lang.String)
{
java.lang.String[] v;
java.lang.String v;
v := @parameter: java.lang.String;
if v != null goto label;
return null;
label:
v = virtualinvoke v.<java.lang.String: java.lang.String[] split(java.lang.String)>("[/]");
return v;
}
private static java.lang.String replacePattern(java.lang.String[], java.lang.String)
{
java.lang.String[] v;
java.lang.String v, v, v, v;
v := @parameter: java.lang.String[];
v := @parameter: java.lang.String;
v = v[0];
v = virtualinvoke v.<java.lang.String: java.lang.String toLowerCase()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String,java.lang.String)>(v, 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[])>("\u0001/\u0001");
return v;
}
}