mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-01 21:51:18 +02:00
Replace loading of ldap_start_tls_sA() by direct function call
This change impacts the backend-side code in charge of starting a LDAP
TLS session. It is a bit sad that it is not possible to unify the WIN32
and non-WIN32 code paths, but the different number of arguments for both
discard this possibility.
This is similar to 47bd0b3
, where this replaces the last function
loading that seems worth it, any others being either environment or
version-dependent.
Reported-by: Thomas Munro
Reviewed-by: Thomas Munro
Discussion: https://postgr.es/m/Yx0rxpNgDh8tN4XA@paquier.xyz
This commit is contained in:
parent
857808a411
commit
c3fb5809ea
@ -135,14 +135,6 @@ static int CheckBSDAuth(Port *port, char *user);
|
|||||||
#else
|
#else
|
||||||
#include <winldap.h>
|
#include <winldap.h>
|
||||||
|
|
||||||
/* Correct header from the Platform SDK */
|
|
||||||
typedef
|
|
||||||
ULONG (*__ldap_start_tls_sA) (IN PLDAP ExternalHandle,
|
|
||||||
OUT PULONG ServerReturnValue,
|
|
||||||
OUT LDAPMessage **result,
|
|
||||||
IN PLDAPControlA * ServerControls,
|
|
||||||
IN PLDAPControlA * ClientControls
|
|
||||||
);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int CheckLDAPAuth(Port *port);
|
static int CheckLDAPAuth(Port *port);
|
||||||
@ -2348,48 +2340,7 @@ InitializeLDAPConnection(Port *port, LDAP **ldap)
|
|||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
if ((r = ldap_start_tls_s(*ldap, NULL, NULL)) != LDAP_SUCCESS)
|
if ((r = ldap_start_tls_s(*ldap, NULL, NULL)) != LDAP_SUCCESS)
|
||||||
#else
|
#else
|
||||||
static __ldap_start_tls_sA _ldap_start_tls_sA = NULL;
|
if ((r = ldap_start_tls_s(*ldap, NULL, NULL, NULL, NULL)) != LDAP_SUCCESS)
|
||||||
|
|
||||||
if (_ldap_start_tls_sA == NULL)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Need to load this function dynamically because it may not exist
|
|
||||||
* on Windows, and causes a load error for the whole exe if
|
|
||||||
* referenced.
|
|
||||||
*/
|
|
||||||
HANDLE ldaphandle;
|
|
||||||
|
|
||||||
ldaphandle = LoadLibrary("WLDAP32.DLL");
|
|
||||||
if (ldaphandle == NULL)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* should never happen since we import other files from
|
|
||||||
* wldap32, but check anyway
|
|
||||||
*/
|
|
||||||
ereport(LOG,
|
|
||||||
(errmsg("could not load library \"%s\": error code %lu",
|
|
||||||
"WLDAP32.DLL", GetLastError())));
|
|
||||||
ldap_unbind(*ldap);
|
|
||||||
return STATUS_ERROR;
|
|
||||||
}
|
|
||||||
_ldap_start_tls_sA = (__ldap_start_tls_sA) (pg_funcptr_t) GetProcAddress(ldaphandle, "ldap_start_tls_sA");
|
|
||||||
if (_ldap_start_tls_sA == NULL)
|
|
||||||
{
|
|
||||||
ereport(LOG,
|
|
||||||
(errmsg("could not load function _ldap_start_tls_sA in wldap32.dll"),
|
|
||||||
errdetail("LDAP over SSL is not supported on this platform.")));
|
|
||||||
ldap_unbind(*ldap);
|
|
||||||
FreeLibrary(ldaphandle);
|
|
||||||
return STATUS_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Leak LDAP handle on purpose, because we need the library to
|
|
||||||
* stay open. This is ok because it will only ever be leaked once
|
|
||||||
* per process and is automatically cleaned up on process exit.
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
if ((r = _ldap_start_tls_sA(*ldap, NULL, NULL, NULL, NULL)) != LDAP_SUCCESS)
|
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
ereport(LOG,
|
ereport(LOG,
|
||||||
|
Loading…
Reference in New Issue
Block a user