--------------------- PatchSet 972 Date: 2004/01/03 15:18:47 Author: serassio Branch: nt Tag: (none) Log: Windows support fixes to LDAP helpers from nt-2_5 Members: helpers/basic_auth/LDAP/squid_ldap_auth.c:1.4.12.4->1.4.12.5 helpers/external_acl/ldap_group/squid_ldap_group.c:1.5.2.2->1.5.2.3 Index: squid3/helpers/basic_auth/LDAP/squid_ldap_auth.c =================================================================== RCS file: /cvsroot/squid-sf//squid3/helpers/basic_auth/LDAP/squid_ldap_auth.c,v retrieving revision 1.4.12.4 retrieving revision 1.4.12.5 diff -u -r1.4.12.4 -r1.4.12.5 --- squid3/helpers/basic_auth/LDAP/squid_ldap_auth.c 11 May 2003 15:05:06 -0000 1.4.12.4 +++ squid3/helpers/basic_auth/LDAP/squid_ldap_auth.c 3 Jan 2004 15:18:47 -0000 1.4.12.5 @@ -72,17 +72,26 @@ #include #include #include -#ifdef _MSC_VER +#ifdef _SQUID_MSWIN_ #define snprintf _snprintf #include #include +#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 NOLDAP_UNICODE -#define ldap_start_tls_s(l,s,c) ldap_start_tls_sW(l,NULL,NULL,s,c) +#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(l,s,c) ldap_start_tls_sA(l,NULL,NULL,s,c) -#endif +#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 @@ -399,6 +408,23 @@ 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"); Index: squid3/helpers/external_acl/ldap_group/squid_ldap_group.c =================================================================== RCS file: /cvsroot/squid-sf//squid3/helpers/external_acl/ldap_group/squid_ldap_group.c,v retrieving revision 1.5.2.2 retrieving revision 1.5.2.3 diff -u -r1.5.2.2 -r1.5.2.3 --- squid3/helpers/external_acl/ldap_group/squid_ldap_group.c 2 Mar 2003 08:39:07 -0000 1.5.2.2 +++ squid3/helpers/external_acl/ldap_group/squid_ldap_group.c 3 Jan 2004 15:18:47 -0000 1.5.2.3 @@ -37,17 +37,26 @@ #include #include #include -#ifdef _MSC_VER +#ifdef _WIN32 #define snprintf _snprintf #include #include +#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 NOLDAP_UNICODE -#define ldap_start_tls_s(l,s,c) ldap_start_tls_sW(l,NULL,NULL,s,c) +#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(l,s,c) ldap_start_tls_sA(l,NULL,NULL,s,c) -#endif +#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 @@ -438,6 +447,23 @@ 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) { char *tptr; int found = 0;