Avoid using deprecated openldap functions.
Implement ldap_sslinit{A,W}, improve cldap_open{A,W}. Add stub implementation for ldap_startup and ldap_stop_tls_s.
This commit is contained in:
parent
58968a2867
commit
20d0e80e61
|
@ -9615,9 +9615,9 @@ LDAPLIBS=""
|
||||||
|
|
||||||
if test "$ac_cv_header_ldap_h" = "yes" -a "$ac_cv_header_lber_h" = "yes"
|
if test "$ac_cv_header_ldap_h" = "yes" -a "$ac_cv_header_lber_h" = "yes"
|
||||||
then
|
then
|
||||||
echo "$as_me:$LINENO: checking for ldap_init in -lldap" >&5
|
echo "$as_me:$LINENO: checking for ldap_initialize in -lldap" >&5
|
||||||
echo $ECHO_N "checking for ldap_init in -lldap... $ECHO_C" >&6
|
echo $ECHO_N "checking for ldap_initialize in -lldap... $ECHO_C" >&6
|
||||||
if test "${ac_cv_lib_ldap_ldap_init+set}" = set; then
|
if test "${ac_cv_lib_ldap_ldap_initialize+set}" = set; then
|
||||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
else
|
else
|
||||||
ac_check_lib_save_LIBS=$LIBS
|
ac_check_lib_save_LIBS=$LIBS
|
||||||
|
@ -9635,11 +9635,11 @@ extern "C"
|
||||||
#endif
|
#endif
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
builtin and then its argument prototype would still apply. */
|
builtin and then its argument prototype would still apply. */
|
||||||
char ldap_init ();
|
char ldap_initialize ();
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
ldap_init ();
|
ldap_initialize ();
|
||||||
;
|
;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -9665,20 +9665,20 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); }; }; then
|
(exit $ac_status); }; }; then
|
||||||
ac_cv_lib_ldap_ldap_init=yes
|
ac_cv_lib_ldap_ldap_initialize=yes
|
||||||
else
|
else
|
||||||
echo "$as_me: failed program was:" >&5
|
echo "$as_me: failed program was:" >&5
|
||||||
sed 's/^/| /' conftest.$ac_ext >&5
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
ac_cv_lib_ldap_ldap_init=no
|
ac_cv_lib_ldap_ldap_initialize=no
|
||||||
fi
|
fi
|
||||||
rm -f conftest.err conftest.$ac_objext \
|
rm -f conftest.err conftest.$ac_objext \
|
||||||
conftest$ac_exeext conftest.$ac_ext
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
LIBS=$ac_check_lib_save_LIBS
|
LIBS=$ac_check_lib_save_LIBS
|
||||||
fi
|
fi
|
||||||
echo "$as_me:$LINENO: result: $ac_cv_lib_ldap_ldap_init" >&5
|
echo "$as_me:$LINENO: result: $ac_cv_lib_ldap_ldap_initialize" >&5
|
||||||
echo "${ECHO_T}$ac_cv_lib_ldap_ldap_init" >&6
|
echo "${ECHO_T}$ac_cv_lib_ldap_ldap_initialize" >&6
|
||||||
if test $ac_cv_lib_ldap_ldap_init = yes; then
|
if test $ac_cv_lib_ldap_ldap_initialize = yes; then
|
||||||
echo "$as_me:$LINENO: checking for ber_init in -llber" >&5
|
echo "$as_me:$LINENO: checking for ber_init in -llber" >&5
|
||||||
echo $ECHO_N "checking for ber_init in -llber... $ECHO_C" >&6
|
echo $ECHO_N "checking for ber_init in -llber... $ECHO_C" >&6
|
||||||
if test "${ac_cv_lib_lber_ber_init+set}" = set; then
|
if test "${ac_cv_lib_lber_ber_init+set}" = set; then
|
||||||
|
|
|
@ -545,7 +545,7 @@ dnl **** Check for OpenLDAP ***
|
||||||
AC_SUBST(LDAPLIBS,"")
|
AC_SUBST(LDAPLIBS,"")
|
||||||
if test "$ac_cv_header_ldap_h" = "yes" -a "$ac_cv_header_lber_h" = "yes"
|
if test "$ac_cv_header_ldap_h" = "yes" -a "$ac_cv_header_lber_h" = "yes"
|
||||||
then
|
then
|
||||||
AC_CHECK_LIB(ldap, ldap_init,
|
AC_CHECK_LIB(ldap, ldap_initialize,
|
||||||
[AC_CHECK_LIB(lber, ber_init,
|
[AC_CHECK_LIB(lber, ber_init,
|
||||||
[AC_DEFINE(HAVE_LDAP, 1, [Define if you have the OpenLDAP development environment])
|
[AC_DEFINE(HAVE_LDAP, 1, [Define if you have the OpenLDAP development environment])
|
||||||
LDAPLIBS="-lldap -llber"])])
|
LDAPLIBS="-lldap -llber"])])
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include "wine/port.h"
|
#include "wine/port.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
|
@ -39,25 +40,228 @@
|
||||||
#include "winldap_private.h"
|
#include "winldap_private.h"
|
||||||
#include "wldap32.h"
|
#include "wldap32.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_LDAP
|
||||||
/* Should eventually be determined by the algorithm documented on MSDN. */
|
/* Should eventually be determined by the algorithm documented on MSDN. */
|
||||||
static const WCHAR defaulthost[] = { 'l','o','c','a','l','h','o','s','t',0 };
|
static const WCHAR defaulthost[] = { 'l','o','c','a','l','h','o','s','t',0 };
|
||||||
|
|
||||||
|
/* Split a space separated string of hostnames into a string array */
|
||||||
|
static char **split_hostnames( const char *hostnames )
|
||||||
|
{
|
||||||
|
char **res, *str, *p, *q;
|
||||||
|
unsigned int i = 0;
|
||||||
|
|
||||||
|
str = strdupU( hostnames );
|
||||||
|
if (!str) return NULL;
|
||||||
|
|
||||||
|
p = str;
|
||||||
|
while (isspace( *p )) p++;
|
||||||
|
if (*p) i++;
|
||||||
|
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
if (isspace( *p ))
|
||||||
|
{
|
||||||
|
while (isspace( *p )) p++;
|
||||||
|
if (*p) i++;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
res = HeapAlloc( GetProcessHeap(), 0, (i + 1) * sizeof(char *) );
|
||||||
|
if (!res)
|
||||||
|
{
|
||||||
|
HeapFree( GetProcessHeap(), 0, str );
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = str;
|
||||||
|
while (isspace( *p )) p++;
|
||||||
|
|
||||||
|
q = p;
|
||||||
|
i = 0;
|
||||||
|
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
if (p[1] != '\0')
|
||||||
|
{
|
||||||
|
if (isspace( *p ))
|
||||||
|
{
|
||||||
|
*p = '\0'; p++;
|
||||||
|
res[i] = strdupU( q );
|
||||||
|
if (!res[i]) goto oom;
|
||||||
|
i++;
|
||||||
|
|
||||||
|
while (isspace( *p )) p++;
|
||||||
|
q = p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
res[i] = strdupU( q );
|
||||||
|
if (!res[i]) goto oom;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
res[i] = NULL;
|
||||||
|
|
||||||
|
HeapFree( GetProcessHeap(), 0, str );
|
||||||
|
return res;
|
||||||
|
|
||||||
|
oom:
|
||||||
|
for (--i; i >= 0; i--)
|
||||||
|
strfreeU( res[i] );
|
||||||
|
|
||||||
|
HeapFree( GetProcessHeap(), 0, res );
|
||||||
|
HeapFree( GetProcessHeap(), 0, str );
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Determine if a URL starts with a known LDAP scheme */
|
||||||
|
static int has_ldap_scheme( char *url )
|
||||||
|
{
|
||||||
|
if (!strncasecmp( url, "ldap://", 7 ) ||
|
||||||
|
!strncasecmp( url, "ldaps://", 8 ) ||
|
||||||
|
!strncasecmp( url, "ldapi://", 8 ) ||
|
||||||
|
!strncasecmp( url, "cldap://", 8 )) return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flatten an array of hostnames into a space separated string of URLs.
|
||||||
|
* Prepend a given scheme and append a given portnumber to each hostname
|
||||||
|
* if necessary.
|
||||||
|
*/
|
||||||
|
static char *join_hostnames( char *scheme, char **hostnames, ULONG portnumber )
|
||||||
|
{
|
||||||
|
char *res, *p, *q, **v;
|
||||||
|
unsigned int i = 0, size = 0;
|
||||||
|
static const char sep[] = " ", fmt[] = ":%ld";
|
||||||
|
char port[6];
|
||||||
|
|
||||||
|
sprintf( port, fmt, portnumber );
|
||||||
|
|
||||||
|
for (v = hostnames; *v; v++)
|
||||||
|
{
|
||||||
|
if (!has_ldap_scheme( *v ))
|
||||||
|
{
|
||||||
|
size += strlen( scheme );
|
||||||
|
q = *v;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/* skip past colon in scheme prefix */
|
||||||
|
q = strchr( *v, '/' );
|
||||||
|
|
||||||
|
size += strlen( *v );
|
||||||
|
|
||||||
|
if (!strchr( q, ':' ))
|
||||||
|
size += strlen( port );
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
size += (i - 1) * strlen( sep );
|
||||||
|
|
||||||
|
res = HeapAlloc( GetProcessHeap(), 0, size + 1 );
|
||||||
|
if (!res) return NULL;
|
||||||
|
|
||||||
|
p = res;
|
||||||
|
for (v = hostnames; *v; v++)
|
||||||
|
{
|
||||||
|
if (v != hostnames)
|
||||||
|
{
|
||||||
|
strcpy( p, sep );
|
||||||
|
p += strlen( sep );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!has_ldap_scheme( *v ))
|
||||||
|
{
|
||||||
|
strcpy( p, scheme );
|
||||||
|
p += strlen( scheme );
|
||||||
|
q = *v;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/* skip past colon in scheme prefix */
|
||||||
|
q = strchr( *v, '/' );
|
||||||
|
|
||||||
|
strcpy( p, *v );
|
||||||
|
p += strlen( *v );
|
||||||
|
|
||||||
|
if (!strchr( q, ':' ))
|
||||||
|
{
|
||||||
|
strcpy( p, port );
|
||||||
|
p += strlen( port );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *urlify_hostnames( char *scheme, char *hostnames, ULONG port )
|
||||||
|
{
|
||||||
|
char *url, **strarray;
|
||||||
|
|
||||||
|
strarray = split_hostnames( hostnames );
|
||||||
|
url = join_hostnames( scheme, strarray, port );
|
||||||
|
strarrayfreeU( strarray );
|
||||||
|
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(wldap32);
|
WINE_DEFAULT_DEBUG_CHANNEL(wldap32);
|
||||||
|
|
||||||
WLDAP32_LDAP *cldap_openA( PCHAR hostname, ULONG portnumber )
|
WLDAP32_LDAP *cldap_openA( PCHAR hostname, ULONG portnumber )
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_LDAP
|
||||||
|
WLDAP32_LDAP *ld = NULL;
|
||||||
|
WCHAR *hostnameW = NULL;
|
||||||
|
|
||||||
TRACE( "(%s, %ld)\n", debugstr_a(hostname), portnumber );
|
TRACE( "(%s, %ld)\n", debugstr_a(hostname), portnumber );
|
||||||
|
|
||||||
/* FIXME: should use UDP instead of TCP */
|
if (hostname) {
|
||||||
return ldap_openA( hostname, portnumber );
|
hostnameW = strAtoW( hostname );
|
||||||
|
if (!hostnameW) goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
ld = cldap_openW( hostnameW, portnumber );
|
||||||
|
|
||||||
|
exit:
|
||||||
|
strfreeW( hostnameW );
|
||||||
|
return ld;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
WLDAP32_LDAP *cldap_openW( PWCHAR hostname, ULONG portnumber )
|
WLDAP32_LDAP *cldap_openW( PWCHAR hostname, ULONG portnumber )
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_LDAP
|
||||||
|
LDAP *ld = NULL;
|
||||||
|
char *hostnameU = NULL, *url = NULL;
|
||||||
|
|
||||||
TRACE( "(%s, %ld)\n", debugstr_w(hostname), portnumber );
|
TRACE( "(%s, %ld)\n", debugstr_w(hostname), portnumber );
|
||||||
|
|
||||||
/* FIXME: should use UDP instead of TCP */
|
if (hostname) {
|
||||||
return ldap_openW( hostname, portnumber );
|
hostnameU = strWtoU( hostname );
|
||||||
|
if (!hostnameU) goto exit;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
hostnameU = strWtoU( defaulthost );
|
||||||
|
if (!hostnameU) goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
url = urlify_hostnames( "cldap://", hostnameU, portnumber );
|
||||||
|
if (!url) goto exit;
|
||||||
|
|
||||||
|
ldap_initialize( &ld, url );
|
||||||
|
|
||||||
|
exit:
|
||||||
|
strfreeU( hostnameU );
|
||||||
|
strfreeU( url );
|
||||||
|
return ld;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ULONG ldap_connect( WLDAP32_LDAP *ld, LDAP_TIMEVAL *timeout )
|
ULONG ldap_connect( WLDAP32_LDAP *ld, LDAP_TIMEVAL *timeout )
|
||||||
|
@ -65,7 +269,7 @@ ULONG ldap_connect( WLDAP32_LDAP *ld, LDAP_TIMEVAL *timeout )
|
||||||
TRACE( "(%p, %p)\n", ld, timeout );
|
TRACE( "(%p, %p)\n", ld, timeout );
|
||||||
|
|
||||||
if (!ld || !timeout) return WLDAP32_LDAP_PARAM_ERROR;
|
if (!ld || !timeout) return WLDAP32_LDAP_PARAM_ERROR;
|
||||||
return LDAP_SUCCESS;
|
return LDAP_SUCCESS; /* FIXME: do something, e.g. ping the host */
|
||||||
}
|
}
|
||||||
|
|
||||||
WLDAP32_LDAP *ldap_initA( PCHAR hostname, ULONG portnumber )
|
WLDAP32_LDAP *ldap_initA( PCHAR hostname, ULONG portnumber )
|
||||||
|
@ -95,7 +299,7 @@ WLDAP32_LDAP *ldap_initW( PWCHAR hostname, ULONG portnumber )
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LDAP
|
#ifdef HAVE_LDAP
|
||||||
LDAP *ld = NULL;
|
LDAP *ld = NULL;
|
||||||
char *hostnameU = NULL;
|
char *hostnameU = NULL, *url = NULL;
|
||||||
|
|
||||||
TRACE( "(%s, %ld)\n", debugstr_w(hostname), portnumber );
|
TRACE( "(%s, %ld)\n", debugstr_w(hostname), portnumber );
|
||||||
|
|
||||||
|
@ -108,10 +312,14 @@ WLDAP32_LDAP *ldap_initW( PWCHAR hostname, ULONG portnumber )
|
||||||
if (!hostnameU) goto exit;
|
if (!hostnameU) goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
ld = ldap_init( hostnameU, portnumber );
|
url = urlify_hostnames( "ldap://", hostnameU, portnumber );
|
||||||
|
if (!url) goto exit;
|
||||||
|
|
||||||
|
ldap_initialize( &ld, url );
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
strfreeU( hostnameU );
|
strfreeU( hostnameU );
|
||||||
|
strfreeU( url );
|
||||||
return ld;
|
return ld;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -145,7 +353,7 @@ WLDAP32_LDAP *ldap_openW( PWCHAR hostname, ULONG portnumber )
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LDAP
|
#ifdef HAVE_LDAP
|
||||||
LDAP *ld = NULL;
|
LDAP *ld = NULL;
|
||||||
char *hostnameU = NULL;
|
char *hostnameU = NULL, *url = NULL;
|
||||||
|
|
||||||
TRACE( "(%s, %ld)\n", debugstr_w(hostname), portnumber );
|
TRACE( "(%s, %ld)\n", debugstr_w(hostname), portnumber );
|
||||||
|
|
||||||
|
@ -158,10 +366,70 @@ WLDAP32_LDAP *ldap_openW( PWCHAR hostname, ULONG portnumber )
|
||||||
if (!hostnameU) goto exit;
|
if (!hostnameU) goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
ld = ldap_open( hostnameU, portnumber );
|
url = urlify_hostnames( "ldap://", hostnameU, portnumber );
|
||||||
|
if (!url) goto exit;
|
||||||
|
|
||||||
|
ldap_initialize( &ld, url );
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
strfreeU( hostnameU );
|
strfreeU( hostnameU );
|
||||||
|
strfreeU( url );
|
||||||
|
return ld;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
WLDAP32_LDAP *ldap_sslinitA( PCHAR hostname, ULONG portnumber, int secure )
|
||||||
|
{
|
||||||
|
#ifdef HAVE_LDAP
|
||||||
|
WLDAP32_LDAP *ld;
|
||||||
|
WCHAR *hostnameW = NULL;
|
||||||
|
|
||||||
|
TRACE( "(%s, %ld, 0x%08x)\n", debugstr_a(hostname), portnumber, secure );
|
||||||
|
|
||||||
|
if (hostname) {
|
||||||
|
hostnameW = strAtoW( hostname );
|
||||||
|
if (!hostnameW) return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ld = ldap_sslinitW( hostnameW, portnumber, secure );
|
||||||
|
|
||||||
|
strfreeW( hostnameW );
|
||||||
|
return ld;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
WLDAP32_LDAP *ldap_sslinitW( PWCHAR hostname, ULONG portnumber, int secure )
|
||||||
|
{
|
||||||
|
#ifdef HAVE_LDAP
|
||||||
|
WLDAP32_LDAP *ld;
|
||||||
|
char *hostnameU = NULL, *url = NULL;
|
||||||
|
|
||||||
|
TRACE( "(%s, %ld, 0x%08x)\n", debugstr_w(hostname), portnumber, secure );
|
||||||
|
|
||||||
|
if (hostname) {
|
||||||
|
hostnameU = strWtoU( hostname );
|
||||||
|
if (!hostnameU) goto exit;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
hostnameU = strWtoU( defaulthost );
|
||||||
|
if (!hostnameU) goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (secure)
|
||||||
|
url = urlify_hostnames( "ldaps://", hostnameU, portnumber );
|
||||||
|
else
|
||||||
|
url = urlify_hostnames( "ldap://", hostnameU, portnumber );
|
||||||
|
|
||||||
|
if (!url) goto exit;
|
||||||
|
ldap_initialize( &ld, url );
|
||||||
|
|
||||||
|
exit:
|
||||||
|
strfreeU( hostnameU );
|
||||||
|
strfreeU( url );
|
||||||
return ld;
|
return ld;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -231,3 +499,15 @@ exit:
|
||||||
#endif
|
#endif
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ULONG ldap_startup( PLDAP_VERSION_INFO version, HANDLE *instance )
|
||||||
|
{
|
||||||
|
TRACE( "(%p, %p)\n", version, instance );
|
||||||
|
return LDAP_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN ldap_stop_tls_s( WLDAP32_LDAP *ld )
|
||||||
|
{
|
||||||
|
TRACE( "(%p)\n", ld );
|
||||||
|
return 0; /* FIXME: find a way to stop tls on a connection */
|
||||||
|
}
|
||||||
|
|
|
@ -373,8 +373,12 @@ ULONG ldap_simple_bindA(WLDAP32_LDAP*,PCHAR,PCHAR);
|
||||||
ULONG ldap_simple_bindW(WLDAP32_LDAP*,PWCHAR,PWCHAR);
|
ULONG ldap_simple_bindW(WLDAP32_LDAP*,PWCHAR,PWCHAR);
|
||||||
ULONG ldap_simple_bind_sA(WLDAP32_LDAP*,PCHAR,PCHAR);
|
ULONG ldap_simple_bind_sA(WLDAP32_LDAP*,PCHAR,PCHAR);
|
||||||
ULONG ldap_simple_bind_sW(WLDAP32_LDAP*,PWCHAR,PWCHAR);
|
ULONG ldap_simple_bind_sW(WLDAP32_LDAP*,PWCHAR,PWCHAR);
|
||||||
|
WLDAP32_LDAP *ldap_sslinitA(PCHAR,ULONG,int);
|
||||||
|
WLDAP32_LDAP *ldap_sslinitW(PWCHAR,ULONG,int);
|
||||||
ULONG ldap_start_tls_sA(WLDAP32_PLDAP,PULONG,WLDAP32_LDAPMessage**,PLDAPControlA*,PLDAPControlA*);
|
ULONG ldap_start_tls_sA(WLDAP32_PLDAP,PULONG,WLDAP32_LDAPMessage**,PLDAPControlA*,PLDAPControlA*);
|
||||||
ULONG ldap_start_tls_sW(WLDAP32_PLDAP,PULONG,WLDAP32_LDAPMessage**,PLDAPControlW*,PLDAPControlW*);
|
ULONG ldap_start_tls_sW(WLDAP32_PLDAP,PULONG,WLDAP32_LDAPMessage**,PLDAPControlW*,PLDAPControlW*);
|
||||||
|
ULONG ldap_startup(PLDAP_VERSION_INFO,HANDLE*);
|
||||||
|
BOOLEAN ldap_stop_tls_s(WLDAP32_PLDAP);
|
||||||
ULONG ldap_ufn2dnA(PCHAR,PCHAR*);
|
ULONG ldap_ufn2dnA(PCHAR,PCHAR*);
|
||||||
ULONG ldap_ufn2dnW(PWCHAR,PWCHAR*);
|
ULONG ldap_ufn2dnW(PWCHAR,PWCHAR*);
|
||||||
ULONG WLDAP32_ldap_unbind(WLDAP32_LDAP*);
|
ULONG WLDAP32_ldap_unbind(WLDAP32_LDAP*);
|
||||||
|
|
|
@ -22,6 +22,17 @@
|
||||||
* to and from ansi (A), wide character (W) and utf8 (U) encodings.
|
* to and from ansi (A), wide character (W) and utf8 (U) encodings.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
static inline char *strdupU( const char *src )
|
||||||
|
{
|
||||||
|
char *dst;
|
||||||
|
|
||||||
|
if (!src) return NULL;
|
||||||
|
dst = HeapAlloc( GetProcessHeap(), 0, (strlen( src ) + 1) * sizeof(char) );
|
||||||
|
if (dst)
|
||||||
|
strcpy( dst, src );
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
|
||||||
static inline LPWSTR strAtoW( LPCSTR str )
|
static inline LPWSTR strAtoW( LPCSTR str )
|
||||||
{
|
{
|
||||||
LPWSTR ret = NULL;
|
LPWSTR ret = NULL;
|
||||||
|
|
|
@ -188,7 +188,7 @@
|
||||||
198 stub ldap_set_dbg_flags
|
198 stub ldap_set_dbg_flags
|
||||||
199 stub ldap_set_dbg_routine
|
199 stub ldap_set_dbg_routine
|
||||||
200 cdecl ldap_memfree(ptr) ldap_memfreeA
|
200 cdecl ldap_memfree(ptr) ldap_memfreeA
|
||||||
201 stub ldap_startup
|
201 cdecl ldap_startup(ptr ptr)
|
||||||
202 cdecl ldap_cleanup(long)
|
202 cdecl ldap_cleanup(long)
|
||||||
203 cdecl ldap_search_ext_sW(ptr wstr long wstr ptr long ptr ptr ptr long ptr)
|
203 cdecl ldap_search_ext_sW(ptr wstr long wstr ptr long ptr ptr ptr long ptr)
|
||||||
204 stub ldap_search_init_page
|
204 stub ldap_search_init_page
|
||||||
|
@ -204,9 +204,9 @@
|
||||||
214 cdecl ldap_simple_bindW(ptr wstr wstr)
|
214 cdecl ldap_simple_bindW(ptr wstr wstr)
|
||||||
215 cdecl ldap_simple_bind_sA(ptr str str)
|
215 cdecl ldap_simple_bind_sA(ptr str str)
|
||||||
216 cdecl ldap_simple_bind_sW(ptr wstr wstr)
|
216 cdecl ldap_simple_bind_sW(ptr wstr wstr)
|
||||||
217 stub ldap_sslinit
|
217 cdecl ldap_sslinit(str long long) ldap_sslinitA
|
||||||
218 stub ldap_sslinitA
|
218 cdecl ldap_sslinitA(str long long)
|
||||||
219 stub ldap_sslinitW
|
219 cdecl ldap_sslinitW(str long long)
|
||||||
220 cdecl ldap_ufn2dn(str ptr) ldap_ufn2dnA
|
220 cdecl ldap_ufn2dn(str ptr) ldap_ufn2dnA
|
||||||
221 cdecl ldap_ufn2dnA(str ptr)
|
221 cdecl ldap_ufn2dnA(str ptr)
|
||||||
222 cdecl ldap_ufn2dnW(wstr ptr)
|
222 cdecl ldap_ufn2dnW(wstr ptr)
|
||||||
|
@ -240,6 +240,6 @@
|
||||||
322 stub ldap_parse_vlv_controlA
|
322 stub ldap_parse_vlv_controlA
|
||||||
329 cdecl ldap_start_tls_sW(ptr ptr ptr ptr ptr)
|
329 cdecl ldap_start_tls_sW(ptr ptr ptr ptr ptr)
|
||||||
330 cdecl ldap_start_tls_sA(ptr ptr ptr ptr ptr)
|
330 cdecl ldap_start_tls_sA(ptr ptr ptr ptr ptr)
|
||||||
331 stub ldap_stop_tls_s
|
331 cdecl ldap_stop_tls_s(ptr)
|
||||||
332 cdecl ldap_extended_operation_sW(ptr wstr ptr ptr ptr ptr ptr)
|
332 cdecl ldap_extended_operation_sW(ptr wstr ptr ptr ptr ptr ptr)
|
||||||
333 cdecl ldap_extended_operation_sA(ptr str ptr ptr ptr ptr ptr)
|
333 cdecl ldap_extended_operation_sA(ptr str ptr ptr ptr ptr ptr)
|
||||||
|
|
Loading…
Reference in New Issue