APACHE 2.0 STATUS: -*-text-*-
-Last modified at [$Date: 2004/04/12 17:38:39 $]
+Last modified at [$Date: 2004/04/12 21:17:42 $]
Release:
modules/experimental/mod_auth_ldap.c: r1.22
+1: bnicholes, minfrin, trawick
- *) util_ldap_connection_find() locks each cached connection while
- testing to see if it matches the specified criteria. But then
- it forgets to unlock the connection if it doesn't match. This
- results in all of the connections eventually being locked and
- mod_ldap having to create additional connections to handle new
- requests. This patch unlocks the connection if it doesn't meet
- the connection criteria.
- modules/experimental/util_ldap.c: r1.23
- +1: bnicholes, minfrin, trawick
-
*) Update the ldc->binddn and ldc->bindpw associated with the LDAP
connection to match the authenticating user DN and password after
ldap_simple_bind_s() is called to authenticate the user. Otherwise
*/
for (l=st->connections,p=NULL; l; l=l->next) {
#if APR_HAS_THREADS
- if ( (APR_SUCCESS == apr_thread_mutex_trylock(l->lock)) &&
-#else
- if (
+ if (APR_SUCCESS == apr_thread_mutex_trylock(l->lock)) {
#endif
- l->port == port
- && strcmp(l->host, host) == 0
- && ( (!l->binddn && !binddn) || (l->binddn && binddn && !strcmp(l->binddn, binddn)) )
- && ( (!l->bindpw && !bindpw) || (l->bindpw && bindpw && !strcmp(l->bindpw, bindpw)) )
- && l->deref == deref
- && l->secure == secure
- )
+ if ((l->port == port) && (strcmp(l->host, host) == 0) &&
+ ((!l->binddn && !binddn) || (l->binddn && binddn && !strcmp(l->binddn, binddn))) &&
+ ((!l->bindpw && !bindpw) || (l->bindpw && bindpw && !strcmp(l->bindpw, bindpw))) &&
+ (l->deref == deref) && (l->secure == secure)) {
+
break;
+ }
+#if APR_HAS_THREADS
+ /* If this connection didn't match the criteria, then we
+ * need to unlock the mutex so it is available to be reused.
+ */
+ apr_thread_mutex_unlock(l->lock);
+ }
+#endif
p = l;
}
if (!l) {
for (l=st->connections,p=NULL; l; l=l->next) {
#if APR_HAS_THREADS
- if ( (APR_SUCCESS == apr_thread_mutex_trylock(l->lock)) &&
-#else
- if (
+ if (APR_SUCCESS == apr_thread_mutex_trylock(l->lock)) {
+
#endif
- l->port == port
- && strcmp(l->host, host) == 0
- && l->deref == deref
- && l->secure == secure
- ) {
+ if ((l->port == port) && (strcmp(l->host, host) == 0) &&
+ (l->deref == deref) && (l->secure == secure)) {
+
/* the bind credentials have changed */
l->bound = 0;
l->binddn = apr_pstrdup(st->pool, binddn);
l->bindpw = apr_pstrdup(st->pool, bindpw);
break;
}
+#if APR_HAS_THREADS
+ /* If this connection didn't match the criteria, then we
+ * need to unlock the mutex so it is available to be reused.
+ */
+ apr_thread_mutex_unlock(l->lock);
+ }
+#endif
p = l;
}
}