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