|
@@ -130,6 +130,19 @@ public class LdapGroupsMapping
|
|
public static final String BASE_DN_KEY = LDAP_CONFIG_PREFIX + ".base";
|
|
public static final String BASE_DN_KEY = LDAP_CONFIG_PREFIX + ".base";
|
|
public static final String BASE_DN_DEFAULT = "";
|
|
public static final String BASE_DN_DEFAULT = "";
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Base DN used in user search.
|
|
|
|
+ */
|
|
|
|
+ public static final String USER_BASE_DN_KEY =
|
|
|
|
+ LDAP_CONFIG_PREFIX + ".userbase";
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Base DN used in group search.
|
|
|
|
+ */
|
|
|
|
+ public static final String GROUP_BASE_DN_KEY =
|
|
|
|
+ LDAP_CONFIG_PREFIX + ".groupbase";
|
|
|
|
+
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Any additional filters to apply when searching for users
|
|
* Any additional filters to apply when searching for users
|
|
*/
|
|
*/
|
|
@@ -200,7 +213,7 @@ public class LdapGroupsMapping
|
|
|
|
|
|
private static final Log LOG = LogFactory.getLog(LdapGroupsMapping.class);
|
|
private static final Log LOG = LogFactory.getLog(LdapGroupsMapping.class);
|
|
|
|
|
|
- private static final SearchControls SEARCH_CONTROLS = new SearchControls();
|
|
|
|
|
|
+ static final SearchControls SEARCH_CONTROLS = new SearchControls();
|
|
static {
|
|
static {
|
|
SEARCH_CONTROLS.setSearchScope(SearchControls.SUBTREE_SCOPE);
|
|
SEARCH_CONTROLS.setSearchScope(SearchControls.SUBTREE_SCOPE);
|
|
}
|
|
}
|
|
@@ -214,7 +227,8 @@ public class LdapGroupsMapping
|
|
private String keystorePass;
|
|
private String keystorePass;
|
|
private String bindUser;
|
|
private String bindUser;
|
|
private String bindPassword;
|
|
private String bindPassword;
|
|
- private String baseDN;
|
|
|
|
|
|
+ private String userbaseDN;
|
|
|
|
+ private String groupbaseDN;
|
|
private String groupSearchFilter;
|
|
private String groupSearchFilter;
|
|
private String userSearchFilter;
|
|
private String userSearchFilter;
|
|
private String memberOfAttr;
|
|
private String memberOfAttr;
|
|
@@ -315,7 +329,7 @@ public class LdapGroupsMapping
|
|
uidNumber = uidAttribute.get().toString();
|
|
uidNumber = uidAttribute.get().toString();
|
|
}
|
|
}
|
|
if (uidNumber != null && gidNumber != null) {
|
|
if (uidNumber != null && gidNumber != null) {
|
|
- return c.search(baseDN,
|
|
|
|
|
|
+ return c.search(groupbaseDN,
|
|
"(&"+ groupSearchFilter + "(|(" + posixGidAttr + "={0})" +
|
|
"(&"+ groupSearchFilter + "(|(" + posixGidAttr + "={0})" +
|
|
"(" + groupMemberAttr + "={1})))",
|
|
"(" + groupMemberAttr + "={1})))",
|
|
new Object[] {gidNumber, uidNumber},
|
|
new Object[] {gidNumber, uidNumber},
|
|
@@ -350,7 +364,7 @@ public class LdapGroupsMapping
|
|
} else {
|
|
} else {
|
|
String userDn = result.getNameInNamespace();
|
|
String userDn = result.getNameInNamespace();
|
|
groupResults =
|
|
groupResults =
|
|
- c.search(baseDN,
|
|
|
|
|
|
+ c.search(groupbaseDN,
|
|
"(&" + groupSearchFilter + "(" + groupMemberAttr + "={0}))",
|
|
"(&" + groupSearchFilter + "(" + groupMemberAttr + "={0}))",
|
|
new Object[]{userDn},
|
|
new Object[]{userDn},
|
|
SEARCH_CONTROLS);
|
|
SEARCH_CONTROLS);
|
|
@@ -391,7 +405,7 @@ public class LdapGroupsMapping
|
|
DirContext c = getDirContext();
|
|
DirContext c = getDirContext();
|
|
|
|
|
|
// Search for the user. We'll only ever need to look at the first result
|
|
// Search for the user. We'll only ever need to look at the first result
|
|
- NamingEnumeration<SearchResult> results = c.search(baseDN,
|
|
|
|
|
|
+ NamingEnumeration<SearchResult> results = c.search(userbaseDN,
|
|
userSearchFilter, new Object[]{user}, SEARCH_CONTROLS);
|
|
userSearchFilter, new Object[]{user}, SEARCH_CONTROLS);
|
|
// return empty list if the user can not be found.
|
|
// return empty list if the user can not be found.
|
|
if (!results.hasMoreElements()) {
|
|
if (!results.hasMoreElements()) {
|
|
@@ -489,7 +503,7 @@ public class LdapGroupsMapping
|
|
filter.append("))");
|
|
filter.append("))");
|
|
LOG.debug("Ldap group query string: " + filter.toString());
|
|
LOG.debug("Ldap group query string: " + filter.toString());
|
|
NamingEnumeration<SearchResult> groupResults =
|
|
NamingEnumeration<SearchResult> groupResults =
|
|
- context.search(baseDN,
|
|
|
|
|
|
+ context.search(groupbaseDN,
|
|
filter.toString(),
|
|
filter.toString(),
|
|
SEARCH_CONTROLS);
|
|
SEARCH_CONTROLS);
|
|
while (groupResults.hasMoreElements()) {
|
|
while (groupResults.hasMoreElements()) {
|
|
@@ -575,7 +589,20 @@ public class LdapGroupsMapping
|
|
conf.get(BIND_PASSWORD_FILE_KEY, BIND_PASSWORD_FILE_DEFAULT));
|
|
conf.get(BIND_PASSWORD_FILE_KEY, BIND_PASSWORD_FILE_DEFAULT));
|
|
}
|
|
}
|
|
|
|
|
|
- baseDN = conf.get(BASE_DN_KEY, BASE_DN_DEFAULT);
|
|
|
|
|
|
+ String baseDN = conf.getTrimmed(BASE_DN_KEY, BASE_DN_DEFAULT);
|
|
|
|
+
|
|
|
|
+ //User search base which defaults to base dn.
|
|
|
|
+ userbaseDN = conf.getTrimmed(USER_BASE_DN_KEY, baseDN);
|
|
|
|
+ if (LOG.isDebugEnabled()) {
|
|
|
|
+ LOG.debug("Usersearch baseDN: " + userbaseDN);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //Group search base which defaults to base dn.
|
|
|
|
+ groupbaseDN = conf.getTrimmed(GROUP_BASE_DN_KEY, baseDN);
|
|
|
|
+ if (LOG.isDebugEnabled()) {
|
|
|
|
+ LOG.debug("Groupsearch baseDN: " + userbaseDN);
|
|
|
|
+ }
|
|
|
|
+
|
|
groupSearchFilter =
|
|
groupSearchFilter =
|
|
conf.get(GROUP_SEARCH_FILTER_KEY, GROUP_SEARCH_FILTER_DEFAULT);
|
|
conf.get(GROUP_SEARCH_FILTER_KEY, GROUP_SEARCH_FILTER_DEFAULT);
|
|
userSearchFilter =
|
|
userSearchFilter =
|