mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-13 09:57:02 +08:00
This makes the client programs behave as documented regardless of the connect-time search_path and regardless of user-created objects. Today, a malicious user with CREATE permission on a search_path schema can take control of certain of these clients' queries and invoke arbitrary SQL functions under the client identity, often a superuser. This is exploitable in the default configuration, where all users have CREATE privilege on schema "public". This changes behavior of user-defined code stored in the database, like pg_index.indexprs and pg_extension_config_dump(). If they reach code bearing unqualified names, "does not exist" or "no schema has been selected to create in" errors might appear. Users may fix such errors by schema-qualifying affected names. After upgrading, consider watching server logs for these errors. The --table arguments of src/bin/scripts clients have been lax; for example, "vacuumdb -Zt pg_am\;CHECKPOINT" performed a checkpoint. That now fails, but for now, "vacuumdb -Zt 'pg_am(amname);CHECKPOINT'" still performs a checkpoint. Back-patch to 9.3 (all supported versions). Reviewed by Tom Lane, though this fix strategy was not his first choice. Reported by Arseniy Sharoglazov. Security: CVE-2018-1058
63 lines
1.6 KiB
C
63 lines
1.6 KiB
C
/*
|
|
* common.h
|
|
* Common support routines for bin/scripts/
|
|
*
|
|
* Copyright (c) 2003-2018, PostgreSQL Global Development Group
|
|
*
|
|
* src/bin/scripts/common.h
|
|
*/
|
|
#ifndef COMMON_H
|
|
#define COMMON_H
|
|
|
|
#include "common/username.h"
|
|
#include "libpq-fe.h"
|
|
#include "getopt_long.h" /* pgrminclude ignore */
|
|
#include "pqexpbuffer.h" /* pgrminclude ignore */
|
|
|
|
enum trivalue
|
|
{
|
|
TRI_DEFAULT,
|
|
TRI_NO,
|
|
TRI_YES
|
|
};
|
|
|
|
extern bool CancelRequested;
|
|
|
|
typedef void (*help_handler) (const char *progname);
|
|
|
|
extern void handle_help_version_opts(int argc, char *argv[],
|
|
const char *fixed_progname,
|
|
help_handler hlp);
|
|
|
|
extern PGconn *connectDatabase(const char *dbname, const char *pghost,
|
|
const char *pgport, const char *pguser,
|
|
enum trivalue prompt_password, const char *progname,
|
|
bool echo, bool fail_ok, bool allow_password_reuse);
|
|
|
|
extern PGconn *connectMaintenanceDatabase(const char *maintenance_db,
|
|
const char *pghost, const char *pgport,
|
|
const char *pguser, enum trivalue prompt_password,
|
|
const char *progname, bool echo);
|
|
|
|
extern PGresult *executeQuery(PGconn *conn, const char *query,
|
|
const char *progname, bool echo);
|
|
|
|
extern void executeCommand(PGconn *conn, const char *query,
|
|
const char *progname, bool echo);
|
|
|
|
extern bool executeMaintenanceCommand(PGconn *conn, const char *query,
|
|
bool echo);
|
|
|
|
extern void appendQualifiedRelation(PQExpBuffer buf, const char *name,
|
|
PGconn *conn, const char *progname, bool echo);
|
|
|
|
extern bool yesno_prompt(const char *question);
|
|
|
|
extern void setup_cancel_handler(void);
|
|
|
|
extern void SetCancelConn(PGconn *conn);
|
|
extern void ResetCancelConn(void);
|
|
|
|
|
|
#endif /* COMMON_H */
|