# HG changeset patch # User weijun # Date 1301306650 -28800 # Node ID 05f25362fb76d97810fb7ad4bcd64169a73de6bb # Parent 49dc728cdd3e73f5fbd3ccb53e54cf396c4b0f34 7019384: Realm.getRealmsList returns realms list in wrong (reverse) order Reviewed-by: xuelei diff -r 49dc728cdd3e -r 05f25362fb76 jdk/src/share/classes/sun/security/krb5/Realm.java --- 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 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 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 " + to); diff -r 49dc728cdd3e -r 05f25362fb76 jdk/test/sun/security/krb5/krb5-capaths.conf --- a/jdk/test/sun/security/krb5/krb5-capaths.conf Fri Mar 25 18:47:57 2011 -0700 +++ b/jdk/test/sun/security/krb5/krb5-capaths.conf Mon Mar 28 18:04:10 2011 +0800 @@ -85,3 +85,13 @@ 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 +}