From defa21dca72379bb2b31b12d115cea5c8e8b7347 Mon Sep 17 00:00:00 2001
From: Muskan Gupta <muskgupta@microsoft.com>
Date: Thu, 23 Jan 2025 12:19:02 +0530
Subject: [PATCH] Logic to add config for loginContext(if-else)

---
 .../sqlserver/jdbc/KerbAuthentication.java    |  8 +------
 .../sqlserver/jdbc/KerberosTest.java          | 23 +++++++++++++++++++
 2 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/KerbAuthentication.java b/src/main/java/com/microsoft/sqlserver/jdbc/KerbAuthentication.java
index d02238196..a17f99931 100644
--- a/src/main/java/com/microsoft/sqlserver/jdbc/KerbAuthentication.java
+++ b/src/main/java/com/microsoft/sqlserver/jdbc/KerbAuthentication.java
@@ -42,12 +42,6 @@ final class KerbAuthentication extends SSPIAuthentication {
     private boolean useDefaultNativeGSSCredential = false;
     private GSSContext peerContext = null;
 
-    static {
-        // Overrides the default JAAS configuration loader.
-        // This one will forward to the default one in all cases but the default configuration is empty.
-        Configuration.setConfiguration(new JaasConfiguration(Configuration.getConfiguration()));
-    }
-
     /**
      * Initializes the Kerberos client security context
      * 
@@ -114,7 +108,7 @@ private void initAuthInit() throws SQLServerException {
 
                     if (null == currentSubject) {
                         if (useDefaultJaas) {
-                            lc = new LoginContext(configName, null, callback, new JaasConfiguration(null));
+                            lc = new LoginContext(configName, null, callback, new JaasConfiguration(Configuration.getConfiguration()));
                         } else {
                             lc = new LoginContext(configName, callback);
                         }
diff --git a/src/test/java/com/microsoft/sqlserver/jdbc/KerberosTest.java b/src/test/java/com/microsoft/sqlserver/jdbc/KerberosTest.java
index 47f0a9252..0c5a781a1 100644
--- a/src/test/java/com/microsoft/sqlserver/jdbc/KerberosTest.java
+++ b/src/test/java/com/microsoft/sqlserver/jdbc/KerberosTest.java
@@ -26,9 +26,32 @@ public class KerberosTest extends AbstractTest {
 
     @BeforeAll
     public static void setupTests() throws Exception {
+        setJaasConfiguration();
         setConnection();
     }
 
+    private static void setJaasConfiguration() {
+        AppConfigurationEntry[] entries = new AppConfigurationEntry[]{
+            new AppConfigurationEntry(
+                "com.sun.security.auth.module.Krb5LoginModule",
+                AppConfigurationEntry.LoginModuleControlFlag.REQUIRED,
+                new HashMap<String, Object>() {{
+                    put("useTicketCache", "true");
+                    put("renewTGT", "true");
+                }}
+            )
+        };
+        Configuration.setConfiguration(new Configuration() {
+            @Override
+            public AppConfigurationEntry[] getAppConfigurationEntry(String name) {
+                if ("SQLJDBCDriver".equals(name)) {
+                    return entries;
+                }
+                return null;
+            }
+        });
+    }
+
     @Test
     public void testUseDefaultJaasConfigConnectionStringPropertyTrue() throws Exception {
         String connectionStringUseDefaultJaasConfig = connectionStringKerberos + ";useDefaultJaasConfig=true;";