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

Xuelei Fan xuelei.fan at oracle.com
Mon Mar 28 06:35:23 UTC 2011


Looks fine to me.

Andrew

On 3/28/2011 1:26 PM, Weijun Wang wrote:
> Hi Xuelei
>
> We fixed an [capaths] bug some time ago:
>
>    6789935: cross-realm capath search error
>    http://hg.openjdk.java.net/jdk7/tl/jdk/rev/33bc32405045
>
> Unfortunately, it's still not correct. Here is a new webrev:
>
>    http://cr.openjdk.java.net/~weijun/7019384/webrev.00/
>
> As described in the bug report, we searched paths from target(sRealm) 
> to initiator(cRealm), but the capaths returned by the method *should* 
> be from cRealm to sRealm.
>
> I reversed the tempList in the fix.
>
> Also, the first item in tempList is now sRealm, this order has a 
> consistent meaning, and avoids some extra loop check.
>
> Another "!intermediaries.equals(cRealm)" check is added to be more 
> robust.
>
> Thanks
> Max
>
> -------- Original Message --------
> *Change Request ID*: 7019384
> *Synopsis*: Realm.getRealmsList returns realms list in wrong (reverse) 
> order
>
>
> === *Description* 
> ============================================================
> FULL PRODUCT VERSION :
> Checked on Java SE 6.23 and OpenJDK 7.
>
> A DESCRIPTION OF THE PROBLEM :
> sun.security.krb5.Realm.getRealmsList returns realms list in wrong order:
> - cRealm is always first (this is OK)
> - the rest however is in reverse order
>
> For one intermediate realm nothing happens. For two or more 
> intermediate realms 
> sun.security.krb5.internal.CredentialsUtil.acquireServiceCreds 
> traverses realms in wrong order and cann't get service ticket.
>
> Checked on Java SE 6.23 and OpenJDK 7.
>
>
>
> STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
> [capaths]
> A9.PRAGUE.XXX.CZ = {
>  PRAGUE.XXX.CZ = .
>  ROOT.XXX.CZ = PRAGUE.XXX.CZ
>  SERVIS.XXX.CZ = ROOT.XXX.CZ
> }
>
> EXPECTED VERSUS ACTUAL BEHAVIOR :
> EXPECTED -
>>>> Realm parseCapaths [0]=A9.PRAGUE.XXX.CZ
>>>> Realm parseCapaths [1]=PRAGUE.XXX.CZ
>>>> Realm parseCapaths [2]=ROOT.XXX.CZ
>
> ACTUAL -
>>>> Realm parseCapaths [0]=A9.PRAGUE.XXX.CZ
>>>> Realm parseCapaths [1]=ROOT.XXX.CZ
>>>> Realm parseCapaths [2]=PRAGUE.XXX.CZ
>
> ERROR MESSAGES/STACK TRACES THAT OCCUR :
>>>> Realm doInitialParse: cRealm=[A9.PRAGUE.XXX.CZ], 
>>>> sRealm=[SERVIS.XXX.CZ]
>>>> Realm parseCapaths: loop 1: target=SERVIS.XXX.CZ
>>>> Realm parseCapaths: loop 1: intermediaries=[ROOT.XXX.CZ]
>>>> Realm parseCapaths: loop 1: pushed realm on to stack: ROOT.XXX.CZ
>>>> Realm parseCapaths: loop 1: added intermediary to list: ROOT.XXX.CZ
>>>> Realm parseCapaths: loop 2: target=ROOT.XXX.CZ
>>>> Realm parseCapaths: loop 2: intermediaries=[PRAGUE.XXX.CZ]
>>>> Realm parseCapaths: loop 2: pushed realm on to stack: PRAGUE.XXX.CZ
>>>> Realm parseCapaths: loop 2: added intermediary to list: PRAGUE.XXX.CZ
>>>> Realm parseCapaths: loop 3: target=PRAGUE.XXX.CZ
>>>> Realm parseCapaths: loop 3: no intermediaries
>>>> Realm parseCapaths [0]=A9.PRAGUE.XXX.CZ
>>>> Realm parseCapaths [1]=ROOT.XXX.CZ
>>>> Realm parseCapaths [2]=PRAGUE.XXX.CZ
>
> REPRODUCIBILITY :
> This bug can be reproduced always.
>
> ---------- BEGIN SOURCE ----------
> Enhancements for OpenJDK 7 test suite:
>
> Add to b/test/sun/security/krb5/krb5-capaths.conf:
>
> [capaths]
> A9.PRAGUE.XXX.CZ = {
>  PRAGUE.XXX.CZ = .
>  ROOT.XXX.CZ = PRAGUE.XXX.CZ
>  SERVIS.XXX.CZ = ROOT.XXX.CZ
> }
>
>
> Add to b/test/sun/security/krb5/ParseCAPaths.java:
>
> // Multiple intermediate realms
> check("A9.PRAGUE.XXX.CZ", "SERVIS.XXX.CZ", "A9.PRAGUE.XXX.CZ", 
> "PRAGUE.XXX.CZ", "ROOT.XXX.CZ");




More information about the security-dev mailing list