# HG changeset patch # User weijun # Date 1362821278 -28800 # Node ID 2d0b844bfbb63e51f9e20511c4fef0cf9b3f2310 # Parent ef93558b0d63ca0b5cd1df43b7bfe66893df031e 8000653: SPNEGO tests fail at context.getDelegCred().getRemainingInitLifetime(mechOid) Reviewed-by: valeriep diff -r ef93558b0d63 -r 2d0b844bfbb6 jdk/src/share/classes/sun/security/jgss/GSSCredentialImpl.java --- a/jdk/src/share/classes/sun/security/jgss/GSSCredentialImpl.java Fri Mar 08 15:45:06 2013 -0800 +++ b/jdk/src/share/classes/sun/security/jgss/GSSCredentialImpl.java Sat Mar 09 17:27:58 2013 +0800 @@ -29,6 +29,7 @@ import sun.security.jgss.spi.*; import java.util.*; import com.sun.security.jgss.*; +import sun.security.jgss.spnego.SpNegoCredElement; public class GSSCredentialImpl implements ExtendedGSSCredential { @@ -87,6 +88,7 @@ throw new GSSException(GSSException.NO_CRED); } + // Wrap a mech cred into a GSS cred public GSSCredentialImpl(GSSManagerImpl gssManager, GSSCredentialSpi mechElement) throws GSSException { @@ -103,6 +105,11 @@ usage); tempCred = mechElement; hashtable.put(key, tempCred); + // More mechs that can use this cred, say, SPNEGO + if (!GSSUtil.isSpNegoMech(mechElement.getMechanism())) { + key = new SearchKey(GSSUtil.GSS_SPNEGO_MECH_OID, usage); + hashtable.put(key, new SpNegoCredElement(mechElement)); + } } void init(GSSManagerImpl gssManager) { diff -r ef93558b0d63 -r 2d0b844bfbb6 jdk/src/share/classes/sun/security/jgss/spnego/SpNegoCredElement.java --- a/jdk/src/share/classes/sun/security/jgss/spnego/SpNegoCredElement.java Fri Mar 08 15:45:06 2013 -0800 +++ b/jdk/src/share/classes/sun/security/jgss/spnego/SpNegoCredElement.java Sat Mar 09 17:27:58 2013 +0800 @@ -44,7 +44,7 @@ private GSSCredentialSpi cred = null; - SpNegoCredElement(GSSCredentialSpi cred) throws GSSException { + public SpNegoCredElement(GSSCredentialSpi cred) throws GSSException { this.cred = cred; } diff -r ef93558b0d63 -r 2d0b844bfbb6 jdk/test/sun/security/krb5/auto/Context.java --- a/jdk/test/sun/security/krb5/auto/Context.java Fri Mar 08 15:45:06 2013 -0800 +++ b/jdk/test/sun/security/krb5/auto/Context.java Sat Mar 09 17:27:58 2013 +0800 @@ -297,6 +297,13 @@ } /** + * Returns the cred inside, if there is one + */ + public GSSCredential cred() { + return cred; + } + + /** * Disposes the GSSContext within * @throws org.ietf.jgss.GSSException */ diff -r ef93558b0d63 -r 2d0b844bfbb6 jdk/test/sun/security/krb5/auto/SpnegoLifeTime.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/krb5/auto/SpnegoLifeTime.java Sat Mar 09 17:27:58 2013 +0800 @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2013, 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 + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8000653 + * @summary SPNEGO tests fail at context.getDelegCred().getRemainingInitLifetime(mechOid) + * @compile -XDignore.symbol.file SpnegoLifeTime.java + * @run main/othervm SpnegoLifeTime + */ + +import org.ietf.jgss.Oid; +import org.ietf.jgss.GSSCredential; +import sun.security.jgss.GSSUtil; + +public class SpnegoLifeTime { + + public static void main(String[] args) throws Exception { + + Oid oid = GSSUtil.GSS_SPNEGO_MECH_OID; + new OneKDC(null).writeJAASConf(); + + Context c, s; + c = Context.fromJAAS("client"); + s = Context.fromJAAS("server"); + + c.startAsClient(OneKDC.SERVER, oid); + c.x().requestCredDeleg(true); + s.startAsServer(oid); + + Context.handshake(c, s); + + GSSCredential cred = s.delegated().cred(); + cred.getRemainingInitLifetime(oid); + cred.getUsage(oid); + } +} +