Path: blob/master/test/jdk/sun/security/krb5/auto/CrossRealm.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 819448626* @summary Add krb5 test infrastructure27* @library /test/lib28* @compile -XDignore.symbol.file CrossRealm.java29* @run main jdk.test.lib.FileInstaller TestHosts TestHosts30* @run main/othervm -Djdk.net.hosts.file=TestHosts CrossRealm31*/32import java.io.File;33import java.io.FileOutputStream;34import java.io.IOException;35import java.security.Security;36import javax.security.auth.callback.Callback;37import javax.security.auth.callback.CallbackHandler;38import javax.security.auth.callback.NameCallback;39import javax.security.auth.callback.PasswordCallback;40import javax.security.auth.callback.UnsupportedCallbackException;41import org.ietf.jgss.GSSContext;42import org.ietf.jgss.GSSManager;43import org.ietf.jgss.GSSName;44import sun.security.jgss.GSSUtil;4546public class CrossRealm implements CallbackHandler {47public static void main(String[] args) throws Exception {48startKDCs();49xRealmAuth();50}5152static void startKDCs() throws Exception {53// Create and start the KDC54KDC kdc1 = KDC.create("RABBIT.HOLE");55kdc1.addPrincipal("dummy", "bogus".toCharArray());56kdc1.addPrincipalRandKey("krbtgt/RABBIT.HOLE");57kdc1.addPrincipal("krbtgt/[email protected]",58"rabbit->snake".toCharArray());5960KDC kdc2 = KDC.create("SNAKE.HOLE");61kdc2.addPrincipalRandKey("krbtgt/SNAKE.HOLE");62kdc2.addPrincipal("krbtgt/[email protected]",63"rabbit->snake".toCharArray());64kdc2.addPrincipalRandKey("host/www.snake.hole");6566KDC.saveConfig("krb5-localkdc.conf", kdc1, kdc2,67"forwardable=true",68"[domain_realm]",69".snake.hole=SNAKE.HOLE");70System.setProperty("java.security.krb5.conf", "krb5-localkdc.conf");71}7273static void xRealmAuth() throws Exception {74Security.setProperty("auth.login.defaultCallbackHandler", "CrossRealm");75System.setProperty("java.security.auth.login.config", "jaas-localkdc.conf");76System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");77FileOutputStream fos = new FileOutputStream("jaas-localkdc.conf");78fos.write(("com.sun.security.jgss.krb5.initiate {\n" +79" com.sun.security.auth.module.Krb5LoginModule\n" +80" required\n" +81" principal=dummy\n" +82" doNotPrompt=false\n" +83" useTicketCache=false\n" +84" ;\n" +85"};").getBytes());86fos.close();8788GSSManager m = GSSManager.getInstance();89m.createContext(90m.createName("[email protected]", GSSName.NT_HOSTBASED_SERVICE),91GSSUtil.GSS_KRB5_MECH_OID,92null,93GSSContext.DEFAULT_LIFETIME).initSecContext(new byte[0], 0, 0);94}9596@Override97public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {98for (Callback callback : callbacks) {99if (callback instanceof NameCallback) {100((NameCallback) callback).setName("dummy");101}102if (callback instanceof PasswordCallback) {103((PasswordCallback) callback).setPassword("bogus".toCharArray());104}105}106}107}108109110