Don't truncate database and user names in startup packets.
authorNathan Bossart <[email protected]>
Mon, 3 Jul 2023 20:18:05 +0000 (13:18 -0700)
committerNathan Bossart <[email protected]>
Mon, 3 Jul 2023 20:18:05 +0000 (13:18 -0700)
Unlike commands such as CREATE DATABASE, ProcessStartupPacket()
does not perform multibyte-aware truncation of overlength names.
This means that connection attempts might fail even if the user
provides the same overlength names that were used in CREATE
DATABASE, CREATE ROLE, etc.  Ideally, we'd do the same multibyte-
aware truncation in both code paths, but it doesn't seem worth the
added complexity of trying to discover the encoding of the names.
Instead, let's simply skip truncating the names in the startup
packet and let the user/database lookup fail later on.  With this
change, users must provide the exact names stored in the catalogs,
even if the names were truncated.

This reverts commit d18c1d1f51.

Author: Bertrand Drouvot
Reviewed-by: Kyotaro Horiguchi, Tom Lane
Discussion: https://postgr.es/m/07436793-1426-29b2-f924-db7422a05fb7%40gmail.com

src/backend/postmaster/postmaster.c

index 4c49393fc5ad8657c3c1c834b9036d0b91f35333..0b1de9efb27b5d2a70f9a627c0b42421fab2e072 100644 (file)
@@ -2290,15 +2290,6 @@ retry1:
        }
    }
 
-   /*
-    * Truncate given database and user names to length of a Postgres name.
-    * This avoids lookup failures when overlength names are given.
-    */
-   if (strlen(port->database_name) >= NAMEDATALEN)
-       port->database_name[NAMEDATALEN - 1] = '\0';
-   if (strlen(port->user_name) >= NAMEDATALEN)
-       port->user_name[NAMEDATALEN - 1] = '\0';
-
    if (am_walsender)
        MyBackendType = B_WAL_SENDER;
    else