I *can't* win for losing.  Correct win32_auth_ldap.patch - finally.

At 11:24 PM 12/2/2002, William A. Rowe, Jr. wrote:
>Patches attached.

Well... best of intentions... here are corrected patches - the httpd
patch was most borked, both with respect to util_ldap.dsp and my
most recent changes to Apache.dsw.  Sorry... try these, win32
hackers.

Bill
Index: aprutil.dsp
===================================================================
RCS file: /home/cvs/apr-util/aprutil.dsp,v
retrieving revision 1.46
diff -u -r1.46 aprutil.dsp
--- aprutil.dsp 21 Jul 2002 00:22:19 -0000      1.46
+++ aprutil.dsp 1 Dec 2002 21:52:35 -0000
@@ -206,7 +206,10 @@
 # Begin Source File
 
 SOURCE=.\ldap\apr_ldap_compat.c
-# PROP Exclude_From_Build 1
+# End Source File
+# Begin Source File
+
+SOURCE=.\ldap\apr_ldap_url.c
 # End Source File
 # End Group
 # Begin Group "misc"
@@ -323,7 +326,6 @@
 
 !ENDIF 
 
-# PROP Exclude_From_Build 1
 # End Source File
 # Begin Source File
 
@@ -476,6 +478,10 @@
 # Begin Source File
 
 SOURCE=.\include\apr_hooks.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\include\apr_ldap_url.h
 # End Source File
 # Begin Source File
 
Index: libaprutil.dsp
===================================================================
RCS file: /home/cvs/apr-util/libaprutil.dsp,v
retrieving revision 1.41
diff -u -r1.41 libaprutil.dsp
--- libaprutil.dsp      23 Jul 2002 01:45:04 -0000      1.41
+++ libaprutil.dsp      1 Dec 2002 21:52:36 -0000
@@ -212,7 +212,10 @@
 # Begin Source File
 
 SOURCE=.\ldap\apr_ldap_compat.c
-# PROP Exclude_From_Build 1
+# End Source File
+# Begin Source File
+
+SOURCE=.\ldap\apr_ldap_url.c
 # End Source File
 # End Group
 # Begin Group "misc"
@@ -329,7 +332,6 @@
 
 !ENDIF 
 
-# PROP Exclude_From_Build 1
 # End Source File
 # Begin Source File
 
@@ -482,6 +484,10 @@
 # Begin Source File
 
 SOURCE=.\include\apr_hooks.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\include\apr_ldap_url.h
 # End Source File
 # Begin Source File
 
Index: build/apu-conf.m4
===================================================================
RCS file: /home/cvs/apr-util/build/apu-conf.m4,v
retrieving revision 1.45
diff -u -r1.45 apu-conf.m4
--- build/apu-conf.m4   21 Aug 2002 21:42:41 -0000      1.45
+++ build/apu-conf.m4   1 Dec 2002 21:52:38 -0000
@@ -647,7 +647,7 @@
 dnl Find a particular LDAP library
 dnl
 AC_DEFUN(APU_FIND_LDAPLIB,[
-  if test ${apu_has_ldap} != "define"; then
+  if test ${apu_has_ldap} != "1"; then
     ldaplib=$1
     extralib=$2
     unset ac_cv_lib_${ldaplib}_ldap_init
@@ -655,9 +655,9 @@
       [
         APR_ADDTO(APRUTIL_EXPORT_LIBS,[-l${ldaplib} ${extralib}])
         APR_ADDTO(APRUTIL_LIBS,[-l${ldaplib} ${extralib}])
-        AC_CHECK_LIB(${ldaplib}, ldapssl_install_routines, 
apu_has_ldap_netscape_ssl="define", , ${extralib})
-        AC_CHECK_LIB(${ldaplib}, ldap_start_tls_s, apu_has_ldap_starttls="define", , 
${extralib})
-        apu_has_ldap="define";
+        AC_CHECK_LIB(${ldaplib}, ldapssl_install_routines, 
+apu_has_ldap_netscape_ssl="1", , ${extralib})
+        AC_CHECK_LIB(${ldaplib}, ldap_start_tls_s, apu_has_ldap_starttls="1", , 
+${extralib})
+        apu_has_ldap="1";
       ], , ${extralib})
   fi
 ])
@@ -670,9 +670,9 @@
 
 echo $ac_n "${nl}checking for ldap support..."
 
-apu_has_ldap="undef";
-apu_has_ldap_netscape_ssl="undef"
-apu_has_ldap_starttls="undef"
+apu_has_ldap="0";
+apu_has_ldap_netscape_ssl="0"
+apu_has_ldap_starttls="0"
 
 AC_ARG_WITH(ldap-include,[  --with-ldap-include=path  path to ldap include files with 
trailing slash])
 AC_ARG_WITH(ldap-lib,[  --with-ldap-lib=path    path to ldap lib file])
@@ -704,7 +704,7 @@
       APU_FIND_LDAPLIB($LDAPLIB)
     fi
 
-    test ${apu_has_ldap} != "define" && AC_MSG_ERROR(could not find an LDAP library)
+    test ${apu_has_ldap} != "1" && AC_MSG_ERROR(could not find an LDAP library)
     AC_CHECK_LIB(lber, ber_init)
 
     AC_CHECK_HEADERS(ldap.h, ldap_h=["#include <ldap.h>"])
Index: include/apr_ldap.h.in
===================================================================
RCS file: /home/cvs/apr-util/include/apr_ldap.h.in,v
retrieving revision 1.4
diff -u -r1.4 apr_ldap.h.in
--- include/apr_ldap.h.in       13 Mar 2002 20:40:48 -0000      1.4
+++ include/apr_ldap.h.in       1 Dec 2002 21:52:38 -0000
@@ -74,14 +74,40 @@
  */
 
 /* this will be defined if LDAP support was compiled into apr-util */
-#@apu_has_ldap@        APU_HAS_LDAP
+#define APR_HAS_LDAP             @apu_has_ldap@
 
 /* this whole thing disappears if LDAP is not enabled */
-#ifdef APU_HAS_LDAP
+#if !APR_HAS_LDAP
+
+#define APR_HAS_LDAP_URL_PARSE    0
+#define APU_HAS_LDAP_NETSCAPE_SSL 0
+#define APU_HAS_LDAP_STARTTLS     0
+
+#else
+
+/* presume all unices do, win32, for example, does not */
+#define APR_HAS_LDAP_URL_PARSE    1
 
 /* LDAP secure capabilities */
-#@apu_has_ldap_netscape_ssl@   APU_HAS_LDAP_NETSCAPE_SSL
-#@apu_has_ldap_starttls@       APU_HAS_LDAP_STARTTLS
+#define APR_HAS_LDAP_NETSCAPE_SSL @apu_has_ldap_netscape_ssl@
+#define APR_HAS_LDAP_STARTTLS     @apu_has_ldap_starttls@
+
+/* These are garbage, our public macros are always APR_HAS_ prefixed,
+ * and use 0/1 values, not defined/undef semantics.  
+ *
+ * Will be deprecated in APR 1.0
+ */
+#if APR_HAS_LDAP
+#define APU_HAS_LDAP
+#endif
+
+#if APR_HAS_LDAP_NETSCAPE_SSL
+#define APU_HAS_LDAP_NETSCAPE_SSL 
+#endif
+
+#if APR_HAS_LDAP_STARTTLS
+#define APU_HAS_LDAP_STARTTLS
+#endif
 
 /* LDAP header files */
 @ldap_h@
@@ -107,6 +133,8 @@
 #else
 #define const_cast(x) (x)
 #endif /* LDAP_VERSION_MAX */
+
+#include "apr_ldap_url.h"
 
 /* Define some errors that are mysteriously gone from OpenLDAP 2.x */
 #ifndef LDAP_URL_ERR_NOTLDAP
Index: include/apr_ldap.hnw
===================================================================
RCS file: /home/cvs/apr-util/include/apr_ldap.hnw,v
retrieving revision 1.2
diff -u -r1.2 apr_ldap.hnw
--- include/apr_ldap.hnw        13 Mar 2002 20:40:48 -0000      1.2
+++ include/apr_ldap.hnw        1 Dec 2002 21:52:38 -0000
@@ -74,14 +74,41 @@
  */
 
 /* this will be defined if LDAP support was compiled into apr-util */
-#define APU_HAS_LDAP
+#define APR_HAS_LDAP             @apu_has_ldap@
 
 /* this whole thing disappears if LDAP is not enabled */
-#ifdef APU_HAS_LDAP
+#if !APR_HAS_LDAP
+
+#define APR_HAS_LDAP_URL_PARSE    0
+#define APU_HAS_LDAP_NETSCAPE_SSL 0
+#define APU_HAS_LDAP_STARTTLS     0
+
+#else
+
+/* presume all unices do, win32, for example, does not */
+#define APR_HAS_LDAP_URL_PARSE    1
 
 /* LDAP secure capabilities */
-//#define APU_HAS_LDAP_NETSCAPE_SSL
-//#define APU_HAS_LDAP_STARTTLS
+#define APR_HAS_LDAP_NETSCAPE_SSL 0
+#define APR_HAS_LDAP_STARTTLS     0
+
+/* These are garbage, our public macros are always APR_HAS_ prefixed,
+ * and use 0/1 values, not defined/undef semantics.  
+ *
+ * Will be deprecated in APR 1.0
+ */
+#if APR_HAS_LDAP
+#define APU_HAS_LDAP
+#endif
+
+#if APR_HAS_LDAP_NETSCAPE_SSL
+#define APU_HAS_LDAP_NETSCAPE_SSL 
+#endif
+
+#if APR_HAS_LDAP_STARTTLS
+#define APU_HAS_LDAP_STARTTLS
+#endif
+
 
 /* LDAP header files */
 #include <ldap.h>
@@ -107,6 +134,8 @@
 #else
 #define const_cast(x) (x)
 #endif /* LDAP_VERSION_MAX */
+
+#include "apr_ldap_url.h"
 
 /* Define some errors that are mysteriously gone from OpenLDAP 2.x */
 #ifndef LDAP_URL_ERR_NOTLDAP
Index: include/apr_ldap.hw
===================================================================
RCS file: /home/cvs/apr-util/include/apr_ldap.hw,v
retrieving revision 1.2
diff -u -r1.2 apr_ldap.hw
--- include/apr_ldap.hw 1 Dec 2002 17:08:51 -0000       1.2
+++ include/apr_ldap.hw 1 Dec 2002 21:52:38 -0000
@@ -52,6 +52,9 @@
  * <http://www.apache.org/>.
  */
 
+#include "apr.h"
+#include "apu.h"
+
 /*
  * apr_ldap.h is generated from apr_ldap.h.in by configure -- do not edit apr_ldap.h
  */
@@ -74,25 +77,57 @@
  */
 
 /* this will be defined if LDAP support was compiled into apr-util */
-#define APU_HAS_LDAP
+#define APR_HAS_LDAP             1
 
 /* this whole thing disappears if LDAP is not enabled */
-#ifdef APU_HAS_LDAP
+#if !APR_HAS_LDAP
+
+#define APR_HAS_LDAP_URL_PARSE    0
+#define APU_HAS_LDAP_NETSCAPE_SSL 0
+#define APU_HAS_LDAP_STARTTLS     0
+
+#else
+
+/* presume all unices do, win32, for example, does not */
+#define APR_HAS_LDAP_URL_PARSE    0
 
 /* LDAP secure capabilities */
-//#define APU_HAS_LDAP_NETSCAPE_SSL
-//#define APU_HAS_LDAP_STARTTLS
+#define APR_HAS_LDAP_NETSCAPE_SSL 0
+#define APR_HAS_LDAP_STARTTLS     0
 
-/* LDAP header files */
-#include <ldap.h>
-#include <lber.h>
-#include <ldap_ssl.h>
+/* These are garbage, our public macros are always APR_HAS_ prefixed,
+ * and use 0/1 values, not defined/undef semantics.  
+ *
+ * Will be deprecated in APR 1.0
+ */
+#if APR_HAS_LDAP
+#define APU_HAS_LDAP
+#endif
 
+#if APR_HAS_LDAP_NETSCAPE_SSL
+#define APU_HAS_LDAP_NETSCAPE_SSL 
+#endif
+
+#if APR_HAS_LDAP_STARTTLS
+#define APU_HAS_LDAP_STARTTLS
+#endif
+
+/* Included in Windows 2000 and later, earlier 9x/NT 4.0 clients
+ * will need to obtain the Active Directory Client Extensions.
+ */
+#include <Winldap.h>
 
 /*
  * LDAP Compatibility
  */
 
+/* Empty declaration, Win32 const'ness in SDK library headers is
+ * generally bogus
+ */
+#define LDAP_CONST
+
+/* These don't apply on Win32, leave them in place for reference 
+ */
 #if LDAP_VERSION_MAX <= 2
 int ldap_search_ext_s(LDAP *ldap, char *base, int scope, char *filter,
                      char **attrs, int attrsonly, void *servertrls, void *clientctrls,
@@ -107,6 +142,8 @@
 #else
 #define const_cast(x) (x)
 #endif /* LDAP_VERSION_MAX */
+
+#include "apr_ldap_url.h"
 
 /* Define some errors that are mysteriously gone from OpenLDAP 2.x */
 #ifndef LDAP_URL_ERR_NOTLDAP
Index: include/apr_ldap_url.h
===================================================================
RCS file: include/apr_ldap_url.h
diff -N include/apr_ldap_url.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ include/apr_ldap_url.h      1 Dec 2002 21:52:38 -0000
@@ -0,0 +1,119 @@
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written
+ *    permission, please contact [EMAIL PROTECTED]
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+#ifndef APR_LDAP_URL_H
+#define APR_LDAP_URL_H
+
+#include "apr_ldap.h"
+
+#if APR_HAS_LDAP_URL_PARSE
+
+#define apr_ldap_url_desc_t             LDAPURLDesc
+#define apr_ldap_is_ldap_url(url)       ldap_is_ldap_url(url)
+#define apr_ldap_is_ldaps_url(url)      ldap_is_ldaps_url(url)
+#define apr_ldap_is_ldapi_url(url)      ldap_is_ldapi_url(url)
+#define apr_ldap_url_parse(url, ludpp)  ldap_url_parse(url, ludpp)
+#define apr_ldap_free_urldesc(ludp)     ldap_free_urldesc(ludp)
+
+#else /* ! APR_HAS_LDAP_URL_PARSE */
+
+/*
+ * types for ldap URL handling
+ */
+typedef struct apr_ldap_url_desc_t {
+    struct  apr_ldap_url_desc_t  *lud_next;
+    char    *lud_scheme;
+    char    *lud_host;
+    int     lud_port;
+    char    *lud_dn;
+    char    **lud_attrs;
+    int     lud_scope;
+    char    *lud_filter;
+    char    **lud_exts;
+    int     lud_crit_exts;
+} apr_ldap_url_desc_t;
+
+#ifndef LDAP_URL_SUCCESS
+#define LDAP_URL_SUCCESS          0x00    /* Success */
+#define LDAP_URL_ERR_MEM          0x01    /* can't allocate memory space */
+#define LDAP_URL_ERR_PARAM        0x02    /* parameter is bad */
+#define LDAP_URL_ERR_BADSCHEME    0x03    /* URL doesn't begin with "ldap[si]://" */
+#define LDAP_URL_ERR_BADENCLOSURE 0x04    /* URL is missing trailing ">" */
+#define LDAP_URL_ERR_BADURL       0x05    /* URL is bad */
+#define LDAP_URL_ERR_BADHOST      0x06    /* host port is bad */
+#define LDAP_URL_ERR_BADATTRS     0x07    /* bad (or missing) attributes */
+#define LDAP_URL_ERR_BADSCOPE     0x08    /* scope string is invalid (or missing) */
+#define LDAP_URL_ERR_BADFILTER    0x09    /* bad or missing filter */
+#define LDAP_URL_ERR_BADEXTS      0x0a    /* bad or missing extensions */
+#endif
+
+/*
+ * in url.c
+ *
+ * need _ext varients
+ */
+APU_DECLARE(int) apr_ldap_is_ldap_url(LDAP_CONST char *url);
+
+APU_DECLARE(int) apr_ldap_is_ldaps_url(LDAP_CONST char *url);
+
+APU_DECLARE(int) apr_ldap_is_ldapi_url(LDAP_CONST char *url);
+
+APU_DECLARE(int) apr_ldap_url_parse(LDAP_CONST char *url, 
+                                    apr_ldap_url_desc_t **ludpp);
+
+APU_DECLARE(void) apr_ldap_free_urldesc(apr_ldap_url_desc_t *ludp);
+
+#endif /* ! APR_HAS_LDAP_URL_PARSE */
+
+#endif /* APR_LDAP_URL_H */
Index: ldap/Makefile.in
===================================================================
RCS file: /home/cvs/apr-util/ldap/Makefile.in,v
retrieving revision 1.6
diff -u -r1.6 Makefile.in
--- ldap/Makefile.in    8 May 2002 22:00:58 -0000       1.6
+++ ldap/Makefile.in    1 Dec 2002 21:52:39 -0000
@@ -2,6 +2,7 @@
 
 INCLUDES = @APRUTIL_PRIV_INCLUDES@ @APR_INCLUDES@ @APRUTIL_INCLUDES@
 
+# we presume Unicies aren't in need of apr_parse_uri
 TARGETS = apr_ldap_compat.lo
 
 # bring in rules.mk for standard functionality
Index: ldap/apr_ldap_url.c
===================================================================
RCS file: ldap/apr_ldap_url.c
diff -N ldap/apr_ldap_url.c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ ldap/apr_ldap_url.c 1 Dec 2002 21:52:40 -0000
@@ -0,0 +1,753 @@
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written
+ *    permission, please contact [EMAIL PROTECTED]
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+/* Portions Copyright 1998-2002 The OpenLDAP Foundation
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.  A copy of this license is available at
+ * http://www.OpenLDAP.org/license.html or in file LICENSE in the
+ * top-level directory of the distribution.
+ * 
+ * OpenLDAP is a registered trademark of the OpenLDAP Foundation.
+ * 
+ * Individual files and/or contributed packages may be copyright by
+ * other parties and subject to additional restrictions.
+ * 
+ * This work is derived from the University of Michigan LDAP v3.3
+ * distribution.  Information concerning this software is available
+ * at: http://www.umich.edu/~dirsvcs/ldap/
+ * 
+ * This work also contains materials derived from public sources.
+ * 
+ * Additional information about OpenLDAP can be obtained at:
+ *     http://www.openldap.org/
+ */
+
+/* 
+ * Portions Copyright (c) 1992-1996 Regents of the University of Michigan.
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of Michigan at Ann Arbor. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific prior written permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ */
+
+/*  apr_ldap_url.c -- LDAP URL (RFC 2255) related routines
+ *
+ *  Win32 and perhaps other non-OpenLDAP based ldap libraries may be
+ *  missing ldap_url_* APIs.  We focus here on the one significant
+ *  aspect, which is parsing.  We have [for the time being] omitted
+ *  the ldap_url_search APIs.
+ *
+ *  LDAP URLs look like this:
+ *    ldap[is]://host:port[/[dn[?[attributes][?[scope][?[filter][?exts]]]]]]
+ *
+ *  where:
+ *   attributes is a comma separated list
+ *   scope is one of these three strings:  base one sub (default=base)
+ *   filter is an string-represented filter as in RFC 2254
+ *
+ *  e.g.,  ldap://host:port/dc=com?o,cn?base?o=openldap?extension
+ *
+ *  Tolerates URLs that look like: <ldapurl> and <URL:ldapurl>
+ */
+
+#include "apr_ldap.h"
+#include "apr_ldap_url.h"
+#include "apr_general.h"
+#include "apr_strings.h"
+
+#ifndef LDAPS_PORT
+#define LDAPS_PORT              636  /* ldaps:/// default LDAP over TLS port */
+#endif
+
+#define LDAP_URL_PREFIX         "ldap://";
+#define LDAP_URL_PREFIX_LEN     (sizeof(LDAP_URL_PREFIX)-1)
+#define LDAPS_URL_PREFIX        "ldaps://"
+#define LDAPS_URL_PREFIX_LEN    (sizeof(LDAPS_URL_PREFIX)-1)
+#define LDAPI_URL_PREFIX        "ldapi://"
+#define LDAPI_URL_PREFIX_LEN    (sizeof(LDAPI_URL_PREFIX)-1)
+#define LDAP_URL_URLCOLON       "URL:"
+#define LDAP_URL_URLCOLON_LEN   (sizeof(LDAP_URL_URLCOLON)-1)
+
+#define LDAP_STRDUP(x) strdup(x)
+#define LDAP_CALLOC(n, s) calloc(n, s)
+#define LDAP_MALLOC(n) malloc(n)
+#define LDAP_REALLOC(x, n) realloc(x, n)
+#define LDAP_FREE(x) free(x)
+#define LDAP_VFREE(a) ldap_charray_free(a)
+
+#define ldap_utf8_strchr(x, s) strchr(x, *s)
+#define ldap_utf8_strtok(x, s, l) apr_strtok(x, s, l)
+
+/* local functions */
+static const char* skip_url_prefix(const char *url, int *enclosedp,
+                                   const char **scheme);
+
+static void ldap_pvt_hex_unescape(char *s);
+
+static int ldap_pvt_unhex(int c);
+
+static void ldap_charray_free(char **a);
+
+static char **ldap_str2charray(const char *str, const char *brkstr);
+
+APU_DECLARE(int) apr_ldap_is_ldap_url(LDAP_CONST char *url)
+{
+    int enclosed;
+    const char * scheme;
+
+    if( url == NULL ) {
+        return 0;
+    }
+
+    if( skip_url_prefix( url, &enclosed, &scheme ) == NULL ) {
+        return 0;
+    }
+
+    return 1;
+}
+
+APU_DECLARE(int) apr_ldap_is_ldaps_url(LDAP_CONST char *url)
+{
+    int enclosed;
+    const char * scheme;
+
+    if( url == NULL ) {
+        return 0;
+    }
+
+    if( skip_url_prefix( url, &enclosed, &scheme ) == NULL ) {
+        return 0;
+    }
+
+    return strcmp(scheme, "ldaps") == 0;
+}
+
+APU_DECLARE(int) apr_ldap_is_ldapi_url(LDAP_CONST char *url)
+{
+    int enclosed;
+    const char * scheme;
+
+    if( url == NULL ) {
+        return 0;
+    }
+
+    if( skip_url_prefix( url, &enclosed, &scheme ) == NULL ) {
+        return 0;
+    }
+
+    return strcmp(scheme, "ldapi") == 0;
+}
+
+static const char *skip_url_prefix(const char *url, int *enclosedp,
+                                   const char **scheme)
+{
+    /*
+     * return non-zero if this looks like a LDAP URL; zero if not
+     * if non-zero returned, *urlp will be moved past "ldap://"; part of URL
+     */
+    const char *p;
+
+    if ( url == NULL ) {
+        return( NULL );
+    }
+
+    p = url;
+
+    /* skip leading '<' (if any) */
+    if ( *p == '<' ) {
+        *enclosedp = 1;
+        ++p;
+    } else {
+        *enclosedp = 0;
+    }
+
+    /* skip leading "URL:" (if any) */
+    if ( strncasecmp( p, LDAP_URL_URLCOLON, LDAP_URL_URLCOLON_LEN ) == 0 ) {
+        p += LDAP_URL_URLCOLON_LEN;
+    }
+
+    /* check for "ldap://"; prefix */
+    if ( strncasecmp( p, LDAP_URL_PREFIX, LDAP_URL_PREFIX_LEN ) == 0 ) {
+        /* skip over "ldap://"; prefix and return success */
+        p += LDAP_URL_PREFIX_LEN;
+        *scheme = "ldap";
+        return( p );
+    }
+
+    /* check for "ldaps://" prefix */
+    if ( strncasecmp( p, LDAPS_URL_PREFIX, LDAPS_URL_PREFIX_LEN ) == 0 ) {
+        /* skip over "ldaps://" prefix and return success */
+        p += LDAPS_URL_PREFIX_LEN;
+        *scheme = "ldaps";
+        return( p );
+    }
+
+    /* check for "ldapi://" prefix */
+    if ( strncasecmp( p, LDAPI_URL_PREFIX, LDAPI_URL_PREFIX_LEN ) == 0 ) {
+        /* skip over "ldapi://" prefix and return success */
+        p += LDAPI_URL_PREFIX_LEN;
+        *scheme = "ldapi";
+        return( p );
+    }
+
+    return( NULL );
+}
+
+
+static int str2scope(const char *p)
+{
+    if ( strcasecmp( p, "one" ) == 0 ) {
+        return LDAP_SCOPE_ONELEVEL;
+
+    } else if ( strcasecmp( p, "onetree" ) == 0 ) {
+        return LDAP_SCOPE_ONELEVEL;
+
+    } else if ( strcasecmp( p, "base" ) == 0 ) {
+        return LDAP_SCOPE_BASE;
+
+    } else if ( strcasecmp( p, "sub" ) == 0 ) {
+        return LDAP_SCOPE_SUBTREE;
+
+    } else if ( strcasecmp( p, "subtree" ) == 0 ) {
+        return LDAP_SCOPE_SUBTREE;
+    }
+
+    return( -1 );
+}
+
+
+static int ldap_url_parse_ext(LDAP_CONST char *url_in, 
+                              apr_ldap_url_desc_t **ludpp)
+{
+/*
+ *  Pick apart the pieces of an LDAP URL.
+ */
+    apr_ldap_url_desc_t *ludp;
+    char        *p, *q, *r;
+    int         i, enclosed;
+    const char  *scheme = NULL;
+    const char  *url_tmp;
+    char        *url;
+
+    if( url_in == NULL || ludpp == NULL ) {
+        return LDAP_URL_ERR_PARAM;
+    }
+
+    *ludpp = NULL;  /* pessimistic */
+
+    url_tmp = skip_url_prefix( url_in, &enclosed, &scheme );
+
+    if ( url_tmp == NULL ) {
+        return LDAP_URL_ERR_BADSCHEME;
+    }
+
+    /* make working copy of the remainder of the URL */
+    url = LDAP_STRDUP( url_tmp );
+    if ( url == NULL ) {
+        return LDAP_URL_ERR_MEM;
+    }
+
+    if ( enclosed ) {
+        p = &url[strlen(url)-1];
+
+        if( *p != '>' ) {
+            LDAP_FREE( url );
+            return LDAP_URL_ERR_BADENCLOSURE;
+        }
+
+        *p = '\0';
+    }
+
+    /* allocate return struct */
+    ludp = (apr_ldap_url_desc_t *)LDAP_CALLOC( 1, sizeof( apr_ldap_url_desc_t ));
+
+    if ( ludp == NULL ) {
+        LDAP_FREE( url );
+        return LDAP_URL_ERR_MEM;
+    }
+
+    ludp->lud_next = NULL;
+    ludp->lud_host = NULL;
+    ludp->lud_port = LDAP_PORT;
+    ludp->lud_dn = NULL;
+    ludp->lud_attrs = NULL;
+    ludp->lud_filter = NULL;
+    ludp->lud_scope = -1;
+    ludp->lud_filter = NULL;
+    ludp->lud_exts = NULL;
+
+    ludp->lud_scheme = LDAP_STRDUP( scheme );
+
+    if ( ludp->lud_scheme == NULL ) {
+        LDAP_FREE( url );
+        apr_ldap_free_urldesc( ludp );
+        return LDAP_URL_ERR_MEM;
+    }
+
+    if( strcasecmp( ludp->lud_scheme, "ldaps" ) == 0 ) {
+        ludp->lud_port = LDAPS_PORT;
+    }
+
+    /* scan forward for '/' that marks end of hostport and begin. of dn */
+    p = strchr( url, '/' );
+
+    if( p != NULL ) {
+        /* terminate hostport; point to start of dn */
+        *p++ = '\0';
+    }
+
+    /* IPv6 syntax with [ip address]:port */
+    if ( *url == '[' ) {
+        r = strchr( url, ']' );
+        if ( r == NULL ) {
+            LDAP_FREE( url );
+            apr_ldap_free_urldesc( ludp );
+            return LDAP_URL_ERR_BADURL;
+        }
+        *r++ = '\0';
+        q = strchr( r, ':' );
+    } else {
+        q = strchr( url, ':' );
+    }
+
+    if ( q != NULL ) {
+        *q++ = '\0';
+        ldap_pvt_hex_unescape( q );
+
+        if( *q == '\0' ) {
+            LDAP_FREE( url );
+            apr_ldap_free_urldesc( ludp );
+            return LDAP_URL_ERR_BADURL;
+        }
+
+        ludp->lud_port = atoi( q );
+    }
+
+    ldap_pvt_hex_unescape( url );
+
+    /* If [ip address]:port syntax, url is [ip and we skip the [ */
+    ludp->lud_host = LDAP_STRDUP( url + ( *url == '[' ) );
+
+    if( ludp->lud_host == NULL ) {
+        LDAP_FREE( url );
+        apr_ldap_free_urldesc( ludp );
+        return LDAP_URL_ERR_MEM;
+    }
+
+    /*
+     * Kludge.  ldap://111.222.333.444:389??cn=abc,o=company
+     *
+     * On early Novell releases, search references/referrals were returned
+     * in this format, i.e., the dn was kind of in the scope position,
+     * but the required slash is missing. The whole thing is illegal syntax,
+     * but we need to account for it. Fortunately it can't be confused with
+     * anything real.
+     */
+    if( (p == NULL) && (q != NULL) && ((q = strchr( q, '?')) != NULL)) {
+        q++;
+        /* ? immediately followed by question */
+        if( *q == '?') {
+            q++;
+            if( *q != '\0' ) {
+                /* parse dn part */
+                ldap_pvt_hex_unescape( q );
+                ludp->lud_dn = LDAP_STRDUP( q );
+            } else {
+                ludp->lud_dn = LDAP_STRDUP( "" );
+            }
+
+            if( ludp->lud_dn == NULL ) {
+                LDAP_FREE( url );
+                apr_ldap_free_urldesc( ludp );
+                return LDAP_URL_ERR_MEM;
+            }
+        }
+    }
+
+    if( p == NULL ) {
+        LDAP_FREE( url );
+        *ludpp = ludp;
+        return LDAP_URL_SUCCESS;
+    }
+
+    /* scan forward for '?' that may marks end of dn */
+    q = strchr( p, '?' );
+
+    if( q != NULL ) {
+        /* terminate dn part */
+        *q++ = '\0';
+    }
+
+    if( *p != '\0' ) {
+        /* parse dn part */
+        ldap_pvt_hex_unescape( p );
+        ludp->lud_dn = LDAP_STRDUP( p );
+    } else {
+        ludp->lud_dn = LDAP_STRDUP( "" );
+    }
+
+    if( ludp->lud_dn == NULL ) {
+        LDAP_FREE( url );
+        apr_ldap_free_urldesc( ludp );
+        return LDAP_URL_ERR_MEM;
+    }
+
+    if( q == NULL ) {
+        /* no more */
+        LDAP_FREE( url );
+        *ludpp = ludp;
+        return LDAP_URL_SUCCESS;
+    }
+
+    /* scan forward for '?' that may marks end of attributes */
+    p = q;
+    q = strchr( p, '?' );
+
+    if( q != NULL ) {
+        /* terminate attributes part */
+        *q++ = '\0';
+    }
+
+    if( *p != '\0' ) {
+        /* parse attributes */
+        ldap_pvt_hex_unescape( p );
+        ludp->lud_attrs = ldap_str2charray( p, "," );
+
+        if( ludp->lud_attrs == NULL ) {
+            LDAP_FREE( url );
+            apr_ldap_free_urldesc( ludp );
+            return LDAP_URL_ERR_BADATTRS;
+        }
+    }
+
+    if ( q == NULL ) {
+        /* no more */
+        LDAP_FREE( url );
+        *ludpp = ludp;
+        return LDAP_URL_SUCCESS;
+    }
+
+    /* scan forward for '?' that may marks end of scope */
+    p = q;
+    q = strchr( p, '?' );
+
+    if( q != NULL ) {
+        /* terminate the scope part */
+        *q++ = '\0';
+    }
+
+    if( *p != '\0' ) {
+        /* parse the scope */
+        ldap_pvt_hex_unescape( p );
+        ludp->lud_scope = str2scope( p );
+
+        if( ludp->lud_scope == -1 ) {
+            LDAP_FREE( url );
+            apr_ldap_free_urldesc( ludp );
+            return LDAP_URL_ERR_BADSCOPE;
+        }
+    }
+
+    if ( q == NULL ) {
+        /* no more */
+        LDAP_FREE( url );
+        *ludpp = ludp;
+        return LDAP_URL_SUCCESS;
+    }
+
+    /* scan forward for '?' that may marks end of filter */
+    p = q;
+    q = strchr( p, '?' );
+
+    if( q != NULL ) {
+        /* terminate the filter part */
+        *q++ = '\0';
+    }
+
+    if( *p != '\0' ) {
+        /* parse the filter */
+        ldap_pvt_hex_unescape( p );
+
+        if( ! *p ) {
+            /* missing filter */
+            LDAP_FREE( url );
+            apr_ldap_free_urldesc( ludp );
+            return LDAP_URL_ERR_BADFILTER;
+        }
+
+        LDAP_FREE( ludp->lud_filter );
+        ludp->lud_filter = LDAP_STRDUP( p );
+
+        if( ludp->lud_filter == NULL ) {
+            LDAP_FREE( url );
+            apr_ldap_free_urldesc( ludp );
+            return LDAP_URL_ERR_MEM;
+        }
+    }
+
+    if ( q == NULL ) {
+        /* no more */
+        LDAP_FREE( url );
+        *ludpp = ludp;
+        return LDAP_URL_SUCCESS;
+    }
+
+    /* scan forward for '?' that may marks end of extensions */
+    p = q;
+    q = strchr( p, '?' );
+
+    if( q != NULL ) {
+        /* extra '?' */
+        LDAP_FREE( url );
+        apr_ldap_free_urldesc( ludp );
+        return LDAP_URL_ERR_BADURL;
+    }
+
+    /* parse the extensions */
+    ludp->lud_exts = ldap_str2charray( p, "," );
+
+    if( ludp->lud_exts == NULL ) {
+        LDAP_FREE( url );
+        apr_ldap_free_urldesc( ludp );
+        return LDAP_URL_ERR_BADEXTS;
+    }
+
+    for( i=0; ludp->lud_exts[i] != NULL; i++ ) {
+        ldap_pvt_hex_unescape( ludp->lud_exts[i] );
+
+        if( *ludp->lud_exts[i] == '!' ) {
+            /* count the number of critical extensions */
+            ludp->lud_crit_exts++;
+        }
+    }
+
+    if( i == 0 ) {
+        /* must have 1 or more */
+        LDAP_FREE( url );
+        apr_ldap_free_urldesc( ludp );
+        return LDAP_URL_ERR_BADEXTS;
+    }
+
+    /* no more */
+    *ludpp = ludp;
+    LDAP_FREE( url );
+    return LDAP_URL_SUCCESS;
+}
+
+APU_DECLARE(int) apr_ldap_url_parse(LDAP_CONST char *url_in, 
+                                    apr_ldap_url_desc_t **ludpp)
+{
+    int rc = ldap_url_parse_ext( url_in, ludpp );
+
+    if( rc != LDAP_URL_SUCCESS ) {
+        return rc;
+    }
+
+    if ((*ludpp)->lud_scope == -1) {
+        (*ludpp)->lud_scope = LDAP_SCOPE_BASE;
+    }
+
+    if ((*ludpp)->lud_host != NULL && *(*ludpp)->lud_host == '\0') {
+        LDAP_FREE( (*ludpp)->lud_host );
+        (*ludpp)->lud_host = NULL;
+    }
+
+    return rc;
+}
+
+APU_DECLARE(void) apr_ldap_free_urldesc(apr_ldap_url_desc_t *ludp)
+{
+    if ( ludp == NULL ) {
+        return;
+    }
+    
+    if ( ludp->lud_scheme != NULL ) {
+        LDAP_FREE( ludp->lud_scheme );
+    }
+
+    if ( ludp->lud_host != NULL ) {
+        LDAP_FREE( ludp->lud_host );
+    }
+
+    if ( ludp->lud_dn != NULL ) {
+        LDAP_FREE( ludp->lud_dn );
+    }
+
+    if ( ludp->lud_filter != NULL ) {
+        LDAP_FREE( ludp->lud_filter);
+    }
+
+    if ( ludp->lud_attrs != NULL ) {
+        LDAP_VFREE( ludp->lud_attrs );
+    }
+
+    if ( ludp->lud_exts != NULL ) {
+        LDAP_VFREE( ludp->lud_exts );
+    }
+
+    LDAP_FREE( ludp );
+}
+
+
+static void ldap_pvt_hex_unescape(char *s)
+{
+    /*
+     * Remove URL hex escapes from s... done in place.  The basic concept for
+     * this routine is borrowed from the WWW library HTUnEscape() routine.
+     */
+    char    *p;
+
+    for ( p = s; *s != '\0'; ++s ) {
+        if ( *s == '%' ) {
+            if ( *++s == '\0' ) {
+                break;
+            }
+            *p = ldap_pvt_unhex( *s ) << 4;
+            if ( *++s == '\0' ) {
+                break;
+            }
+            *p++ += ldap_pvt_unhex( *s );
+        } else {
+            *p++ = *s;
+        }
+    }
+
+    *p = '\0';
+}
+
+
+static int ldap_pvt_unhex(int c)
+{
+    return( c >= '0' && c <= '9' ? c - '0'
+        : c >= 'A' && c <= 'F' ? c - 'A' + 10
+        : c - 'a' + 10 );
+}
+
+
+static void ldap_charray_free(char **a)
+{
+    char    **p;
+
+    if ( a == NULL ) {
+        return;
+    }
+
+    for ( p = a; *p != NULL; p++ ) {
+        if ( *p != NULL ) {
+            LDAP_FREE( *p );
+        }
+    }
+
+    LDAP_FREE( (char *) a );
+}
+
+static char **ldap_str2charray(const char *str_in, const char *brkstr)
+{
+    char    **res;
+    char    *str, *s;
+    char    *lasts;
+    int i;
+
+    /* protect the input string from strtok */
+    str = LDAP_STRDUP( str_in );
+    if( str == NULL ) {
+        return NULL;
+    }
+
+    i = 1;
+    for ( s = str; *s; s++ ) {
+        if ( ldap_utf8_strchr( brkstr, s ) != NULL ) {
+            i++;
+        }
+    }
+
+    res = (char **) LDAP_MALLOC( (i + 1) * sizeof(char *) );
+
+    if( res == NULL ) {
+        LDAP_FREE( str );
+        return NULL;
+    }
+
+    i = 0;
+
+    for ( s = ldap_utf8_strtok( str, brkstr, &lasts );
+        s != NULL;
+        s = ldap_utf8_strtok( NULL, brkstr, &lasts ) )
+    {
+        res[i] = LDAP_STRDUP( s );
+
+        if(res[i] == NULL) {
+            for( --i ; i >= 0 ; i-- ) {
+                LDAP_FREE( res[i] );
+            }
+            LDAP_FREE( res );
+            LDAP_FREE( str );
+            return NULL;
+        }
+
+        i++;
+    }
+
+    res[i] = NULL;
+
+    LDAP_FREE( str );
+    return( res );
+}
Index: Apache.dsw
===================================================================
RCS file: /home/cvs/httpd-2.0/Apache.dsw,v
retrieving revision 1.91.2.4
diff -u -r1.91.2.4 Apache.dsw
--- Apache.dsw  3 Dec 2002 06:11:37 -0000       1.91.2.4
+++ Apache.dsw  3 Dec 2002 06:41:32 -0000
@@ -206,6 +206,12 @@
     Begin Project Dependency
     Project_Dep_Name libapriconv_ces_modules
     End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name mod_auth_ldap
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name util_ldap
+    End Project Dependency
 }}}
 
 ###############################################################################
Index: modules/experimental/mod_auth_ldap.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/experimental/mod_auth_ldap.c,v
retrieving revision 1.8
diff -u -r1.8 mod_auth_ldap.c
--- modules/experimental/mod_auth_ldap.c        27 Sep 2002 08:49:48 -0000      1.8
+++ modules/experimental/mod_auth_ldap.c        1 Dec 2002 23:40:01 -0000
@@ -642,7 +642,7 @@
                                     const char *url)
 {
     int result;
-    LDAPURLDesc *urld;
+    apr_ldap_url_desc_t *urld;
 
     mod_auth_ldap_config_t *sec = config;
 
@@ -650,7 +650,7 @@
                 cmd->server, "[%d] auth_ldap url parse: `%s'", 
                 getpid(), url);
 
-    result = ldap_url_parse(url, &(urld));
+    result = apr_ldap_url_parse(url, &(urld));
     if (result != LDAP_SUCCESS) {
         switch (result) {
         case LDAP_URL_ERR_NOTLDAP:
@@ -755,7 +755,7 @@
     }
 
     sec->have_ldap_url = 1;
-    ldap_free_urldesc(urld);
+    apr_ldap_free_urldesc(urld);
     return NULL;
 }
 
Index: modules/experimental/mod_auth_ldap.dsp
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/experimental/mod_auth_ldap.dsp,v
retrieving revision 1.1.2.3
diff -u -r1.1.2.3 mod_auth_ldap.dsp
--- modules/experimental/mod_auth_ldap.dsp      1 Dec 2002 23:17:08 -0000       1.1.2.3
+++ modules/experimental/mod_auth_ldap.dsp      1 Dec 2002 23:40:01 -0000
@@ -43,7 +43,7 @@
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I 
"../../srclib/apr-util/include" /I "../../srclib/ldap/include" /D "NDEBUG" /D "WIN32" 
/D "_WINDOWS" /Fd"Release\mod_auth_ldap" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I 
+"../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" 
+/Fd"Release\mod_auth_ldap" /FD /c
 # ADD BASE MTL /nologo /D "NDEBUG" /win32
 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
 # ADD BASE RSC /l 0x409 /d "NDEBUG"
@@ -53,7 +53,7 @@
 # ADD BSC32 /nologo
 LINK32=link.exe
 # ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 
/out:"Release/mod_auth_ldap.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_ldap
-# ADD LINK32 kernel32.lib nsldap32v50.lib /nologo /subsystem:windows /dll /map 
/machine:I386 /out:"Release/mod_auth_ldap.so" /libpath:"..\..\srclib\ldap\lib" 
/base:@..\..\os\win32\BaseAddr.ref,mod_auth_ldap
+# ADD LINK32 kernel32.lib wldap32.lib /nologo /subsystem:windows /dll /map 
+/machine:I386 /out:"Release/mod_auth_ldap.so" 
+/base:@..\..\os\win32\BaseAddr.ref,mod_auth_ldap
 
 !ELSEIF  "$(CFG)" == "mod_auth_ldap - Win32 Debug"
 
@@ -69,7 +69,7 @@
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD 
/c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I 
"../../srclib/apr/include" /I "../../srclib/apr-util/include" /I 
"../../srclib/ldap/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" 
/Fd"Debug\mod_auth_ldap" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I 
+"../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" 
+/D "_WINDOWS" /Fd"Debug\mod_auth_ldap" /FD /c
 # ADD BASE MTL /nologo /D "_DEBUG" /win32
 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
 # ADD BASE RSC /l 0x409 /d "_DEBUG"
@@ -79,7 +79,7 @@
 # ADD BSC32 /nologo
 LINK32=link.exe
 # ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map 
/debug /machine:I386 /out:"Debug/mod_auth_ldap.so" 
/base:@..\..\os\win32\BaseAddr.ref,mod_auth_ldap
-# ADD LINK32 kernel32.lib nsldap32v50.lib /nologo /subsystem:windows /dll 
/incremental:no /map /debug /machine:I386 /out:"Debug/mod_auth_ldap.so" 
/libpath:"..\..\srclib\ldap\lib" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_ldap
+# ADD LINK32 kernel32.lib wldap32.lib /nologo /subsystem:windows /dll /incremental:no 
+/map /debug /machine:I386 /out:"Debug/mod_auth_ldap.so" 
+/base:@..\..\os\win32\BaseAddr.ref,mod_auth_ldap
 
 !ENDIF 
 
Index: util_ldap.dsp
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/experimental/util_ldap.dsp,v
retrieving revision 1.1.2.5
retrieving revision 1.1.2.4
diff -u -r1.1.2.5 -r1.1.2.4
--- modules/experimental/util_ldap.dsp  3 Dec 2002 00:03:13 -0000       1.1.2.5
+++ modules/experimental/util_ldap.dsp  1 Dec 2002 23:36:19 -0000       1.1.2.4
@@ -43,7 +43,7 @@
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I 
"../../srclib/apr-util/include" /I "../../srclib/ldap/include" /D "NDEBUG" /D "WIN32" 
/D "_WINDOWS" /D "LDAP_DECLARE_EXPORT" /Fd"Release\util_ldap" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I 
+"../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D 
+"LDAP_DECLARE_EXPORT" /Fd"Release\util_ldap" /FD /c
 # ADD BASE MTL /nologo /D "NDEBUG" /win32
 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
 # ADD BASE RSC /l 0x409 /d "NDEBUG"
@@ -53,7 +53,7 @@
 # ADD BSC32 /nologo
 LINK32=link.exe
 # ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 
/out:"Release/util_ldap.so" /base:@..\..\os\win32\BaseAddr.ref,util_ldap
-# ADD LINK32 kernel32.lib nsldap32v50.lib /nologo /subsystem:windows /dll /map 
/machine:I386 /out:"Release/util_ldap.so" /libpath:"..\..\srclib\ldap\lib" 
/base:@..\..\os\win32\BaseAddr.ref,util_ldap
+# ADD LINK32 kernel32.lib wldap32.lib /nologo /subsystem:windows /dll /map 
+/machine:I386 /out:"Release/util_ldap.so" /base:@..\..\os\win32\BaseAddr.ref,util_ldap
 
 !ELSEIF  "$(CFG)" == "util_ldap - Win32 Debug"
 
@@ -69,7 +69,7 @@
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD 
/c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I 
"../../srclib/apr/include" /I "../../srclib/apr-util/include" /I 
"../../srclib/ldap/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D 
"LDAP_DECLARE_EXPORT" /Fd"Debug\util_ldap" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I 
+"../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" 
+/D "_WINDOWS" /D "LDAP_DECLARE_EXPORT" /Fd"Debug\util_ldap" /FD /c
 # ADD BASE MTL /nologo /D "_DEBUG" /win32
 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
 # ADD BASE RSC /l 0x409 /d "_DEBUG"
@@ -79,7 +79,7 @@
 # ADD BSC32 /nologo
 LINK32=link.exe
 # ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map 
/debug /machine:I386 /out:"Debug/util_ldap.so" 
/base:@..\..\os\win32\BaseAddr.ref,util_ldap
-# ADD LINK32 kernel32.lib nsldap32v50.lib /nologo /subsystem:windows /dll 
/incremental:no /map /debug /machine:I386 /out:"Debug/util_ldap.so" 
/libpath:"..\..\srclib\ldap\lib" /base:@..\..\os\win32\BaseAddr.ref,util_ldap
+# ADD LINK32 kernel32.lib wldap32.lib /nologo /subsystem:windows /dll /incremental:no 
+/map /debug /machine:I386 /out:"Debug/util_ldap.so" 
+/base:@..\..\os\win32\BaseAddr.ref,util_ldap
 
 !ENDIF 
 

Reply via email to