class com.mongodb.internal.connection.GSSAPIAuthenticator extends com.mongodb.internal.connection.SaslAuthenticator
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: com.mongodb.internal.connection.GSSAPIAuthenticator
  super_class: com.mongodb.internal.connection.SaslAuthenticator
{
  private static final java.lang.String GSSAPI_MECHANISM_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "GSSAPI"

  private static final java.lang.String GSSAPI_OID;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "1.2.840.113554.1.2.2"

  private static final java.lang.String SERVICE_NAME_DEFAULT_VALUE;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "mongodb"

  private static final java.lang.Boolean CANONICALIZE_HOST_NAME_DEFAULT_VALUE;
    descriptor: Ljava/lang/Boolean;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 46
            iconst_0
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            putstatic com.mongodb.internal.connection.GSSAPIAuthenticator.CANONICALIZE_HOST_NAME_DEFAULT_VALUE:Ljava/lang/Boolean;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(com.mongodb.internal.connection.MongoCredentialWithCache);
    descriptor: (Lcom/mongodb/internal/connection/MongoCredentialWithCache;)V
    flags: (0x0000) 
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // com.mongodb.internal.connection.GSSAPIAuthenticator this
        start local 1 // com.mongodb.internal.connection.MongoCredentialWithCache credential
         0: .line 49
            aload 0 /* this */
            aload 1 /* credential */
            invokespecial com.mongodb.internal.connection.SaslAuthenticator.<init>:(Lcom/mongodb/internal/connection/MongoCredentialWithCache;)V
         1: .line 51
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.GSSAPIAuthenticator.getMongoCredential:()Lcom/mongodb/MongoCredential;
            invokevirtual com.mongodb.MongoCredential.getAuthenticationMechanism:()Lcom/mongodb/AuthenticationMechanism;
            getstatic com.mongodb.AuthenticationMechanism.GSSAPI:Lcom/mongodb/AuthenticationMechanism;
            if_acmpeq 3
         2: .line 52
            new com.mongodb.MongoException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Incorrect mechanism: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.GSSAPIAuthenticator.getMongoCredential:()Lcom/mongodb/MongoCredential;
            invokevirtual com.mongodb.MongoCredential.getMechanism:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial com.mongodb.MongoException.<init>:(Ljava/lang/String;)V
            athrow
         3: .line 54
      StackMap locals: com.mongodb.internal.connection.GSSAPIAuthenticator com.mongodb.internal.connection.MongoCredentialWithCache
      StackMap stack:
            return
        end local 1 // com.mongodb.internal.connection.MongoCredentialWithCache credential
        end local 0 // com.mongodb.internal.connection.GSSAPIAuthenticator this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lcom/mongodb/internal/connection/GSSAPIAuthenticator;
            0    4     1  credential  Lcom/mongodb/internal/connection/MongoCredentialWithCache;
    MethodParameters:
            Name  Flags
      credential  final

  public java.lang.String getMechanismName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.connection.GSSAPIAuthenticator this
         0: .line 58
            ldc "GSSAPI"
            areturn
        end local 0 // com.mongodb.internal.connection.GSSAPIAuthenticator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/connection/GSSAPIAuthenticator;

  protected javax.security.sasl.SaslClient createSaslClient(com.mongodb.ServerAddress);
    descriptor: (Lcom/mongodb/ServerAddress;)Ljavax/security/sasl/SaslClient;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=8, locals=5, args_size=2
        start local 0 // com.mongodb.internal.connection.GSSAPIAuthenticator this
        start local 1 // com.mongodb.ServerAddress serverAddress
         0: .line 63
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.GSSAPIAuthenticator.getMongoCredential:()Lcom/mongodb/MongoCredential;
            astore 2 /* credential */
        start local 2 // com.mongodb.MongoCredential credential
         1: .line 65
            aload 2 /* credential */
            ldc "JAVA_SASL_CLIENT_PROPERTIES"
            aconst_null
            invokevirtual com.mongodb.MongoCredential.getMechanismProperty:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 3 /* saslClientProperties */
        start local 3 // java.util.Map saslClientProperties
         2: .line 66
            aload 3 /* saslClientProperties */
            ifnonnull 6
         3: .line 67
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 3 /* saslClientProperties */
         4: .line 68
            aload 3 /* saslClientProperties */
            ldc "javax.security.sasl.maxbuffer"
            ldc "0"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         5: .line 69
            aload 3 /* saslClientProperties */
            ldc "javax.security.sasl.credentials"
            aload 0 /* this */
            aload 2 /* credential */
            invokevirtual com.mongodb.MongoCredential.getUserName:()Ljava/lang/String;
            invokevirtual com.mongodb.internal.connection.GSSAPIAuthenticator.getGSSCredential:(Ljava/lang/String;)Lorg/ietf/jgss/GSSCredential;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         6: .line 72
      StackMap locals: com.mongodb.MongoCredential java.util.Map
      StackMap stack:
            iconst_1
            anewarray java.lang.String
            dup
            iconst_0
            getstatic com.mongodb.AuthenticationMechanism.GSSAPI:Lcom/mongodb/AuthenticationMechanism;
            invokevirtual com.mongodb.AuthenticationMechanism.getMechanismName:()Ljava/lang/String;
            aastore
            aload 2 /* credential */
            invokevirtual com.mongodb.MongoCredential.getUserName:()Ljava/lang/String;
         7: .line 73
            aload 2 /* credential */
            ldc "SERVICE_NAME"
            ldc "mongodb"
            invokevirtual com.mongodb.MongoCredential.getMechanismProperty:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
         8: .line 74
            aload 0 /* this */
            aload 1 /* serverAddress */
            invokevirtual com.mongodb.internal.connection.GSSAPIAuthenticator.getHostName:(Lcom/mongodb/ServerAddress;)Ljava/lang/String;
            aload 3 /* saslClientProperties */
            aconst_null
         9: .line 72
            invokestatic javax.security.sasl.Sasl.createSaslClient:([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljavax/security/auth/callback/CallbackHandler;)Ljavax/security/sasl/SaslClient;
            astore 4 /* saslClient */
        start local 4 // javax.security.sasl.SaslClient saslClient
        10: .line 75
            aload 4 /* saslClient */
            ifnonnull 12
        11: .line 76
            new com.mongodb.MongoSecurityException
            dup
            aload 2 /* credential */
            ldc "No platform support for %s mechanism"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            getstatic com.mongodb.AuthenticationMechanism.GSSAPI:Lcom/mongodb/AuthenticationMechanism;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial com.mongodb.MongoSecurityException.<init>:(Lcom/mongodb/MongoCredential;Ljava/lang/String;)V
            athrow
        12: .line 79
      StackMap locals: javax.security.sasl.SaslClient
      StackMap stack:
            aload 4 /* saslClient */
        13: areturn
        end local 4 // javax.security.sasl.SaslClient saslClient
        end local 3 // java.util.Map saslClientProperties
        14: .line 80
      StackMap locals: com.mongodb.internal.connection.GSSAPIAuthenticator com.mongodb.ServerAddress com.mongodb.MongoCredential
      StackMap stack: javax.security.sasl.SaslException
            astore 3 /* e */
        start local 3 // javax.security.sasl.SaslException e
        15: .line 81
            new com.mongodb.MongoSecurityException
            dup
            aload 2 /* credential */
            ldc "Exception initializing SASL client"
            aload 3 /* e */
            invokespecial com.mongodb.MongoSecurityException.<init>:(Lcom/mongodb/MongoCredential;Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // javax.security.sasl.SaslException e
        16: .line 82
      StackMap locals:
      StackMap stack: org.ietf.jgss.GSSException
            astore 3 /* e */
        start local 3 // org.ietf.jgss.GSSException e
        17: .line 83
            new com.mongodb.MongoSecurityException
            dup
            aload 2 /* credential */
            ldc "Exception initializing GSSAPI credentials"
            aload 3 /* e */
            invokespecial com.mongodb.MongoSecurityException.<init>:(Lcom/mongodb/MongoCredential;Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // org.ietf.jgss.GSSException e
        18: .line 84
      StackMap locals:
      StackMap stack: java.net.UnknownHostException
            pop
        19: .line 85
            new com.mongodb.MongoSecurityException
            dup
            aload 2 /* credential */
            new java.lang.StringBuilder
            dup
            ldc "Unable to canonicalize host name + "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* serverAddress */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial com.mongodb.MongoSecurityException.<init>:(Lcom/mongodb/MongoCredential;Ljava/lang/String;)V
            athrow
        end local 2 // com.mongodb.MongoCredential credential
        end local 1 // com.mongodb.ServerAddress serverAddress
        end local 0 // com.mongodb.internal.connection.GSSAPIAuthenticator this
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0   20     0                  this  Lcom/mongodb/internal/connection/GSSAPIAuthenticator;
            0   20     1         serverAddress  Lcom/mongodb/ServerAddress;
            1   20     2            credential  Lcom/mongodb/MongoCredential;
            2   14     3  saslClientProperties  Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;
           10   14     4            saslClient  Ljavax/security/sasl/SaslClient;
           15   16     3                     e  Ljavax/security/sasl/SaslException;
           17   18     3                     e  Lorg/ietf/jgss/GSSException;
      Exception table:
        from    to  target  type
           1    13      14  Class javax.security.sasl.SaslException
           1    13      16  Class org.ietf.jgss.GSSException
           1    13      18  Class java.net.UnknownHostException
    MethodParameters:
               Name  Flags
      serverAddress  final

  private org.ietf.jgss.GSSCredential getGSSCredential(java.lang.String);
    descriptor: (Ljava/lang/String;)Lorg/ietf/jgss/GSSCredential;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // com.mongodb.internal.connection.GSSAPIAuthenticator this
        start local 1 // java.lang.String userName
         0: .line 90
            new org.ietf.jgss.Oid
            dup
            ldc "1.2.840.113554.1.2.2"
            invokespecial org.ietf.jgss.Oid.<init>:(Ljava/lang/String;)V
            astore 2 /* krb5Mechanism */
        start local 2 // org.ietf.jgss.Oid krb5Mechanism
         1: .line 91
            invokestatic org.ietf.jgss.GSSManager.getInstance:()Lorg/ietf/jgss/GSSManager;
            astore 3 /* manager */
        start local 3 // org.ietf.jgss.GSSManager manager
         2: .line 92
            aload 3 /* manager */
            aload 1 /* userName */
            getstatic org.ietf.jgss.GSSName.NT_USER_NAME:Lorg/ietf/jgss/Oid;
            invokevirtual org.ietf.jgss.GSSManager.createName:(Ljava/lang/String;Lorg/ietf/jgss/Oid;)Lorg/ietf/jgss/GSSName;
            astore 4 /* name */
        start local 4 // org.ietf.jgss.GSSName name
         3: .line 93
            aload 3 /* manager */
            aload 4 /* name */
            ldc 2147483647
            aload 2 /* krb5Mechanism */
            iconst_1
            invokevirtual org.ietf.jgss.GSSManager.createCredential:(Lorg/ietf/jgss/GSSName;ILorg/ietf/jgss/Oid;I)Lorg/ietf/jgss/GSSCredential;
            areturn
        end local 4 // org.ietf.jgss.GSSName name
        end local 3 // org.ietf.jgss.GSSManager manager
        end local 2 // org.ietf.jgss.Oid krb5Mechanism
        end local 1 // java.lang.String userName
        end local 0 // com.mongodb.internal.connection.GSSAPIAuthenticator this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    4     0           this  Lcom/mongodb/internal/connection/GSSAPIAuthenticator;
            0    4     1       userName  Ljava/lang/String;
            1    4     2  krb5Mechanism  Lorg/ietf/jgss/Oid;
            2    4     3        manager  Lorg/ietf/jgss/GSSManager;
            3    4     4           name  Lorg/ietf/jgss/GSSName;
    Exceptions:
      throws org.ietf.jgss.GSSException
    MethodParameters:
          Name  Flags
      userName  final

  private java.lang.String getHostName(com.mongodb.ServerAddress);
    descriptor: (Lcom/mongodb/ServerAddress;)Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.mongodb.internal.connection.GSSAPIAuthenticator this
        start local 1 // com.mongodb.ServerAddress serverAddress
         0: .line 97
            aload 0 /* this */
            ldc "CANONICALIZE_HOST_NAME"
            getstatic com.mongodb.internal.connection.GSSAPIAuthenticator.CANONICALIZE_HOST_NAME_DEFAULT_VALUE:Ljava/lang/Boolean;
            invokevirtual com.mongodb.internal.connection.GSSAPIAuthenticator.getNonNullMechanismProperty:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.Boolean
            invokevirtual java.lang.Boolean.booleanValue:()Z
            ifeq 2
         1: .line 98
            aload 1 /* serverAddress */
            invokevirtual com.mongodb.ServerAddress.getHost:()Ljava/lang/String;
            invokestatic java.net.InetAddress.getByName:(Ljava/lang/String;)Ljava/net/InetAddress;
            invokevirtual java.net.InetAddress.getCanonicalHostName:()Ljava/lang/String;
            goto 3
         2: .line 99
      StackMap locals:
      StackMap stack:
            aload 1 /* serverAddress */
            invokevirtual com.mongodb.ServerAddress.getHost:()Ljava/lang/String;
         3: .line 97
      StackMap locals:
      StackMap stack: java.lang.String
            areturn
        end local 1 // com.mongodb.ServerAddress serverAddress
        end local 0 // com.mongodb.internal.connection.GSSAPIAuthenticator this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    4     0           this  Lcom/mongodb/internal/connection/GSSAPIAuthenticator;
            0    4     1  serverAddress  Lcom/mongodb/ServerAddress;
    Exceptions:
      throws java.net.UnknownHostException
    MethodParameters:
               Name  Flags
      serverAddress  final
}
SourceFile: "GSSAPIAuthenticator.java"