]> granicus.if.org Git - postgresql/commitdiff
initdb: Fix for mixed-case superuser names
authorPeter Eisentraut <peter_e@gmx.net>
Thu, 19 Jan 2017 17:00:00 +0000 (12:00 -0500)
committerPeter Eisentraut <peter_e@gmx.net>
Thu, 19 Jan 2017 21:17:36 +0000 (16:17 -0500)
The previous coding did not properly quote the user name before casting
it to regrole.  To avoid all that, just pass in BOOTSTRAP_SUPERUSERID
numerically.

Also fix one place where the BOOTSTRAP_SUPERUSERID was hardcoded as 10.

src/bin/initdb/initdb.c

index eb1be100c85326d4c4002a7e89d9d7eb5157f4d2..443c2ee46857374468a12244fcd0691fd12f0a72 100644 (file)
@@ -61,6 +61,7 @@
 #endif
 
 #include "catalog/catalog.h"
+#include "catalog/pg_authid.h"
 #include "common/file_utils.h"
 #include "common/restricted_token.h"
 #include "common/username.h"
@@ -1617,7 +1618,7 @@ setup_collation(FILE *cmdfd)
        PG_CMD_PUTS("SELECT pg_import_system_collations(if_not_exists => false, schema => 'pg_catalog');\n\n");
 
        /* Add an SQL-standard name */
-       PG_CMD_PRINTF2("INSERT INTO pg_collation (collname, collnamespace, collowner, collencoding, collcollate, collctype) VALUES ('ucs_basic', 'pg_catalog'::regnamespace, '%s'::regrole, %d, 'C', 'C');\n\n", escape_quotes(username), PG_UTF8);
+       PG_CMD_PRINTF2("INSERT INTO pg_collation (collname, collnamespace, collowner, collencoding, collcollate, collctype) VALUES ('ucs_basic', 'pg_catalog'::regnamespace, %u, %d, 'C', 'C');\n\n", BOOTSTRAP_SUPERUSERID, PG_UTF8);
 }
 
 /*
@@ -1688,7 +1689,7 @@ setup_privileges(FILE *cmdfd)
                "  SET relacl = (SELECT array_agg(a.acl) FROM "
                " (SELECT E'=r/\"$POSTGRES_SUPERUSERNAME\"' as acl "
                "  UNION SELECT unnest(pg_catalog.acldefault("
-               "    CASE WHEN relkind = 'S' THEN 's' ELSE 'r' END::\"char\",10::oid))"
+               "    CASE WHEN relkind = 'S' THEN 's' ELSE 'r' END::\"char\"," CppAsString2(BOOTSTRAP_SUPERUSERID) "::oid))"
                " ) as a) "
                "  WHERE relkind IN ('r', 'v', 'm', 'S') AND relacl IS NULL;\n\n",
                "GRANT USAGE ON SCHEMA pg_catalog TO PUBLIC;\n\n",