diff options
Diffstat (limited to 'src/backend/utils/init/postinit.c')
-rw-r--r-- | src/backend/utils/init/postinit.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index 6c29ea19174..695db95c726 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.182 2008/03/26 21:10:39 alvherre Exp $ + * $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.183 2008/04/26 22:47:40 tgl Exp $ * * *------------------------------------------------------------------------- @@ -26,6 +26,7 @@ #include "catalog/pg_database.h" #include "catalog/pg_tablespace.h" #include "libpq/hba.h" +#include "libpq/libpq-be.h" #include "mb/pg_wchar.h" #include "miscadmin.h" #include "pgstat.h" @@ -578,6 +579,16 @@ InitPostgres(const char *in_dbname, Oid dboid, const char *username, CheckMyDatabase(dbname, am_superuser); /* + * If we're trying to shut down, only superusers can connect. + */ + if (!am_superuser && + MyProcPort != NULL && + MyProcPort->canAcceptConnections == CAC_WAITBACKUP) + ereport(FATAL, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("must be superuser to connect during database shutdown"))); + + /* * Check a normal user hasn't connected to a superuser reserved slot. */ if (!am_superuser && |