Author: fschumacher
Date: Thu Jul 28 20:19:40 2016
New Revision: 1754467
URL: http://svn.apache.org/viewvc?rev=1754467&view=rev
Log:
Fix Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=59839
Apply roleSearchAsUser to all nested searches in JNDIRealm.
Modified:
tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java?rev=1754467&r1=1754466&r2=1754467&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java (original)
+++ tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java Thu Jul 28
20:19:40 2016
@@ -1946,18 +1946,8 @@ public class JNDIRealm extends RealmBase
}
// Perform the configured search and process the results
- NamingEnumeration<SearchResult> results = null;
- boolean thisRoleSearchAsUser = isRoleSearchAsUser();
- try {
- if (thisRoleSearchAsUser) {
- userCredentialsAdd(context, dn, user.getPassword());
- }
- results = context.search(base, filter, controls);
- } finally {
- if (thisRoleSearchAsUser) {
- userCredentialsRemove(context);
- }
- }
+ NamingEnumeration<SearchResult> results = searchAsUser(context, user,
base, filter, controls,
+ isRoleSearchAsUser());
if (results == null)
return list; // Should never happen, but just in case ...
@@ -2008,7 +1998,8 @@ public class JNDIRealm extends RealmBase
containerLog.trace("Perform a nested group search with
base "+ roleBase + " and filter " + filter);
}
- results = context.search(roleBase, filter, controls);
+ results = searchAsUser(context, user, roleBase, filter,
controls,
+ isRoleSearchAsUser());
try {
while (results.hasMore()) {
@@ -2044,6 +2035,45 @@ public class JNDIRealm extends RealmBase
return list;
}
+ /**
+ * Perform the search on the context as the {@code dn}, when
+ * {@code searchAsUser} is {@code true}, otherwise search the context with
+ * the default credentials.
+ *
+ * @param context
+ * context to search on
+ * @param user
+ * user to bind on
+ * @param base
+ * base to start the search from
+ * @param filter
+ * filter to use for the search
+ * @param controls
+ * controls to use for the search
+ * @param searchAsUser
+ * {@code true} when the search should be done as user, or
+ * {@code false} for using the default credentials
+ * @return enumeration with all found entries
+ * @throws NamingException
+ * if a directory server error occurs
+ */
+ private NamingEnumeration<SearchResult> searchAsUser(DirContext context,
+ User user, String base, String filter,
+ SearchControls controls, boolean searchAsUser) throws
NamingException {
+ NamingEnumeration<SearchResult> results;
+ try {
+ if (searchAsUser) {
+ userCredentialsAdd(context, user.getDN(), user.getPassword());
+ }
+ results = context.search(base, filter, controls);
+ } finally {
+ if (searchAsUser) {
+ userCredentialsRemove(context);
+ }
+ }
+ return results;
+ }
+
/**
* Return a String representing the value of the specified attribute.
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1754467&r1=1754466&r2=1754467&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Thu Jul 28 20:19:40 2016
@@ -76,6 +76,10 @@
extend SecurityManager protection to the system property replacement
feature of the digester. (markt)
</add>
+ <fix>
+ <bug>59839</bug>: Apply <code>roleSearchAsUser</code> to all nested
searches
+ in JNDIRealm. (fschumacher)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]