提交 5b3a1ff4 编写于 作者: W weijun

7019384: Realm.getRealmsList returns realms list in wrong (reverse) order

Reviewed-by: xuelei
上级 b5526742
/* /*
* Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2000, 2011, Oracle and/or its affiliates. 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
...@@ -362,19 +362,15 @@ public class Realm implements Cloneable { ...@@ -362,19 +362,15 @@ public class Realm implements Cloneable {
Stack<String> iStack = new Stack<>(); Stack<String> iStack = new Stack<>();
/* /*
* I don't expect any more than a handful of intermediaries. * The half-established reversed-path, starting from the final target
* (sRealm), each item can be connected to by the next one.
* Might contains wrong item, if found, a bad track is performed
*/ */
Vector<String> tempList = new Vector<>(8, 8); Vector<String> tempList = new Vector<>(8, 8);
tempList.add(sRealm);
/*
* The initiator at first location.
*/
tempList.add(cRealm);
int count = 0; // For debug only int count = 0; // For debug only
if (DEBUG) {
tempTarget = sRealm; tempTarget = sRealm;
}
out: do { out: do {
if (DEBUG) { if (DEBUG) {
...@@ -384,8 +380,8 @@ public class Realm implements Cloneable { ...@@ -384,8 +380,8 @@ public class Realm implements Cloneable {
} }
if (intermediaries != null && if (intermediaries != null &&
!intermediaries.equals(PrincipalName.REALM_COMPONENT_SEPARATOR_STR)) !intermediaries.equals(".") &&
{ !intermediaries.equals(cRealm)) {
if (DEBUG) { if (DEBUG) {
System.out.println(">>> Realm parseCapaths: loop " + System.out.println(">>> Realm parseCapaths: loop " +
count + ": intermediaries=[" + count + ": intermediaries=[" +
...@@ -466,11 +462,15 @@ public class Realm implements Cloneable { ...@@ -466,11 +462,15 @@ public class Realm implements Cloneable {
} while (true); } while (true);
if (tempList.isEmpty()) {
return null;
}
// From (SREALM, T1, T2) to (CREALM, T2, T1)
retList = new String[tempList.size()]; retList = new String[tempList.size()];
try { retList[0] = cRealm;
retList = tempList.toArray(retList); for (int i=1; i<tempList.size(); i++) {
} catch (ArrayStoreException exc) { retList[i] = tempList.elementAt(tempList.size()-i);
retList = null;
} }
if (DEBUG && retList != null) { if (DEBUG && retList != null) {
......
/* /*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2009, 2011, Oracle and/or its affiliates. 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
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
/* /*
* @test * @test
* @bug 6789935 * @bug 6789935
* @run main/othervm ParseCAPaths
* @summary cross-realm capath search error * @summary cross-realm capath search error
*/ */
...@@ -30,9 +31,10 @@ import java.util.Arrays; ...@@ -30,9 +31,10 @@ import java.util.Arrays;
import sun.security.krb5.Realm; import sun.security.krb5.Realm;
public class ParseCAPaths { public class ParseCAPaths {
static boolean failed = false; static Exception failed = null;
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
System.setProperty("java.security.krb5.conf", System.getProperty("test.src", ".") +"/krb5-capaths.conf"); System.setProperty("java.security.krb5.conf",
System.getProperty("test.src", ".") +"/krb5-capaths.conf");
//System.setProperty("sun.security.krb5.debug", "true"); //System.setProperty("sun.security.krb5.debug", "true");
// Standard example // Standard example
...@@ -59,9 +61,13 @@ public class ParseCAPaths { ...@@ -59,9 +61,13 @@ public class ParseCAPaths {
check("G1.COM", "G3.COM", "G1.COM", "COM"); check("G1.COM", "G3.COM", "G1.COM", "COM");
check("H1.COM", "H3.COM", "H1.COM"); check("H1.COM", "H3.COM", "H1.COM");
check("I1.COM", "I4.COM", "I1.COM", "I5.COM"); check("I1.COM", "I4.COM", "I1.COM", "I5.COM");
// J2=J1 is the same as J2=.
if (failed) { check("J1.COM", "J2.COM", "J1.COM");
throw new Exception("Failed somewhere."); // 7019384
check("A9.PRAGUE.XXX.CZ", "SERVIS.XXX.CZ",
"A9.PRAGUE.XXX.CZ", "PRAGUE.XXX.CZ", "ROOT.XXX.CZ");
if (failed != null) {
throw failed;
} }
} }
...@@ -69,10 +75,10 @@ public class ParseCAPaths { ...@@ -69,10 +75,10 @@ public class ParseCAPaths {
try { try {
check2(from, to, paths); check2(from, to, paths);
} catch (Exception e) { } catch (Exception e) {
failed = true; failed = e;
e.printStackTrace();
} }
} }
static void check2(String from, String to, String... paths) static void check2(String from, String to, String... paths)
throws Exception { throws Exception {
System.out.println(from + " -> " + to); System.out.println(from + " -> " + to);
......
...@@ -85,3 +85,13 @@ I1.COM = { ...@@ -85,3 +85,13 @@ I1.COM = {
I3.COM = I2.COM I3.COM = I2.COM
I4.COM = I2.COM I5.COM I4.COM = I2.COM I5.COM
} }
J1.COM = {
J2.COM=J1.COM
}
A9.PRAGUE.XXX.CZ = {
PRAGUE.XXX.CZ = .
ROOT.XXX.CZ = PRAGUE.XXX.CZ
SERVIS.XXX.CZ = ROOT.XXX.CZ
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册