1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-14 08:21:07 +03:00

Make createlang and droplang proof against weird search_path settings

by forcing search_path to be just pg_catalog.
This commit is contained in:
Tom Lane
2005-08-15 21:02:26 +00:00
parent 866ffc2fe3
commit 9a9328003d
4 changed files with 115 additions and 42 deletions

View File

@ -5,7 +5,7 @@
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/bin/scripts/droplang.c,v 1.16 2005/07/10 14:26:30 momjian Exp $
* $PostgreSQL: pgsql/src/bin/scripts/droplang.c,v 1.17 2005/08/15 21:02:26 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -140,9 +140,9 @@ main(int argc, char *argv[])
conn = connectDatabase(dbname, host, port, username, password,
progname);
printfPQExpBuffer(&sql, "SELECT lanname as \"%s\", (CASE "
"WHEN lanpltrusted THEN '%s' ELSE '%s' END) "
"as \"%s\" FROM pg_language WHERE lanispl IS TRUE;",
printfPQExpBuffer(&sql, "SELECT lanname as \"%s\", "
"(CASE WHEN lanpltrusted THEN '%s' ELSE '%s' END) as \"%s\" "
"FROM pg_catalog.pg_language WHERE lanispl;",
_("Name"), _("yes"), _("no"), _("Trusted?"));
result = executeQuery(conn, sql.data, progname, echo);
@ -172,6 +172,13 @@ main(int argc, char *argv[])
conn = connectDatabase(dbname, host, port, username, password, progname);
/*
* Force schema search path to be just pg_catalog, so that we don't
* have to be paranoid about search paths below.
*/
executeCommand(conn, "SET search_path = pg_catalog;",
progname, echo);
/*
* Make sure the language is installed and find the OIDs of the
* handler and validator functions
@ -248,8 +255,8 @@ main(int argc, char *argv[])
*/
if (OidIsValid(lanvalidator))
{
printfPQExpBuffer(&sql, "SELECT count(*) FROM pg_language WHERE "
"lanvalidator = %u AND lanname <> '%s';",
printfPQExpBuffer(&sql, "SELECT count(*) FROM pg_language "
"WHERE lanvalidator = %u AND lanname <> '%s';",
lanvalidator, langname);
result = executeQuery(conn, sql.data, progname, echo);
if (strcmp(PQgetvalue(result, 0, 0), "0") == 0)