aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2008-07-24 17:52:02 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2008-07-24 17:52:02 +0000
commit730ca85859adf851758c99195f1563f16786fde9 (patch)
treea8ff626ccbb4f2e85db4b6ba262efa5e345d8dff /src
parent55817fb1ed155eb7fbfbedab09a4c9bed2411435 (diff)
downloadpostgresql-730ca85859adf851758c99195f1563f16786fde9.tar.gz
postgresql-730ca85859adf851758c99195f1563f16786fde9.zip
Fix parsing of LDAP URLs so it doesn't reject spaces in the "suffix" part.
Per report from César Miguel Oliveira Alves.
Diffstat (limited to 'src')
-rw-r--r--src/backend/libpq/auth.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c
index 1a33834485d..031a9d4f54c 100644
--- a/src/backend/libpq/auth.c
+++ b/src/backend/libpq/auth.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/libpq/auth.c,v 1.164 2008/02/08 17:58:46 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/libpq/auth.c,v 1.164.2.1 2008/07/24 17:52:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1399,8 +1399,14 @@ CheckLDAPAuth(Port *port)
}
/*
- * Crack the LDAP url. We do a very trivial parse..
+ * Crack the LDAP url. We do a very trivial parse:
+ *
* ldap[s]://<server>[:<port>]/<basedn>[;prefix[;suffix]]
+ *
+ * This code originally used "%127s" for the suffix, but that doesn't
+ * work for embedded whitespace. We know that tokens formed by
+ * hba.c won't include newlines, so we can use a "not newline" scanset
+ * instead.
*/
server[0] = '\0';
@@ -1410,13 +1416,13 @@ CheckLDAPAuth(Port *port)
/* ldap, including port number */
r = sscanf(port->auth_arg,
- "ldap://%127[^:]:%d/%127[^;];%127[^;];%127s",
+ "ldap://%127[^:]:%d/%127[^;];%127[^;];%127[^\n]",
server, &ldapport, basedn, prefix, suffix);
if (r < 3)
{
/* ldaps, including port number */
r = sscanf(port->auth_arg,
- "ldaps://%127[^:]:%d/%127[^;];%127[^;];%127s",
+ "ldaps://%127[^:]:%d/%127[^;];%127[^;];%127[^\n]",
server, &ldapport, basedn, prefix, suffix);
if (r >= 3)
ssl = true;
@@ -1425,14 +1431,14 @@ CheckLDAPAuth(Port *port)
{
/* ldap, no port number */
r = sscanf(port->auth_arg,
- "ldap://%127[^/]/%127[^;];%127[^;];%127s",
+ "ldap://%127[^/]/%127[^;];%127[^;];%127[^\n]",
server, basedn, prefix, suffix);
}
if (r < 2)
{
/* ldaps, no port number */
r = sscanf(port->auth_arg,
- "ldaps://%127[^/]/%127[^;];%127[^;];%127s",
+ "ldaps://%127[^/]/%127[^;];%127[^;];%127[^\n]",
server, basedn, prefix, suffix);
if (r >= 2)
ssl = true;