Blame SOURCES/rh1996182-login_to_nss_software_token.patch

d1af5a
commit 93c9f6330bf2b4405c789bf893a5256c3f4a4923
d1af5a
Author: Martin Balao <mbalao@redhat.com>
d1af5a
Date:   Sat Aug 28 00:35:44 2021 +0100
d1af5a
d1af5a
    RH1996182: Login to the NSS Software Token in FIPS Mode
d1af5a
d1af5a
diff --git openjdk.orig/src/java.base/share/classes/module-info.java openjdk/src/java.base/share/classes/module-info.java
cd3eca
index 238735c0c8c..dbbf11bbb22 100644
d1af5a
--- openjdk.orig/src/java.base/share/classes/module-info.java
d1af5a
+++ openjdk/src/java.base/share/classes/module-info.java
cd3eca
@@ -152,6 +152,7 @@ module java.base {
d1af5a
         java.naming,
d1af5a
         java.rmi,
cd3eca
         jdk.charsets,
d1af5a
+        jdk.crypto.cryptoki,
d1af5a
         jdk.crypto.ec,
d1af5a
         jdk.jartool,
d1af5a
         jdk.jlink,
d1af5a
diff --git openjdk.orig/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SunPKCS11.java openjdk/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SunPKCS11.java
d1af5a
index 112b639aa96..5d3963ea893 100644
d1af5a
--- openjdk.orig/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SunPKCS11.java
d1af5a
+++ openjdk/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SunPKCS11.java
d1af5a
@@ -42,6 +42,7 @@ import javax.security.auth.callback.PasswordCallback;
d1af5a
 
d1af5a
 import com.sun.crypto.provider.ChaCha20Poly1305Parameters;
d1af5a
 
d1af5a
+import jdk.internal.access.SharedSecrets;
d1af5a
 import jdk.internal.misc.InnocuousThread;
d1af5a
 import sun.security.util.Debug;
d1af5a
 import sun.security.util.ResourcesMgr;
d1af5a
@@ -62,6 +63,9 @@ import static sun.security.pkcs11.wrapper.PKCS11Exception.*;
d1af5a
  */
d1af5a
 public final class SunPKCS11 extends AuthProvider {
d1af5a
 
d1af5a
+    private static final boolean systemFipsEnabled = SharedSecrets
d1af5a
+            .getJavaSecuritySystemConfiguratorAccess().isSystemFipsEnabled();
d1af5a
+
d1af5a
     private static final long serialVersionUID = -1354835039035306505L;
d1af5a
 
d1af5a
     static final Debug debug = Debug.getInstance("sunpkcs11");
d1af5a
@@ -379,6 +383,24 @@ public final class SunPKCS11 extends AuthProvider {
d1af5a
             if (nssModule != null) {
d1af5a
                 nssModule.setProvider(this);
d1af5a
             }
d1af5a
+            if (systemFipsEnabled) {
d1af5a
+                // The NSS Software Token in FIPS 140-2 mode requires a user
d1af5a
+                // login for most operations. See sftk_fipsCheck. The NSS DB
d1af5a
+                // (/etc/pki/nssdb) PIN is empty.
d1af5a
+                Session session = null;
d1af5a
+                try {
d1af5a
+                    session = token.getOpSession();
d1af5a
+                    p11.C_Login(session.id(), CKU_USER, new char[] {});
d1af5a
+                } catch (PKCS11Exception p11e) {
d1af5a
+                    if (debug != null) {
d1af5a
+                        debug.println("Error during token login: " +
d1af5a
+                                p11e.getMessage());
d1af5a
+                    }
d1af5a
+                    throw p11e;
d1af5a
+                } finally {
d1af5a
+                    token.releaseSession(session);
d1af5a
+                }
d1af5a
+            }
d1af5a
         } catch (Exception e) {
d1af5a
             if (config.getHandleStartupErrors() == Config.ERR_IGNORE_ALL) {
d1af5a
                 throw new UnsupportedOperationException