mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-28 19:20:33 +00:00
8176067: Proper directory lookup processing
Reviewed-by: ahgross, mullan, vinnie
This commit is contained in:
parent
f872824620
commit
6b1fb24aee
@ -1234,6 +1234,7 @@ public final class LdapClient implements PooledConnection {
|
||||
static final int LDAP_REF_FOLLOW = 0x01; // follow referrals
|
||||
static final int LDAP_REF_THROW = 0x02; // throw referral ex.
|
||||
static final int LDAP_REF_IGNORE = 0x03; // ignore referrals
|
||||
static final int LDAP_REF_FOLLOW_SCHEME = 0x04; // follow referrals of the same scheme
|
||||
|
||||
static final String LDAP_URL = "ldap://"; // LDAPv3
|
||||
static final String LDAPS_URL = "ldaps://"; // LDAPv3
|
||||
|
||||
@ -2414,6 +2414,9 @@ final public class LdapCtx extends ComponentDirContext
|
||||
// First determine the referral mode
|
||||
if (ref != null) {
|
||||
switch (ref) {
|
||||
case "follow-scheme":
|
||||
handleReferrals = LdapClient.LDAP_REF_FOLLOW_SCHEME;
|
||||
break;
|
||||
case "follow":
|
||||
handleReferrals = LdapClient.LDAP_REF_FOLLOW;
|
||||
break;
|
||||
@ -2979,8 +2982,23 @@ final public class LdapCtx extends ComponentDirContext
|
||||
r = new LdapReferralException(resolvedName, resolvedObj, remainName,
|
||||
msg, envprops, fullDN, handleReferrals, reqCtls);
|
||||
// only one set of URLs is present
|
||||
r.setReferralInfo(res.referrals == null ? null :
|
||||
res.referrals.elementAt(0), false);
|
||||
Vector<String> refs;
|
||||
if (res.referrals == null) {
|
||||
refs = null;
|
||||
} else if (handleReferrals == LdapClient.LDAP_REF_FOLLOW_SCHEME) {
|
||||
refs = new Vector<>();
|
||||
for (String s : res.referrals.elementAt(0)) {
|
||||
if (s.startsWith("ldap:")) {
|
||||
refs.add(s);
|
||||
}
|
||||
}
|
||||
if (refs.isEmpty()) {
|
||||
refs = null;
|
||||
}
|
||||
} else {
|
||||
refs = res.referrals.elementAt(0);
|
||||
}
|
||||
r.setReferralInfo(refs, false);
|
||||
|
||||
if (hopCount > 1) {
|
||||
r.setHopCount(hopCount);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2017, 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
|
||||
@ -117,7 +117,8 @@ final public class LdapReferralException extends
|
||||
|
||||
// If following referral, request controls are passed to referral ctx
|
||||
this.reqCtls =
|
||||
(handleReferrals == LdapClient.LDAP_REF_FOLLOW ? reqCtls : null);
|
||||
(handleReferrals == LdapClient.LDAP_REF_FOLLOW ||
|
||||
handleReferrals == LdapClient.LDAP_REF_FOLLOW_SCHEME ? reqCtls : null);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2017, 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
|
||||
@ -186,7 +186,7 @@ final class LDAPCertStoreImpl {
|
||||
*/
|
||||
Hashtable<?,?> currentEnv = ctx.getEnvironment();
|
||||
if (currentEnv.get(Context.REFERRAL) == null) {
|
||||
ctx.addToEnvironment(Context.REFERRAL, "follow");
|
||||
ctx.addToEnvironment(Context.REFERRAL, "follow-scheme");
|
||||
}
|
||||
} catch (NamingException e) {
|
||||
if (debug != null) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user