65 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
		
		
			
		
	
	
			65 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
|  | --- a/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/Config.java	2023-04-01 12:03:26.147543172 +0200
 | ||
|  | +++ b/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/Config.java	2023-04-01 12:03:45.455660866 +0200
 | ||
|  | @@ -52,6 +52,7 @@
 | ||
|  |      static final int ERR_HALT       = 1; | ||
|  |      static final int ERR_IGNORE_ALL = 2; | ||
|  |      static final int ERR_IGNORE_LIB = 3; | ||
|  | +    static final int ERR_IGNORE_MULTI_INIT = 4;
 | ||
|  |   | ||
|  |      // same as allowSingleThreadedModules but controlled via a system property | ||
|  |      // and applied to all providers. if set to false, no SunPKCS11 instances | ||
|  | @@ -1037,6 +1038,7 @@
 | ||
|  |          handleStartupErrors = switch (val) { | ||
|  |              case "ignoreAll" -> ERR_IGNORE_ALL; | ||
|  |              case "ignoreMissingLibrary" -> ERR_IGNORE_LIB; | ||
|  | +            case "ignoreMultipleInitialisation" -> ERR_IGNORE_MULTI_INIT;
 | ||
|  |              case "halt" -> ERR_HALT; | ||
|  |              default -> throw excToken("Invalid value for handleStartupErrors:"); | ||
|  |          }; | ||
|  | --- a/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SunPKCS11.java	2023-04-01 12:03:26.147543172 +0200
 | ||
|  | +++ b/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SunPKCS11.java	2023-04-01 12:07:19.664979695 +0200
 | ||
|  | @@ -184,26 +184,37 @@
 | ||
|  |                  String nssLibraryDirectory = config.getNssLibraryDirectory(); | ||
|  |                  String nssSecmodDirectory = config.getNssSecmodDirectory(); | ||
|  |                  boolean nssOptimizeSpace = config.getNssOptimizeSpace(); | ||
|  | +                int errorHandling = config.getHandleStartupErrors();
 | ||
|  |   | ||
|  |                  if (secmod.isInitialized()) { | ||
|  |                      if (nssSecmodDirectory != null) { | ||
|  |                          String s = secmod.getConfigDir(); | ||
|  |                          if ((s != null) && | ||
|  |                                  (!s.equals(nssSecmodDirectory))) { | ||
|  | -                            throw new ProviderException("Secmod directory "
 | ||
|  | -                                + nssSecmodDirectory
 | ||
|  | -                                + " invalid, NSS already initialized with "
 | ||
|  | -                                + s);
 | ||
|  | +                            String msg = "Secmod directory " + nssSecmodDirectory
 | ||
|  | +                                + " invalid, NSS already initialized with " + s;
 | ||
|  | +                            if (errorHandling == Config.ERR_IGNORE_MULTI_INIT ||
 | ||
|  | +                                errorHandling == Config.ERR_IGNORE_ALL) {
 | ||
|  | +                                throw new UnsupportedOperationException(msg);
 | ||
|  | +                            } else {
 | ||
|  | +                                throw new ProviderException(msg);
 | ||
|  | +                            }
 | ||
|  |                          } | ||
|  |                      } | ||
|  |                      if (nssLibraryDirectory != null) { | ||
|  |                          String s = secmod.getLibDir(); | ||
|  |                          if ((s != null) && | ||
|  |                                  (!s.equals(nssLibraryDirectory))) { | ||
|  | -                            throw new ProviderException("NSS library directory "
 | ||
|  | +                            String msg = "NSS library directory "
 | ||
|  |                                  + nssLibraryDirectory | ||
|  |                                  + " invalid, NSS already initialized with " | ||
|  | -                                + s);
 | ||
|  | +                                + s;
 | ||
|  | +                            if (errorHandling == Config.ERR_IGNORE_MULTI_INIT ||
 | ||
|  | +                                errorHandling == Config.ERR_IGNORE_ALL) {
 | ||
|  | +                                throw new UnsupportedOperationException(msg);
 | ||
|  | +                            } else {
 | ||
|  | +                                throw new ProviderException(msg);
 | ||
|  | +                            }
 | ||
|  |                          } | ||
|  |                      } | ||
|  |                  } else { |