提交 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.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -362,19 +362,15 @@ public class Realm implements Cloneable {
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);
/*
* The initiator at first location.
*/
tempList.add(cRealm);
tempList.add(sRealm);
int count = 0; // For debug only
if (DEBUG) {
tempTarget = sRealm;
}
tempTarget = sRealm;
out: do {
if (DEBUG) {
......@@ -384,8 +380,8 @@ public class Realm implements Cloneable {
}
if (intermediaries != null &&
!intermediaries.equals(PrincipalName.REALM_COMPONENT_SEPARATOR_STR))
{
!intermediaries.equals(".") &&
!intermediaries.equals(cRealm)) {
if (DEBUG) {
System.out.println(">>> Realm parseCapaths: loop " +
count + ": intermediaries=[" +
......@@ -466,11 +462,15 @@ public class Realm implements Cloneable {
} while (true);
if (tempList.isEmpty()) {
return null;
}
// From (SREALM, T1, T2) to (CREALM, T2, T1)
retList = new String[tempList.size()];
try {
retList = tempList.toArray(retList);
} catch (ArrayStoreException exc) {
retList = null;
retList[0] = cRealm;
for (int i=1; i<tempList.size(); i++) {
retList[i] = tempList.elementAt(tempList.size()-i);
}
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.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -23,6 +23,7 @@
/*
* @test
* @bug 6789935
* @run main/othervm ParseCAPaths
* @summary cross-realm capath search error
*/
......@@ -30,9 +31,10 @@ import java.util.Arrays;
import sun.security.krb5.Realm;
public class ParseCAPaths {
static boolean failed = false;
static Exception failed = null;
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");
// Standard example
......@@ -59,9 +61,13 @@ public class ParseCAPaths {
check("G1.COM", "G3.COM", "G1.COM", "COM");
check("H1.COM", "H3.COM", "H1.COM");
check("I1.COM", "I4.COM", "I1.COM", "I5.COM");
if (failed) {
throw new Exception("Failed somewhere.");
// J2=J1 is the same as J2=.
check("J1.COM", "J2.COM", "J1.COM");
// 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 {
try {
check2(from, to, paths);
} catch (Exception e) {
failed = true;
e.printStackTrace();
failed = e;
}
}
static void check2(String from, String to, String... paths)
throws Exception {
System.out.println(from + " -> " + to);
......
......@@ -85,3 +85,13 @@ I1.COM = {
I3.COM = I2.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.
先完成此消息的编辑!
想要评论请 注册