--- /dev/null
+--- apache_1.3.12/src/modules/standard/mod_rewrite.c.wiget Wed Aug 23 17:32:28 2000
++++ apache_1.3.12/src/modules/standard/mod_rewrite.c Wed Aug 23 18:33:51 2000
+@@ -98,6 +98,9 @@
+ #include <sys/uio.h>
+ #endif
+
++#include <stdlib.h>
++#include <stdio.h>
++
+ /*
+ ** +-------------------------------------------------------+
+ ** | |
+@@ -151,6 +154,14 @@
+ echo " (perhaps you need to add -ldbm, -lndbm or -lgdbm to EXTRA_LIBS)"
+ CFLAGS="$CFLAGS -DNO_DBM_REWRITEMAP"
+ fi
++ . ./helpers/find-ldap-lib
++ if [ "x$found_ldap" = "x1" ]; then
++ echo " enabling LDAP support for mod_rewrite"
++ else
++ echo " disabling LDAP support for mod_rewrite"
++ echo " (perhaps you need to add -llber -lldap to EXTRA_LIBS)"
++ CFLAGS="$CFLAGS -DNO_LDAP_REWRITEMAP"
++ fi
+ * ConfigEnd
+ * MODULE-DEFINITION-END
+ */
+@@ -480,6 +491,16 @@
+ "because no NDBM support is compiled in");
+ #endif
+ }
++ else if (strncmp(a2, "ldap:", 4) == 0) {
++#ifndef NO_LDAP_REWRITEMAP
++ new->type = MAPTYPE_LDAP;
++ new->datafile = a2;
++/* new->checkfile = ap_pstrcat(cmd->pool, a2+5, LDAP_FILE_SUFFIX, NULL); */
++#else
++ return ap_pstrdup(cmd->pool, "RewriteMap: cannot use LDAP mapfile, "
++ "because no LDAP support is compiled in");
++#endif
++ }
+ else if (strncmp(a2, "prg:", 4) == 0) {
+ new->type = MAPTYPE_PRG;
+ new->datafile = a2+4;
+@@ -2792,6 +2813,48 @@
+ return NULL;
+ #endif
+ }
++ else if (s->type == MAPTYPE_LDAP) {
++#ifndef NO_LDAP_REWRITEMAP
++/* FIXME */
++/* if (stat(s->checkfile, &st) == -1) {
++ ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
++ "mod_rewrite: can't access LDAP RewriteMap "
++ "file %s", s->checkfile);
++ rewritelog(r, 1, "can't open LDAP RewriteMap file, "
++ "see error log");
++ return NULL;
++ } */
++ rewritelog(r, 1, "MAPTYPE_LDAP: ok ");
++ value = get_cache_string(cachep, s->name, CACHEMODE_TS,
++ st.st_mtime, key);
++ if (value == NULL) {
++ rewritelog(r, 6,
++ "cache lookup FAILED, forcing new map lookup");
++ if ((value =
++ lookup_map_ldap(r, s->datafile, key)) != NULL) {
++ rewritelog(r, 5, "map lookup OK: map=%s[ldap] key=%s "
++ "-> val=%s", s->name, key, value);
++ set_cache_string(cachep, s->name, CACHEMODE_TS,
++ st.st_mtime, key, value);
++ return value;
++ }
++ else {
++ rewritelog(r, 5, "map lookup FAILED: map=%s[ldap] "
++ "key=%s", s->name, key);
++ set_cache_string(cachep, s->name, CACHEMODE_TS,
++ st.st_mtime, key, "");
++ return NULL;
++ }
++ }
++ else {
++ rewritelog(r, 5, "cache lookup OK: map=%s[ldap] key=%s "
++ "-> val=%s", s->name, key, value);
++ return value[0] != '\0' ? value : NULL;
++ }
++#else
++ return NULL;
++#endif
++ }
+ else if (s->type == MAPTYPE_PRG) {
+ if ((value =
+ lookup_map_program(r, s->fpin, s->fpout, key)) != NULL) {
+@@ -2929,6 +2992,71 @@
+ dbm_close(dbmfp);
+ }
+ return value;
++}
++#endif
++
++#ifndef NO_LDAP_REWRITEMAP
++/* FIXME */
++static char *lookup_map_ldap(request_rec *r, char *url, char *key)
++{
++#define LDAP_URL_MAX 512
++ LDAP *ld;
++ LDAPMessage *msg, *entry;
++ char **temp;
++ int res;
++ char *url_p;
++
++ url_p = (char *)malloc((size_t)LDAP_URL_MAX);
++ snprintf(url_p, LDAP_URL_MAX, url, key);
++ ld=ldap_open("localhost", 389);
++
++ if (!ld)
++ return NULL;
++
++ res = ldap_simple_bind_s(ld,NULL,NULL);
++ if (res!=LDAP_SUCCESS) {
++ ldap_unbind(ld);
++ return NULL;
++ }
++
++/*
++ int ldap_url_search_s( ld, url, attrsonly, res )
++ LDAP *ld;
++ char *url;
++ int attrsonly;
++ LDAPMessage **res;
++
++ char *ldap_first_attribute(ld, entry, berptr)
++ LDAP *ld;
++ LDAPMessage *entry;
++ BerElement **berptr;
++
++*/
++
++ res = ldap_url_search_s(ld, url_p, 0, &msg );
++ free(url_p);
++ if ((res!=LDAP_SUCCESS) || !msg)
++ {
++/* ldap_perror(ld,"lookup_map_ldap"); */
++ ldap_unbind(ld);
++ return NULL;
++ }
++ entry = ldap_first_entry(ld, msg);
++ if (!entry) {
++ ldap_msgfree(msg);
++ return NULL;
++ }
++
++ temp = ldap_get_values(ld, entry, "homedirectory");
++ if (! temp) {
++ return NULL;
++ }
++
++ /* Assumes that the above ldap_get_values call only returns 1 value */
++/* strncpy(value, temp[0], (size_t)MAX_PATH); */
++
++/* return (char *)value; */
++ return temp[0];
+ }
+ #endif
+
+--- apache_1.3.12/src/modules/standard/mod_rewrite.h.wiget Thu Oct 21 22:45:38 1999
++++ apache_1.3.12/src/modules/standard/mod_rewrite.h Mon Jun 5 21:11:11 2000
+@@ -179,6 +179,11 @@
+ #include <sys/locking.h>
+ #endif
+
++#ifndef NO_LDAP_REWRITEMAP
++#include <lber.h>
++#include <ldap.h>
++#endif
++
+
+ /*
+ **
+@@ -219,6 +224,7 @@
+ #define MAPTYPE_PRG 1<<2
+ #define MAPTYPE_INT 1<<3
+ #define MAPTYPE_RND 1<<4
++#define MAPTYPE_LDAP 1<<5
+
+ #define ENGINE_DISABLED 1<<0
+ #define ENGINE_ENABLED 1<<1
+@@ -434,6 +440,9 @@
+ static char *lookup_map_txtfile(request_rec *r, char *file, char *key);
+ #ifndef NO_DBM_REWRITEMAP
+ static char *lookup_map_dbmfile(request_rec *r, char *file, char *key);
++#endif
++#ifndef NO_LDAP_REWRITEMAP
++static char *lookup_map_ldap(request_rec *r, char *url, char *key);
+ #endif
+ static char *lookup_map_program(request_rec *r, int fpin,
+ int fpout, char *key);
+--- /dev/null Tue May 5 22:32:27 1998
++++ apache_1.3.12/src/helpers/find-ldap-lib Wed Aug 23 18:32:53 2000
+@@ -0,0 +1,15 @@
++if [ "x$found_ldap" = "x" ]; then
++ if ./helpers/TestCompile func ldap_open; then
++ found_ldap=1
++ else
++ found_ldap=0
++ LDAP_LIB=""
++ if ./helpers/TestCompile lib "ldap -llber" ldap_open; then
++ LDAP_LIB="-lldap -llber"
++ found_ldap=1
++ fi
++ if [ "x$found_ldap" = "x1" ]; then
++ echo " + using $LDAP_LIB for LDAP support"
++ fi
++ fi
++fi