mirror of
https://github.com/postgres/postgres.git
synced 2025-07-26 01:22:12 +03:00
Fix handling of HBA ldapserver with multiple hostnames.
Commit 35c0754f
failed to handle space-separated lists of alternative
hostnames in ldapserver, when building a URI for ldap_initialize()
(OpenLDAP). Such lists need to be expanded to space-separated URIs.
Repair. Back-patch to 11, to fix bug report #15495.
Author: Thomas Munro
Reported-by: Renaud Navarro
Discussion: https://postgr.es/m/15495-2c39fc196c95cd72%40postgresql.org
This commit is contained in:
@ -2352,12 +2352,44 @@ InitializeLDAPConnection(Port *port, LDAP **ldap)
|
||||
#else
|
||||
#ifdef HAVE_LDAP_INITIALIZE
|
||||
{
|
||||
char *uri;
|
||||
const char *hostnames = port->hba->ldapserver;
|
||||
char *uris = NULL;
|
||||
|
||||
uri = psprintf("%s://%s:%d", scheme, port->hba->ldapserver,
|
||||
port->hba->ldapport);
|
||||
r = ldap_initialize(ldap, uri);
|
||||
pfree(uri);
|
||||
/*
|
||||
* We have a space-separated list of hostnames. Convert it
|
||||
* to a space-separated list of URIs.
|
||||
*/
|
||||
do
|
||||
{
|
||||
const char *hostname;
|
||||
size_t hostname_size;
|
||||
char *new_uris;
|
||||
|
||||
/* Find the leading hostname. */
|
||||
hostname_size = strcspn(hostnames, " ");
|
||||
hostname = pnstrdup(hostnames, hostname_size);
|
||||
|
||||
/* Append a URI for this hostname. */
|
||||
new_uris = psprintf("%s%s%s://%s:%d",
|
||||
uris ? uris : "",
|
||||
uris ? " " : "",
|
||||
scheme,
|
||||
hostname,
|
||||
port->hba->ldapport);
|
||||
|
||||
pfree(hostname);
|
||||
if (uris)
|
||||
pfree(uris);
|
||||
uris = new_uris;
|
||||
|
||||
/* Step over this hostname and any spaces. */
|
||||
hostnames += hostname_size;
|
||||
while (*hostnames == ' ')
|
||||
++hostnames;
|
||||
} while (*hostnames);
|
||||
|
||||
r = ldap_initialize(ldap, uris);
|
||||
pfree(uris);
|
||||
if (r != LDAP_SUCCESS)
|
||||
{
|
||||
ereport(LOG,
|
||||
|
Reference in New Issue
Block a user