# HG changeset patch # User weijun # Date 1259283118 -28800 # Node ID f36521ae16db5fdd4603f9c6e64155404cbabebd # Parent 2a6d13ebbbed7b56b0d8920cf4786afc40c42d22 6770883: Infinite loop if SPNEGO specified as sun.security.jgss.mechanism Reviewed-by: valeriep diff -r 2a6d13ebbbed -r f36521ae16db jdk/src/share/classes/sun/security/jgss/spnego/SpNegoMechFactory.java --- a/jdk/src/share/classes/sun/security/jgss/spnego/SpNegoMechFactory.java Fri Nov 27 08:51:42 2009 +0800 +++ b/jdk/src/share/classes/sun/security/jgss/spnego/SpNegoMechFactory.java Fri Nov 27 08:51:58 2009 +0800 @@ -57,6 +57,12 @@ GSSName.NT_HOSTBASED_SERVICE, GSSName.NT_EXPORT_NAME}; + // The default underlying mech of SPNEGO, must not be SPNEGO itself. + private static final Oid DEFAULT_SPNEGO_MECH_OID = + ProviderList.DEFAULT_MECH_OID.equals(GSS_SPNEGO_MECH_OID)? + GSSUtil.GSS_KRB5_MECH_OID: + ProviderList.DEFAULT_MECH_OID; + // Use an instance of a GSSManager whose provider list // does not include native provider final GSSManagerImpl manager; @@ -100,18 +106,27 @@ availableMechs[j++] = mechs[i]; } } + // Move the preferred mech to first place + for (int i=0; i