Index: helpers/basic_auth/LDAP/squid_ldap_auth.c =================================================================== RCS file: /squid/squid3/helpers/basic_auth/LDAP/squid_ldap_auth.c,v retrieving revision 1.38 diff -u -p -r1.38 squid_ldap_auth.c --- helpers/basic_auth/LDAP/squid_ldap_auth.c 4 Sep 2004 15:14:59 -0000 1.38 +++ helpers/basic_auth/LDAP/squid_ldap_auth.c 4 Sep 2004 21:39:41 -0000 @@ -78,13 +78,43 @@ * - Allow full filter specifications in -f */ +#include "util.h" + #include #include #include + +#ifdef _SQUID_MSWIN_ /* Native Windows port and MinGW */ + +#define snprintf _snprintf +#include +#include +#ifndef LDAPAPI +#define LDAPAPI __cdecl +#endif +#ifdef LDAP_VERSION3 +#define LDAP_OPT_SUCCESS LDAP_SUCCESS +/* Some tricks to allow dynamic bind with ldap_start_tls_s entry point at + run time. + */ +#undef ldap_start_tls_s +#if LDAP_UNICODE +#define LDAP_START_TLS_S "ldap_start_tls_sW" +typedef WINLDAPAPI ULONG (LDAPAPI * PFldap_start_tls_s) (IN PLDAP, OUT PULONG, OUT LDAPMessage **, IN PLDAPControlW *, IN PLDAPControlW *); +#else +#define LDAP_START_TLS_S "ldap_start_tls_sA" +typedef WINLDAPAPI ULONG (LDAPAPI * PFldap_start_tls_s) (IN PLDAP, OUT PULONG, OUT LDAPMessage **, IN PLDAPControlA *, IN PLDAPControlA *); +#endif /* LDAP_UNICODE */ +PFldap_start_tls_s Win32_ldap_start_tls_s; +#define ldap_start_tls_s(l,s,c) Win32_ldap_start_tls_s(l,NULL,NULL,s,c) +#endif /* LDAP_VERSION3 */ + +#else + #include #include -#include "util.h" +#endif #define PROGRAM_NAME "squid_ldap_auth" @@ -471,6 +501,23 @@ main(int argc, char **argv) fprintf(stderr, "\tIf you need to bind as a user to perform searches then use the\n\t-D binddn -w bindpasswd or -D binddn -W secretfile options\n\n"); exit(1); } + +/* On Windows ldap_start_tls_s is available starting from Windows XP, + so we need to bind at run-time with the function entry point + */ +#ifdef _SQUID_MSWIN_ + if (use_tls) { + + HMODULE WLDAP32Handle; + + WLDAP32Handle = GetModuleHandle("wldap32"); + if ((Win32_ldap_start_tls_s = (PFldap_start_tls_s) GetProcAddress(WLDAP32Handle, LDAP_START_TLS_S)) == NULL) { + fprintf( stderr, PROGRAM_NAME ": ERROR: TLS (-Z) not supported on this platform.\n"); + exit(1); + } + } +#endif + while (fgets(buf, 256, stdin) != NULL) { user = strtok(buf, " \r\n"); passwd = strtok(NULL, "\r\n");