# HG changeset patch # User andrew # Date 1352129932 0 # Node ID e9c857dcb964dbfa5eef3a3590244cb4d999cf7a # Parent 1406789608b76d0906881979335d685855f44190 Allow multiple PKCS11 library initialisation to be a non-critical error. diff -r 1406789608b7 -r e9c857dcb964 src/share/classes/sun/security/pkcs11/Config.java --- jdk8/jdk/src/share/classes/sun/security/pkcs11/Config.java Tue Oct 30 13:05:14 2012 +0000 +++ jdk8/jdk/src/share/classes/sun/security/pkcs11/Config.java Mon Nov 05 15:38:52 2012 +0000 @@ -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 @@ -980,6 +981,8 @@ handleStartupErrors = ERR_IGNORE_LIB; } else if (val.equals("halt")) { handleStartupErrors = ERR_HALT; + } else if (val.equals("ignoreMultipleInitialisation")) { + handleStartupErrors = ERR_IGNORE_MULTI_INIT; } else { throw excToken("Invalid value for handleStartupErrors:"); } diff -r 1406789608b7 -r e9c857dcb964 src/share/classes/sun/security/pkcs11/SunPKCS11.java --- jdk8/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java Tue Oct 30 13:05:14 2012 +0000 +++ jdk8/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java Mon Nov 05 15:38:52 2012 +0000 @@ -168,26 +168,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) == false)) { - 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) == false)) { - 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 {