提交 fa1cfe5f 编写于 作者: W weijun

6733095: Failure when SPNEGO request non-Mutual

Reviewed-by: valeriep
上级 01ef1bee
/* /*
* Copyright 2000-2006 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -284,7 +284,8 @@ class GSSContextImpl implements GSSContext { ...@@ -284,7 +284,8 @@ class GSSContextImpl implements GSSContext {
ByteArrayOutputStream bos = new ByteArrayOutputStream(100); ByteArrayOutputStream bos = new ByteArrayOutputStream(100);
acceptSecContext(new ByteArrayInputStream(inTok, offset, len), acceptSecContext(new ByteArrayInputStream(inTok, offset, len),
bos); bos);
return bos.toByteArray(); byte[] out = bos.toByteArray();
return (out.length == 0) ? null : out;
} }
public void acceptSecContext(InputStream inStream, public void acceptSecContext(InputStream inStream,
......
/* /*
* Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -413,13 +413,14 @@ public class SpNegoContext implements GSSContextSpi { ...@@ -413,13 +413,14 @@ public class SpNegoContext implements GSSContextSpi {
// pull out the mechanism token // pull out the mechanism token
byte[] accept_token = targToken.getResponseToken(); byte[] accept_token = targToken.getResponseToken();
if (accept_token == null) { if (accept_token == null) {
// return wth failure if (!isMechContextEstablished()) {
throw new GSSException(errorCode, -1, // return with failure
"mechansim token from server is null"); throw new GSSException(errorCode, -1,
"mechanism token from server is null");
}
} else {
mechToken = GSS_initSecContext(accept_token);
} }
mechToken = GSS_initSecContext(accept_token);
// verify MIC // verify MIC
if (!GSSUtil.useMSInterop()) { if (!GSSUtil.useMSInterop()) {
byte[] micToken = targToken.getMechListMIC(); byte[] micToken = targToken.getMechListMIC();
...@@ -428,7 +429,6 @@ public class SpNegoContext implements GSSContextSpi { ...@@ -428,7 +429,6 @@ public class SpNegoContext implements GSSContextSpi {
"verification of MIC on MechList Failed!"); "verification of MIC on MechList Failed!");
} }
} }
if (isMechContextEstablished()) { if (isMechContextEstablished()) {
state = STATE_DONE; state = STATE_DONE;
retVal = mechToken; retVal = mechToken;
...@@ -556,9 +556,6 @@ public class SpNegoContext implements GSSContextSpi { ...@@ -556,9 +556,6 @@ public class SpNegoContext implements GSSContextSpi {
// get the token for mechanism // get the token for mechanism
byte[] accept_token = GSS_acceptSecContext(mechToken); byte[] accept_token = GSS_acceptSecContext(mechToken);
if (accept_token == null) {
valid = false;
}
// verify MIC // verify MIC
if (!GSSUtil.useMSInterop() && valid) { if (!GSSUtil.useMSInterop() && valid) {
......
...@@ -360,6 +360,10 @@ public class Context { ...@@ -360,6 +360,10 @@ public class Context {
if (me.x.isEstablished()) { if (me.x.isEstablished()) {
me.f = true; me.f = true;
System.out.println(c.name + " side established"); System.out.println(c.name + " side established");
if (input != null) {
throw new Exception("Context established but " +
"still receive token at " + c.name);
}
return null; return null;
} else { } else {
System.out.println(c.name + " call initSecContext"); System.out.println(c.name + " call initSecContext");
...@@ -374,6 +378,10 @@ public class Context { ...@@ -374,6 +378,10 @@ public class Context {
if (me.x.isEstablished()) { if (me.x.isEstablished()) {
me.f = true; me.f = true;
System.out.println(s.name + " side established"); System.out.println(s.name + " side established");
if (input != null) {
throw new Exception("Context established but " +
"still receive token at " + s.name);
}
return null; return null;
} else { } else {
System.out.println(s.name + " called acceptSecContext"); System.out.println(s.name + " called acceptSecContext");
......
/*
* Copyright 2008 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 6733095
* @summary Failure when SPNEGO request non-Mutual
*/
import sun.security.jgss.GSSUtil;
public class NonMutualSpnego {
public static void main(String[] args)
throws Exception {
// Create and start the KDC
new OneKDC(null).writeJAASConf();
new NonMutualSpnego().go();
}
void go() throws Exception {
Context c = Context.fromJAAS("client");
Context s = Context.fromJAAS("server");
c.startAsClient(OneKDC.SERVER, GSSUtil.GSS_SPNEGO_MECH_OID);
c.x().requestMutualAuth(false);
s.startAsServer(GSSUtil.GSS_SPNEGO_MECH_OID);
Context.handshake(c, s);
Context.transmit("i say high --", c, s);
Context.transmit(" you say low", s, c);
c.dispose();
s.dispose();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册