OpenJDK / amber / amber
changeset 5300:a291a0bff79f
6944847: native gss lib names on linux
Reviewed-by: valeriep
author | weijun |
---|---|
date | Tue, 20 Apr 2010 19:30:31 +0800 |
parents | 61698e8cdf75 |
children | 1bc2a3a47839 |
files | jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java jdk/test/sun/security/krb5/Krb5NameEquals.java jdk/test/sun/security/krb5/runNameEquals.sh |
diffstat | 3 files changed, 207 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java Sat Apr 17 08:12:00 2010 -0700 +++ b/jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java Tue Apr 20 19:30:31 2010 +0800 @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2005-2010 Sun Microsystems, Inc. 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 @@ -77,26 +77,34 @@ if (DEBUG) err.printStackTrace(); return null; } - String gssLib = System.getProperty(LIB_PROP); - if (gssLib == null || gssLib.trim().equals("")) { + String gssLibs[] = new String[0]; + String defaultLib = System.getProperty(LIB_PROP); + if (defaultLib == null || defaultLib.trim().equals("")) { String osname = System.getProperty("os.name"); if (osname.startsWith("SunOS")) { - gssLib = "libgss.so"; + gssLibs = new String[]{ "libgss.so" }; } else if (osname.startsWith("Linux")) { - gssLib = "libgssapi.so"; + gssLibs = new String[]{ + "libgssapi.so", + "libgssapi_krb5.so", + }; } + } else { + gssLibs = new String[]{ defaultLib }; } - if (GSSLibStub.init(gssLib)) { - debug("Loaded GSS library: " + gssLib); - Oid[] mechs = GSSLibStub.indicateMechs(); - HashMap<String, String> map = - new HashMap<String, String>(); - for (int i = 0; i < mechs.length; i++) { - debug("Native MF for " + mechs[i]); - map.put("GssApiMechanism." + mechs[i], - MF_CLASS); + for (String libName: gssLibs) { + if (GSSLibStub.init(libName)) { + debug("Loaded GSS library: " + libName); + Oid[] mechs = GSSLibStub.indicateMechs(); + HashMap<String, String> map = + new HashMap<String, String>(); + for (int i = 0; i < mechs.length; i++) { + debug("Native MF for " + mechs[i]); + map.put("GssApiMechanism." + mechs[i], + MF_CLASS); + } + return map; } - return map; } return null; }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/krb5/Krb5NameEquals.java Tue Apr 20 19:30:31 2010 +0800 @@ -0,0 +1,78 @@ +/* + * Copyright 2007-2010 Sun Microsystems, Inc. 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @bug 4634392 + * @summary JDK code doesn't respect contract for equals and hashCode + * @author Andrew Fan + */ + +import org.ietf.jgss.*; + +public class Krb5NameEquals { + + private static String NAME_STR1 = "service@host"; + private static String NAME_STR2 = "service@host2"; + private static final Oid MECH; + + static { + Oid temp = null; + try { + temp = new Oid("1.2.840.113554.1.2.2"); // KRB5 + } catch (Exception e) { + // should never happen + } + MECH = temp; + } + + public static void main(String[] argv) throws Exception { + GSSManager mgr = GSSManager.getInstance(); + + boolean result = true; + // Create GSSName and check their equals(), hashCode() impl + GSSName name1 = mgr.createName(NAME_STR1, + GSSName.NT_HOSTBASED_SERVICE, MECH); + GSSName name2 = mgr.createName(NAME_STR2, + GSSName.NT_HOSTBASED_SERVICE, MECH); + GSSName name3 = mgr.createName(NAME_STR1, + GSSName.NT_HOSTBASED_SERVICE, MECH); + + if (!name1.equals(name3) || !name1.equals(name3) || + !name1.equals((Object) name1) || + !name1.equals((Object) name3)) { + System.out.println("Error: should be the same name"); + result = false; + } else if (name1.hashCode() != name3.hashCode()) { + System.out.println("Error: should have same hash"); + result = false; + } + + if (name1.equals(name2) || name1.equals((Object) name2)) { + System.out.println("Error: should be different names"); + result = false; + } + if (result) { + System.out.println("Done"); + } else System.exit(1); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/krb5/runNameEquals.sh Tue Apr 20 19:30:31 2010 +0800 @@ -0,0 +1,106 @@ +# +# Copyright 2009-2010 Sun Microsystems, Inc. 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 +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, +# CA 95054 USA or visit www.sun.com if you need additional information or +# have any questions. +# + +# @test +# @bug 6317711 6944847 +# @summary Ensure the GSSName has the correct impl which respects +# the contract for equals and hashCode across different configurations. + +# set a few environment variables so that the shell-script can run stand-alone +# in the source directory + +if [ "${TESTSRC}" = "" ] ; then + TESTSRC="." +fi + +if [ "${TESTCLASSES}" = "" ] ; then + TESTCLASSES="." +fi + +if [ "${TESTJAVA}" = "" ] ; then + echo "TESTJAVA not set. Test cannot execute." + echo "FAILED!!!" + exit 1 +fi + +NATIVE=false + +# set platform-dependent variables +OS=`uname -s` +case "$OS" in + SunOS ) + PATHSEP=":" + FILESEP="/" + NATIVE=true + ;; + Linux ) + PATHSEP=":" + FILESEP="/" + NATIVE=true + ;; + CYGWIN* ) + PATHSEP=";" + FILESEP="/" + ;; + Windows* ) + PATHSEP=";" + FILESEP="\\" + ;; + * ) + echo "Unrecognized system!" + exit 1; + ;; +esac + +TEST=Krb5NameEquals + +${TESTJAVA}${FILESEP}bin${FILESEP}javac \ + -d ${TESTCLASSES}${FILESEP} \ + ${TESTSRC}${FILESEP}${TEST}.java + +EXIT_STATUS=0 + +if [ "${NATIVE}" = "true" ] ; then + echo "Testing native provider" + ${TESTJAVA}${FILESEP}bin${FILESEP}java \ + -classpath ${TESTCLASSES} \ + -Dsun.security.jgss.native=true \ + ${TEST} + if [ $? != 0 ] ; then + echo "Native provider fails" + EXIT_STATUS=1 + fi +fi + +echo "Testing java provider" +${TESTJAVA}${FILESEP}bin${FILESEP}java \ + -classpath ${TESTCLASSES} \ + -Djava.security.krb5.realm=R \ + -Djava.security.krb5.kdc=127.0.0.1 \ + ${TEST} +if [ $? != 0 ] ; then + echo "Java provider fails" + EXIT_STATUS=1 +fi + +exit ${EXIT_STATUS}