ASF Bugzilla – Attachment 11618 Details for
Bug 27748
ldap auth periodically fails, requires restart
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Rollup of LDAP fixes to v2.1.0 against v2.0.49
httpd-2.1.0-ldap.patch (text/plain), 21.21 KB, created by
Graham Leggett
on 2004-05-20 22:47:43 UTC
(
hide
)
Description:
Rollup of LDAP fixes to v2.1.0 against v2.0.49
Filename:
MIME Type:
Creator:
Graham Leggett
Created:
2004-05-20 22:47:43 UTC
Size:
21.21 KB
patch
obsolete
>Only in httpd-2.1: ABOUT_APACHE >Only in httpd-2.1: acinclude.m4 >Only in httpd-2.1: Apache.dsp >Only in httpd-2.1: Apache.dsw >Only in httpd-2.1: apachenw.mcp.zip >Only in httpd-2.1: build >Only in httpd-2.1: BuildBin.dsp >Only in httpd-2.1: buildconf >Only in httpd-2.1: CHANGES >Only in httpd-2.1: CHANGES~ >Only in httpd-2.1: .#CHANGES.1.935 >Only in httpd-2.1: config.layout >Only in httpd-2.1: config.log >Only in httpd-2.1: config.nice >Only in httpd-2.1: config.status >Only in httpd-2.1: configure >Only in httpd-2.1: configure.in >Only in httpd-2.1: CVS >Only in httpd-2.1: .cvsignore >Only in httpd-2.1: .deps >Only in httpd-2.1: docs >Only in httpd-2.1: emacs-style >Only in httpd-2.1: .gdbinit >Only in httpd-2.1: httpd-2.0HEAD-alpha.tar.gz >Only in httpd-2.1: httpd.spec >Only in httpd-2.1: httpd.tar >Only in httpd-2.1: include >Only in httpd-2.1: INSTALL >Only in httpd-2.1: InstallBin.dsp >Only in httpd-2.1: .#KEYS.1.13 >Only in httpd-2.1: LAYOUT >Only in httpd-2.1: libhttpd.dsp >Only in httpd-2.1: LICENSE >Only in httpd-2.1: Makefile >Only in httpd-2.1: Makefile.in >Only in httpd-2.1: Makefile.win >Only in httpd-2.1: minfrin >Only in httpd-2.1/modules: aaa >Only in httpd-2.1/modules: arch >Only in httpd-2.1/modules: cache >Only in httpd-2.1/modules: config5.m4 >Only in httpd-2.1/modules: CVS >Only in httpd-2.1/modules: .cvsignore >Only in httpd-2.1/modules: dav >Only in httpd-2.1/modules: .deps >Only in httpd-2.1/modules: echo >Only in httpd-2.1/modules/experimental: boundas >Only in httpd-2.1/modules/experimental: cache_cache.c >Only in httpd-2.1/modules/experimental: cache_cache.h >Only in httpd-2.1/modules/experimental: cache_hash.c >Only in httpd-2.1/modules/experimental: cache_hash.h >Only in httpd-2.1/modules/experimental: cache_pqueue.c >Only in httpd-2.1/modules/experimental: cache_pqueue.h >Only in httpd-2.1/modules/experimental: cache_storage.c >Only in httpd-2.1/modules/experimental: cache_util.c >Only in httpd-2.1/modules/experimental: CVS >Only in httpd-2.1/modules/experimental: .cvsignore >Only in httpd-2.1/modules/experimental: .deps >Only in httpd-2.1/modules/experimental: Makefile >diff -u -r httpd-2.0.49/modules/experimental/mod_auth_ldap.c httpd-2.1/modules/experimental/mod_auth_ldap.c >--- httpd-2.0.49/modules/experimental/mod_auth_ldap.c 2004-05-21 00:04:30.000000000 +0200 >+++ httpd-2.1/modules/experimental/mod_auth_ldap.c 2004-05-20 23:48:48.000000000 +0200 >@@ -42,7 +42,7 @@ > #include "http_request.h" > #include "util_ldap.h" > >-#ifndef APU_HAS_LDAP >+#if !APR_HAS_LDAP > #error mod_auth_ldap requires APR-util to have LDAP support built in > #endif > >@@ -113,7 +113,6 @@ > static char* derive_codepage_from_lang (apr_pool_t *p, char *language) > { > int lang_len; >- int check_short = 0; > char *charset; > > if (!language) /* our default codepage */ >@@ -330,7 +329,6 @@ > > /* sanity check - if server is down, retry it up to 5 times */ > if (result == LDAP_SERVER_DOWN) { >- util_ldap_connection_destroy(ldc); > if (failures++ <= 5) { > goto start_over; > } >@@ -475,8 +473,8 @@ > method_restricted = 1; > > t = reqs[x].requirement; >- w = ap_getword_white(r->pool, &t); >- >+ w = ap_getword_white(r->pool, &t); >+ > if (strcmp(w, "valid-user") == 0) { > /* > * Valid user will always be true if we authenticated with ldap, >@@ -953,6 +951,15 @@ > } > */ > >+ /* make sure that mod_ldap (util_ldap) is loaded */ >+ if (ap_find_linked_module("util_ldap.c") == NULL) { >+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, s, >+ "Module mod_ldap missing. Mod_ldap (aka. util_ldap) " >+ "must be loaded in order for mod_auth_ldap to function properly"); >+ return HTTP_INTERNAL_SERVER_ERROR; >+ >+ } >+ > if (!charset_confname) { > return OK; > } >Only in httpd-2.1/modules/experimental: mod_cache.c >Only in httpd-2.1/modules/experimental: mod_cache.dsp >Only in httpd-2.1/modules/experimental: mod_cache.h >Only in httpd-2.1/modules/experimental: mod_cache.imp >Only in httpd-2.1/modules/experimental: mod_case_filter.c >Only in httpd-2.1/modules/experimental: mod_case_filter_in.c >Only in httpd-2.1/modules/experimental: mod_charset_lite.c >Only in httpd-2.1/modules/experimental: mod_charset_lite.dsp >Only in httpd-2.1/modules/experimental: mod_charset_lite.exp >Only in httpd-2.1/modules/experimental: mod_disk_cache.c >Only in httpd-2.1/modules/experimental: mod_disk_cache.dsp >Only in httpd-2.1/modules/experimental: mod_example.c >Only in httpd-2.1/modules/experimental: mod_mem_cache.c >Only in httpd-2.1/modules/experimental: mod_mem_cache.dsp >Only in httpd-2.1/modules/experimental: modules.mk >diff -u -r httpd-2.0.49/modules/experimental/NWGNUauthldap httpd-2.1/modules/experimental/NWGNUauthldap >--- httpd-2.0.49/modules/experimental/NWGNUauthldap 2004-05-21 00:03:17.000000000 +0200 >+++ httpd-2.1/modules/experimental/NWGNUauthldap 2004-05-20 23:44:17.000000000 +0200 >@@ -186,7 +186,6 @@ > lldapsdk \ > lldapssl \ > lldapx \ >- utilldap \ > $(EOLIST) > > # >@@ -210,7 +209,8 @@ > FILES_nlm_Ximports = \ > util_ldap_connection_find \ > util_ldap_connection_close \ >- util_ldap_connection_destroy \ >+ util_ldap_connection_unbind \ >+ util_ldap_connection_cleanup \ > util_ldap_cache_checkuserid \ > util_ldap_cache_compare \ > util_ldap_cache_comparedn \ >diff -u -r httpd-2.0.49/modules/experimental/NWGNUutilldap httpd-2.1/modules/experimental/NWGNUutilldap >--- httpd-2.0.49/modules/experimental/NWGNUutilldap 2004-05-21 00:03:40.000000000 +0200 >+++ httpd-2.1/modules/experimental/NWGNUutilldap 2004-05-20 23:47:02.000000000 +0200 >@@ -223,7 +223,8 @@ > ldap_module \ > util_ldap_connection_find \ > util_ldap_connection_close \ >- util_ldap_connection_destroy \ >+ util_ldap_connection_unbind \ >+ util_ldap_connection_cleanup \ > util_ldap_cache_checkuserid \ > util_ldap_cache_compare \ > util_ldap_cache_comparedn \ >diff -u -r httpd-2.0.49/modules/experimental/README httpd-2.1/modules/experimental/README >--- httpd-2.0.49/modules/experimental/README 2004-05-21 00:03:42.000000000 +0200 >+++ httpd-2.1/modules/experimental/README 2004-02-21 13:09:44.000000000 +0200 >@@ -16,7 +16,7 @@ > the example module did as the various callbacks were made. > > To include the example module in your server add --enable-example to the >-other ./configure arguments executed from the httpd-2.0 directory. After >+other ./configure arguments executed from the httpd-2.1 directory. After > that run 'make'. > > To add another module of your own: >diff -u -r httpd-2.0.49/modules/experimental/util_ldap.c httpd-2.1/modules/experimental/util_ldap.c >--- httpd-2.0.49/modules/experimental/util_ldap.c 2004-05-21 00:06:25.000000000 +0200 >+++ httpd-2.1/modules/experimental/util_ldap.c 2004-05-20 23:56:22.000000000 +0200 >@@ -38,7 +38,7 @@ > #include <unistd.h> > #endif > >-#ifndef APU_HAS_LDAP >+#if !APR_HAS_LDAP > #error mod_ldap requires APR-util to have LDAP support built in > #endif > >@@ -88,6 +88,20 @@ > "\"http://www.w3.org/TR/REC-html40/frameset.dtd\">\n" > #endif > >+ >+static void util_ldap_strdup (char **str, const char *newstr) >+{ >+ if (*str) { >+ free(*str); >+ *str = NULL; >+ } >+ >+ if (newstr) { >+ *str = calloc(1, strlen(newstr)+1); >+ strcpy (*str, newstr); >+ } >+} >+ > /* > * Status Handler > * -------------- >@@ -171,32 +185,52 @@ > > > /* >- * Destroys an LDAP connection by unbinding. This function is registered >- * with the pool cleanup function - causing the LDAP connections to be >- * shut down cleanly on graceful restart. >+ * Destroys an LDAP connection by unbinding and closing the connection to >+ * the LDAP server. It is used to bring the connection back to a known >+ * state after an error, and during pool cleanup. > */ >-LDAP_DECLARE_NONSTD(apr_status_t) util_ldap_connection_destroy(void *param) >+LDAP_DECLARE_NONSTD(apr_status_t) util_ldap_connection_unbind(void *param) > { > util_ldap_connection_t *ldc = param; > >- /* unbinding from the LDAP server */ >- if (ldc->ldap) { >- ldap_unbind_s(ldc->ldap); >+ if (ldc) { >+ if (ldc->ldap) { >+ ldap_unbind_s(ldc->ldap); >+ ldc->ldap = NULL; >+ } > ldc->bound = 0; >- ldc->ldap = NULL; > } > >- /* release the lock we were using. The lock should have >- already been released in the close connection call. >- But just in case it wasn't, we first try to get the lock >- before unlocking it to avoid unlocking an unheld lock. >- Unlocking an unheld lock causes problems on NetWare. The >- other option would be to assume that close connection did >- its job. */ >-#if APR_HAS_THREADS >- apr_thread_mutex_trylock(ldc->lock); >- apr_thread_mutex_unlock(ldc->lock); >-#endif >+ return APR_SUCCESS; >+} >+ >+ >+/* >+ * Clean up an LDAP connection by unbinding and unlocking the connection. >+ * This function is registered with the pool cleanup function - causing >+ * the LDAP connections to be shut down cleanly on graceful restart. >+ */ >+LDAP_DECLARE_NONSTD(apr_status_t) util_ldap_connection_cleanup(void *param) >+{ >+ util_ldap_connection_t *ldc = param; >+ >+ if (ldc) { >+ >+ /* unbind and disconnect from the LDAP server */ >+ util_ldap_connection_unbind(ldc); >+ >+ /* free the username and password */ >+ if (ldc->bindpw) { >+ free((void*)ldc->bindpw); >+ } >+ if (ldc->binddn) { >+ free((void*)ldc->binddn); >+ } >+ >+ /* unlock this entry */ >+ util_ldap_connection_close(ldc); >+ >+ } > > return APR_SUCCESS; > } >@@ -290,11 +324,6 @@ > /* always default to LDAP V3 */ > ldap_set_option(ldc->ldap, LDAP_OPT_PROTOCOL_VERSION, &version); > >- >- /* add the cleanup to the pool */ >- apr_pool_cleanup_register(ldc->pool, ldc, >- util_ldap_connection_destroy, >- apr_pool_cleanup_null); > } > > >@@ -313,9 +342,6 @@ > break; > } > >- ldc->bound = 1; >- ldc->reason = "LDAP: connection open successful"; >- > /* free the handle if there was an error > */ > if (LDAP_SUCCESS != result) >@@ -325,6 +351,10 @@ > ldc->bound = 0; > ldc->reason = "LDAP: ldap_simple_bind_s() failed"; > } >+ else { >+ ldc->bound = 1; >+ ldc->reason = "LDAP: connection open successful"; >+ } > > return(result); > } >@@ -362,18 +392,22 @@ > */ > 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; > } > >@@ -383,21 +417,25 @@ > 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); >+ util_ldap_strdup((char**)&(l->binddn), binddn); >+ util_ldap_strdup((char**)&(l->bindpw), 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; > } > } >@@ -426,10 +464,15 @@ > l->host = apr_pstrdup(st->pool, host); > l->port = port; > l->deref = deref; >- l->binddn = apr_pstrdup(st->pool, binddn); >- l->bindpw = apr_pstrdup(st->pool, bindpw); >+ util_ldap_strdup((char**)&(l->binddn), binddn); >+ util_ldap_strdup((char**)&(l->bindpw), bindpw); > l->secure = secure; > >+ /* add the cleanup to the pool */ >+ apr_pool_cleanup_register(l->pool, l, >+ util_ldap_connection_cleanup, >+ apr_pool_cleanup_null); >+ > if (p) { > p->next = l; > } >@@ -531,8 +574,8 @@ > if ((result = ldap_search_ext_s(ldc->ldap, const_cast(reqdn), LDAP_SCOPE_BASE, > "(objectclass=*)", NULL, 1, > NULL, NULL, NULL, -1, &res)) == LDAP_SERVER_DOWN) { >- util_ldap_connection_close(ldc); > ldc->reason = "DN Comparison ldap_search_ext_s() failed with server down"; >+ util_ldap_connection_unbind(ldc); > goto start_over; > } > if (result != LDAP_SUCCESS) { >@@ -584,7 +627,7 @@ > util_url_node_t curnode; > util_compare_node_t *compare_nodep; > util_compare_node_t the_compare_node; >- apr_time_t curtime; >+ apr_time_t curtime = 0; /* silence gcc -Wall */ > int failures = 0; > > util_ldap_state_t *st = >@@ -660,8 +703,8 @@ > if ((result = ldap_compare_s(ldc->ldap, const_cast(dn), const_cast(attrib), const_cast(value))) > == LDAP_SERVER_DOWN) { > /* connection failed - try again */ >- util_ldap_connection_close(ldc); > ldc->reason = "ldap_compare_s() failed with server down"; >+ util_ldap_connection_unbind(ldc); > goto start_over; > } > >@@ -781,6 +824,7 @@ > const_cast(filter), attrs, 0, > NULL, NULL, NULL, -1, &res)) == LDAP_SERVER_DOWN) { > ldc->reason = "ldap_search_ext_s() for user failed with server down"; >+ util_ldap_connection_unbind(ldc); > goto start_over; > } > >@@ -809,7 +853,7 @@ > > /* Grab the dn, copy it into the pool, and free it again */ > dn = ldap_get_dn(ldc->ldap, entry); >- *binddn = apr_pstrdup(st->pool, dn); >+ *binddn = apr_pstrdup(r->pool, dn); > ldap_memfree(dn); > > /* >@@ -835,6 +879,7 @@ > LDAP_SERVER_DOWN) { > ldc->reason = "ldap_simple_bind_s() to check user credentials failed with server down"; > ldap_msgfree(res); >+ util_ldap_connection_unbind(ldc); > goto start_over; > } > >@@ -842,8 +887,18 @@ > if (result != LDAP_SUCCESS) { > ldc->reason = "ldap_simple_bind_s() to check user credentials failed"; > ldap_msgfree(res); >+ util_ldap_connection_unbind(ldc); > return result; > } >+ else { >+ /* >+ * We have just bound the connection to a different user and password >+ * combination, which might be reused unintentionally next time this >+ * connection is used from the connection pool. To ensure no confusion, >+ * we mark the connection as unbound. >+ */ >+ ldc->bound = 0; >+ } > > /* > * Get values for the provided attributes. >@@ -873,22 +928,23 @@ > /* > * Add the new username to the search cache. > */ >- LDAP_CACHE_WRLOCK(); >- the_search_node.username = filter; >- the_search_node.dn = *binddn; >- the_search_node.bindpw = bindpw; >- the_search_node.lastbind = apr_time_now(); >- the_search_node.vals = vals; > if (curl) { >+ LDAP_CACHE_WRLOCK(); >+ the_search_node.username = filter; >+ the_search_node.dn = *binddn; >+ the_search_node.bindpw = bindpw; >+ the_search_node.lastbind = apr_time_now(); >+ the_search_node.vals = vals; > util_ald_cache_insert(curl->search_cache, &the_search_node); >+ LDAP_CACHE_UNLOCK(); > } > ldap_msgfree(res); >- LDAP_CACHE_UNLOCK(); > > ldc->reason = "Authentication successful"; > return LDAP_SUCCESS; > } > >+ > /* > * Reports if ssl support is enabled > * >@@ -916,8 +972,9 @@ > st->cache_bytes = atol(bytes); > > ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server, >- "[%d] ldap cache: Setting shared memory cache size to %d bytes.", >- getpid(), st->cache_bytes); >+ "[%" APR_PID_T_FMT "] ldap cache: Setting shared memory " >+ " cache size to %" APR_SIZE_T_FMT " bytes.", >+ getpid(), st->cache_bytes); > > return NULL; > } >@@ -1025,7 +1082,7 @@ > } > > >-const char *util_ldap_set_cert_type(cmd_parms *cmd, void *dummy, const char *Type) >+static const char *util_ldap_set_cert_type(cmd_parms *cmd, void *dummy, const char *Type) > { > util_ldap_state_t *st = > (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config, >@@ -1073,19 +1130,16 @@ > > static apr_status_t util_ldap_cleanup_module(void *data) > { >+#if APR_HAS_LDAP_SSL && APR_HAS_NOVELL_LDAPSDK > server_rec *s = data; >- > util_ldap_state_t *st = (util_ldap_state_t *)ap_get_module_config( >- s->module_config, &ldap_module); >+ s->module_config, &ldap_module); >+ >+ if (st->ssl_support) >+ ldapssl_client_deinit(); > >- #if APR_HAS_LDAP_SSL >- #if APR_HAS_NOVELL_LDAPSDK >- if (st->ssl_support) >- ldapssl_client_deinit(); >- #endif >- #endif >- >- return(APR_SUCCESS); >+#endif >+ return APR_SUCCESS; > } > > static int util_ldap_post_config(apr_pool_t *p, apr_pool_t *plog, >@@ -1115,7 +1169,7 @@ > s_vhost = s->next; > while (s_vhost) { > ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, result, s, >- "LDAP merging Shared Cache conf: shm=0x%x rmm=0x%x for VHOST: %s", >+ "LDAP merging Shared Cache conf: shm=0x%pp rmm=0x%pp for VHOST: %s", > st->cache_shm, st->cache_rmm, s_vhost->server_hostname); > > st_vhost = (util_ldap_state_t *)ap_get_module_config(s_vhost->module_config, &ldap_module); >Only in httpd-2.1/modules/experimental: util_ldap.c~ >diff -u -r httpd-2.0.49/modules/experimental/util_ldap_cache.c httpd-2.1/modules/experimental/util_ldap_cache.c >--- httpd-2.0.49/modules/experimental/util_ldap_cache.c 2004-05-21 00:06:34.000000000 +0200 >+++ httpd-2.1/modules/experimental/util_ldap_cache.c 2004-02-21 21:50:12.000000000 +0200 >@@ -25,7 +25,7 @@ > #include "util_ldap.h" > #include "util_ldap_cache.h" > >-#ifdef APU_HAS_LDAP >+#if APR_HAS_LDAP > > #if APR_HAS_SHARED_MEMORY > #define MODLDAP_SHMEM_CACHE "/tmp/mod_ldap_cache" >@@ -292,4 +292,4 @@ > } > > >-#endif /* APU_HAS_LDAP */ >+#endif /* APR_HAS_LDAP */ >diff -u -r httpd-2.0.49/modules/experimental/util_ldap_cache.h httpd-2.1/modules/experimental/util_ldap_cache.h >--- httpd-2.0.49/modules/experimental/util_ldap_cache.h 2004-05-21 00:06:38.000000000 +0200 >+++ httpd-2.1/modules/experimental/util_ldap_cache.h 2004-02-21 21:50:12.000000000 +0200 >@@ -21,7 +21,7 @@ > */ > > /* this whole thing disappears if LDAP is not enabled */ >-#ifdef APU_HAS_LDAP >+#if APR_HAS_LDAP > > > /* >@@ -195,5 +195,5 @@ > char *util_ald_cache_display_stats(apr_pool_t *p, util_ald_cache_t *cache, > char *name); > >-#endif /* APU_HAS_LDAP */ >+#endif /* APR_HAS_LDAP */ > #endif /* APU_LDAP_CACHE_H */ >diff -u -r httpd-2.0.49/modules/experimental/util_ldap_cache_mgr.c httpd-2.1/modules/experimental/util_ldap_cache_mgr.c >--- httpd-2.0.49/modules/experimental/util_ldap_cache_mgr.c 2004-05-21 00:06:40.000000000 +0200 >+++ httpd-2.1/modules/experimental/util_ldap_cache_mgr.c 2004-02-21 21:50:12.000000000 +0200 >@@ -26,7 +26,7 @@ > #include "util_ldap_cache.h" > #include <apr_strings.h> > >-#ifdef APU_HAS_LDAP >+#if APR_HAS_LDAP > > /* only here until strdup is gone */ > #include <string.h> >@@ -515,4 +515,4 @@ > return buf; > } > >-#endif /* APU_HAS_LDAP */ >+#endif /* APR_HAS_LDAP */ >Only in httpd-2.1/modules: filters >Only in httpd-2.1/modules: generators >Only in httpd-2.1/modules: http >Only in httpd-2.1/modules: loggers >Only in httpd-2.1/modules: Makefile >Only in httpd-2.1/modules: Makefile.in >Only in httpd-2.1/modules: mappers >Only in httpd-2.1/modules: metadata >Only in httpd-2.1/modules: NWGNUmakefile >Only in httpd-2.1/modules: proxy >Only in httpd-2.1/modules: README >Only in httpd-2.1/modules: ssl >Only in httpd-2.1/modules: test >Only in httpd-2.1: modules.c >Only in httpd-2.1: NOTICE >Only in httpd-2.1: NWGNUmakefile >Only in httpd-2.1: os >Only in httpd-2.1: README >Only in httpd-2.1: README.platforms >Only in httpd-2.1: ROADMAP >Only in httpd-2.1: server >Only in httpd-2.1: srclib >Only in httpd-2.1: STATUS >Only in httpd-2.1: .#STATUS.1.688 >Only in httpd-2.1: support >Only in httpd-2.1: test >Only in httpd-2.1: VERSIONING
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 27748
:
11078
| 11618