# HG changeset patch # User ascarpino # Date 1402427082 25200 # Node ID bf6df3caafe4a1d27890db06ba4c9b1eaf6bf337 # Parent 9d0d8cc7c3487955a1514f6ebe67972058b1dfeb 8039212: SecretKeyBasic.sh needs to avoid NSS libnss3 and libsoftokn3 version mismatches Reviewed-by: vinnie diff -r 9d0d8cc7c348 -r bf6df3caafe4 jdk/test/sun/security/pkcs11/KeyStore/SecretKeysBasic.java --- a/jdk/test/sun/security/pkcs11/KeyStore/SecretKeysBasic.java Tue Jun 10 08:07:39 2014 -0700 +++ b/jdk/test/sun/security/pkcs11/KeyStore/SecretKeysBasic.java Tue Jun 10 12:04:42 2014 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -139,6 +139,13 @@ } private static void doTest() throws Exception { + // Make sure both NSS libraries are the same version. + if (isNSS(provider) && + (getLibsoftokn3Version() != getLibnss3Version())) { + System.out.println("libsoftokn3 and libnss3 versions do not match. Aborting test..."); + return; + } + if (ks == null) { ks = KeyStore.getInstance(KS_TYPE, provider); ks.load(null, tokenPwd); diff -r 9d0d8cc7c348 -r bf6df3caafe4 jdk/test/sun/security/pkcs11/PKCS11Test.java --- a/jdk/test/sun/security/pkcs11/PKCS11Test.java Tue Jun 10 08:07:39 2014 -0700 +++ b/jdk/test/sun/security/pkcs11/PKCS11Test.java Tue Jun 10 12:04:42 2014 -0700 @@ -66,6 +66,11 @@ // The other is "libnss3.so", listed as "nss3". static String nss_library = "softokn3"; + // NSS versions of each library. It is simplier to keep nss_version + // for quick checking for generic testing than many if-else statements. + static double softoken3_version = -1; + static double nss3_version = -1; + static Provider getSunPKCS11(String config) throws Exception { Class clazz = Class.forName("sun.security.pkcs11.SunPKCS11"); Constructor cons = clazz.getConstructor(new Class[] {String.class}); @@ -175,6 +180,10 @@ } public static String getNSSLibDir() throws Exception { + return getNSSLibDir(nss_library); + } + + static String getNSSLibDir(String library) throws Exception { Properties props = System.getProperties(); String osName = props.getProperty("os.name"); if (osName.startsWith("Win")) { @@ -195,7 +204,7 @@ String nssLibDir = null; for (String dir : nssLibDirs) { if (new File(dir).exists() && - new File(dir + System.mapLibraryName(nss_library)).exists()) { + new File(dir + System.mapLibraryName(library)).exists()) { nssLibDir = dir; System.setProperty("pkcs11test.nss.libdir", nssLibDir); break; @@ -241,16 +250,37 @@ return nss_ecc_status; } + public static double getLibsoftokn3Version() { + if (softoken3_version == -1) + return getNSSInfo("softokn3"); + return softoken3_version; + } + + public static double getLibnss3Version() { + if (nss3_version == -1) + return getNSSInfo("nss3"); + return nss3_version; + } + /* Read the library to find out the verison */ static void getNSSInfo() { + getNSSInfo(nss_library); + } + + static double getNSSInfo(String library) { String nssHeader = "$Header: NSS"; boolean found = false; String s = null; int i = 0; String libfile = ""; + if (library.compareTo("softokn3") == 0 && softoken3_version > -1) + return softoken3_version; + if (library.compareTo("nss3") == 0 && nss3_version > -1) + return nss3_version; + try { - libfile = getNSSLibDir() + System.mapLibraryName(nss_library); + libfile = getNSSLibDir() + System.mapLibraryName(library); FileInputStream is = new FileInputStream(libfile); byte[] data = new byte[1000]; int read = 0; @@ -284,9 +314,10 @@ } if (!found) { - System.out.println("NSS version not found, set to 0.0: "+libfile); + System.out.println("lib" + library + + " version not found, set to 0.0: " + libfile); nss_version = 0.0; - return; + return nss_version; } // the index after whitespace after nssHeader @@ -306,11 +337,12 @@ try { nss_version = Double.parseDouble(version); } catch (NumberFormatException e) { - System.out.println("Failed to parse NSS version. Set to 0.0"); + System.out.println("Failed to parse lib" + library + + " version. Set to 0.0"); e.printStackTrace(); } - System.out.print("NSS version = "+version+". "); + System.out.print("lib" + library + " version = "+version+". "); // Check for ECC if (s.indexOf("Basic") > 0) { @@ -319,7 +351,17 @@ } else if (s.indexOf("Extended") > 0) { nss_ecc_status = ECCState.Extended; System.out.println("ECC Extended."); + } else { + System.out.println("ECC None."); } + + if (library.compareTo("softokn3") == 0) { + softoken3_version = nss_version; + } else if (library.compareTo("nss3") == 0) { + nss3_version = nss_version; + } + + return nss_version; } // Used to set the nss_library file to search for libsoftokn3.so