Path: blob/master/test/jdk/sun/security/krb5/auto/BasicKrb5Test.java
41152 views
/*1* Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24* @test25* @bug 6706974 8014628 819448626* @summary Add krb5 test infrastructure27* @library /test/lib28* @compile -XDignore.symbol.file BasicKrb5Test.java29* @run main jdk.test.lib.FileInstaller TestHosts TestHosts30* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test31* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test des-cbc-crc32* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test des-cbc-md533* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test des3-cbc-sha134* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes128-sha135* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes256-sha136* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes128-sha237* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes256-sha238* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test rc4-hmac39* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test -s40* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test des-cbc-crc -s41* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test des-cbc-md5 -s42* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test43* des3-cbc-sha1 -s44* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes128-sha1 -s45* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes256-sha1 -s46* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes128-sha2 -s47* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes256-sha2 -s48* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test rc4-hmac -s49* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test -C50* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test des-cbc-crc -C51* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test des-cbc-md5 -C52* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test53* des3-cbc-sha1 -C54* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes128-sha1 -C55* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes256-sha1 -C56* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes128-sha2 -C57* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes256-sha2 -C58* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test rc4-hmac -C59* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test -s -C60* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test61* des-cbc-crc -s -C62* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test63* des-cbc-md5 -s -C64* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test65* des3-cbc-sha1 -s -C66* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test67* aes128-sha1 -s -C68* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test69* aes256-sha1 -s -C70* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test71* aes128-sha2 -s -C72* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test73* aes256-sha2 -s -C74* @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test75* rc4-hmac -s -C76*/7778import org.ietf.jgss.GSSName;79import sun.security.jgss.GSSUtil;80import sun.security.krb5.KrbException;8182/**83* Basic JGSS/krb5 test with 3 parties: client, server, backend server. Each84* party uses JAAS login to get subjects and executes JGSS calls using85* Subject.doAs.86*/87public class BasicKrb5Test {8889private static boolean conf = true;90/**91* @param args empty or etype92*/93public static void main(String[] args)94throws Exception {9596String etype = null;97for (String arg: args) {98if (arg.equals("-s")) Context.usingStream = true;99else if (arg.equals("-C")) conf = false;100else etype = arg;101}102103// Creates and starts the KDC. This line must be put ahead of etype check104// since the check needs a krb5.conf.105try {106new OneKDC(etype).writeJAASConf();107} catch (KrbException ke) {108System.out.println("Testing etype " + etype + "Not supported.");109return;110}111112new BasicKrb5Test().go(OneKDC.SERVER, OneKDC.BACKEND);113}114115void go(final String server, final String backend) throws Exception {116Context c, s, s2, b;117c = Context.fromJAAS("client");118s = Context.fromJAAS("server");119b = Context.fromJAAS("backend");120121c.startAsClient(server, GSSUtil.GSS_KRB5_MECH_OID);122c.x().requestCredDeleg(true);123c.x().requestConf(conf);124s.startAsServer(GSSUtil.GSS_KRB5_MECH_OID);125126c.status();127s.status();128129Context.handshake(c, s);130GSSName client = c.x().getSrcName();131132c.status();133s.status();134135Context.transmit("i say high --", c, s);136Context.transmit(" you say low", s, c);137138s2 = s.delegated();139s.dispose();140s = null;141142s2.startAsClient(backend, GSSUtil.GSS_KRB5_MECH_OID);143s2.x().requestConf(conf);144b.startAsServer(GSSUtil.GSS_KRB5_MECH_OID);145146s2.status();147b.status();148149Context.handshake(s2, b);150GSSName client2 = b.x().getSrcName();151152if (!client.equals(client2)) {153throw new Exception("Delegation failed");154}155156s2.status();157b.status();158159Context.transmit("you say hello --", s2, b);160Context.transmit(" i say goodbye", b, s2);161162s2.dispose();163b.dispose();164}165}166167168