88 *
99 *
1010 * IDENTIFICATION
11- * $PostgreSQL: pgsql/src/backend/libpq/auth.c,v 1.164 2008/02/08 17:58:46 tgl Exp $
11+ * $PostgreSQL: pgsql/src/backend/libpq/auth.c,v 1.165 2008/07/24 17:51:55 tgl Exp $
1212 *
1313 *-------------------------------------------------------------------------
1414 */
@@ -1399,8 +1399,14 @@ CheckLDAPAuth(Port *port)
13991399}
14001400
14011401/*
1402- * Crack the LDAP url. We do a very trivial parse..
1402+ * Crack the LDAP url. We do a very trivial parse:
1403+ *
14031404 * ldap[s]://<server>[:<port>]/<basedn>[;prefix[;suffix]]
1405+ *
1406+ * This code originally used "%127s" for the suffix, but that doesn't
1407+ * work for embedded whitespace. We know that tokens formed by
1408+ * hba.c won't include newlines, so we can use a "not newline" scanset
1409+ * instead.
14041410 */
14051411
14061412server [0 ]= '\0' ;
@@ -1410,13 +1416,13 @@ CheckLDAPAuth(Port *port)
14101416
14111417/* ldap, including port number */
14121418r = sscanf (port -> auth_arg ,
1413- "ldap://%127[^:]:%d/%127[^;];%127[^;];%127s " ,
1419+ "ldap://%127[^:]:%d/%127[^;];%127[^;];%127[^\n] " ,
14141420server ,& ldapport ,basedn ,prefix ,suffix );
14151421if (r < 3 )
14161422{
14171423/* ldaps, including port number */
14181424r = sscanf (port -> auth_arg ,
1419- "ldaps://%127[^:]:%d/%127[^;];%127[^;];%127s " ,
1425+ "ldaps://%127[^:]:%d/%127[^;];%127[^;];%127[^\n] " ,
14201426server ,& ldapport ,basedn ,prefix ,suffix );
14211427if (r >=3 )
14221428ssl = true;
@@ -1425,14 +1431,14 @@ CheckLDAPAuth(Port *port)
14251431{
14261432/* ldap, no port number */
14271433r = sscanf (port -> auth_arg ,
1428- "ldap://%127[^/]/%127[^;];%127[^;];%127s " ,
1434+ "ldap://%127[^/]/%127[^;];%127[^;];%127[^\n] " ,
14291435server ,basedn ,prefix ,suffix );
14301436}
14311437if (r < 2 )
14321438{
14331439/* ldaps, no port number */
14341440r = sscanf (port -> auth_arg ,
1435- "ldaps://%127[^/]/%127[^;];%127[^;];%127s " ,
1441+ "ldaps://%127[^/]/%127[^;];%127[^;];%127[^\n] " ,
14361442server ,basedn ,prefix ,suffix );
14371443if (r >=2 )
14381444ssl = true;