--- a/jdk/src/share/classes/sun/security/krb5/Realm.java Fri Mar 25 18:47:57 2011 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/Realm.java Mon Mar 28 18:04:10 2011 +0800
@@ -1,5 +1,5 @@
/*
- * 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 @@
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 @@
}
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 @@
} 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) {