diff options
author | Tom Lane | 2009-08-29 19:26:52 +0000 |
---|---|---|
committer | Tom Lane | 2009-08-29 19:26:52 +0000 |
commit | e710b65c1c56ca7b91f662c63d37ff2e72862a94 (patch) | |
tree | 35f0571a317a0f6d9a0e50a84d7d4157a811807d /src/include | |
parent | 585806cb9fa0deeec94c8d76c20316ad0dfdd7eb (diff) |
Remove the use of the pg_auth flat file for client authentication.
(That flat file is now completely useless, but removal will come later.)
To do this, postpone client authentication into the startup transaction
that's run by InitPostgres. We still collect the startup packet and do
SSL initialization (if needed) at the same time we did before. The
AuthenticationTimeout is applied separately to startup packet collection
and the actual authentication cycle. (This is a bit annoying, since it
means a couple extra syscalls; but the signal handling requirements inside
and outside a transaction are sufficiently different that it seems best
to treat the timeouts as completely independent.)
A small security disadvantage is that if the given database name is invalid,
this will be reported to the client before any authentication happens.
We could work around that by connecting to database "postgres" instead,
but consensus seems to be that it's not worth introducing such surprising
behavior.
Processing of all command-line switches and GUC options received from the
client is now postponed until after authentication. This means that
PostAuthDelay is much less useful than it used to be --- if you need to
investigate problems during InitPostgres you'll have to set PreAuthDelay
instead. However, allowing an unauthenticated user to set any GUC options
whatever seems a bit too risky, so we'll live with that.
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/libpq/hba.h | 5 | ||||
-rw-r--r-- | src/include/libpq/pqsignal.h | 6 | ||||
-rw-r--r-- | src/include/miscadmin.h | 3 | ||||
-rw-r--r-- | src/include/storage/pmsignal.h | 3 | ||||
-rw-r--r-- | src/include/tcop/tcopprot.h | 3 | ||||
-rw-r--r-- | src/include/utils/guc.h | 3 |
6 files changed, 10 insertions, 13 deletions
diff --git a/src/include/libpq/hba.h b/src/include/libpq/hba.h index f626342330f..85849d42cf6 100644 --- a/src/include/libpq/hba.h +++ b/src/include/libpq/hba.h @@ -4,7 +4,7 @@ * Interface to hba.c * * - * $PostgreSQL: pgsql/src/include/libpq/hba.h,v 1.56 2009/06/11 14:49:11 momjian Exp $ + * $PostgreSQL: pgsql/src/include/libpq/hba.h,v 1.57 2009/08/29 19:26:51 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -61,12 +61,11 @@ typedef struct bool include_realm; } HbaLine; +/* kluge to avoid including libpq/libpq-be.h here */ typedef struct Port hbaPort; -extern List **get_role_line(const char *role); extern bool load_hba(void); extern void load_ident(void); -extern void load_role(void); extern int hba_getauthmethod(hbaPort *port); extern bool read_pg_database_line(FILE *fp, char *dbname, Oid *dboid, Oid *dbtablespace, TransactionId *dbfrozenxid); diff --git a/src/include/libpq/pqsignal.h b/src/include/libpq/pqsignal.h index de1536cf501..cd631c19e24 100644 --- a/src/include/libpq/pqsignal.h +++ b/src/include/libpq/pqsignal.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/libpq/pqsignal.h,v 1.33 2009/01/01 17:23:59 momjian Exp $ + * $PostgreSQL: pgsql/src/include/libpq/pqsignal.h,v 1.34 2009/08/29 19:26:51 tgl Exp $ * * NOTES * This shouldn't be in libpq, but the monitor and some other @@ -23,13 +23,13 @@ #ifdef HAVE_SIGPROCMASK extern sigset_t UnBlockSig, BlockSig, - AuthBlockSig; + StartupBlockSig; #define PG_SETMASK(mask) sigprocmask(SIG_SETMASK, mask, NULL) #else extern int UnBlockSig, BlockSig, - AuthBlockSig; + StartupBlockSig; #ifndef WIN32 #define PG_SETMASK(mask) sigsetmask(*((int*)(mask))) diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index eac73aae814..cd787b87da7 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -13,7 +13,7 @@ * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.212 2009/08/12 20:53:30 tgl Exp $ + * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.213 2009/08/29 19:26:51 tgl Exp $ * * NOTES * some of the information in this file should be moved to other files. @@ -323,6 +323,7 @@ extern ProcessingMode Mode; *****************************************************************************/ /* in utils/init/postinit.c */ +extern void pg_split_opts(char **argv, int *argcp, char *optstr); extern bool InitPostgres(const char *in_dbname, Oid dboid, const char *username, char *out_dbname); extern void BaseInit(void); diff --git a/src/include/storage/pmsignal.h b/src/include/storage/pmsignal.h index db47cd69f58..2a75ba7ee65 100644 --- a/src/include/storage/pmsignal.h +++ b/src/include/storage/pmsignal.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/storage/pmsignal.h,v 1.25 2009/06/11 14:49:12 momjian Exp $ + * $PostgreSQL: pgsql/src/include/storage/pmsignal.h,v 1.26 2009/08/29 19:26:52 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -25,7 +25,6 @@ typedef enum PMSIGNAL_RECOVERY_STARTED, /* recovery has started */ PMSIGNAL_RECOVERY_CONSISTENT, /* recovery has reached consistent * state */ - PMSIGNAL_PASSWORD_CHANGE, /* pg_auth file has changed */ PMSIGNAL_WAKEN_ARCHIVER, /* send a NOTIFY signal to xlog archiver */ PMSIGNAL_ROTATE_LOGFILE, /* send SIGUSR1 to syslogger to rotate logfile */ PMSIGNAL_START_AUTOVAC_LAUNCHER, /* start an autovacuum launcher */ diff --git a/src/include/tcop/tcopprot.h b/src/include/tcop/tcopprot.h index 3368e6539c2..674e6802844 100644 --- a/src/include/tcop/tcopprot.h +++ b/src/include/tcop/tcopprot.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/tcop/tcopprot.h,v 1.98 2009/06/11 14:49:12 momjian Exp $ + * $PostgreSQL: pgsql/src/include/tcop/tcopprot.h,v 1.99 2009/08/29 19:26:52 tgl Exp $ * * OLD COMMENTS * This file was created so that other c files could get the two @@ -58,7 +58,6 @@ extern bool assign_max_stack_depth(int newval, bool doit, GucSource source); extern void die(SIGNAL_ARGS); extern void quickdie(SIGNAL_ARGS); -extern void authdie(SIGNAL_ARGS); extern void StatementCancelHandler(SIGNAL_ARGS); extern void FloatExceptionHandler(SIGNAL_ARGS); extern void prepare_for_client_read(void); diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 0705ae05de9..10eb70d0189 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -7,7 +7,7 @@ * Copyright (c) 2000-2009, PostgreSQL Global Development Group * Written by Peter Eisentraut <peter_e@gmx.net>. * - * $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.102 2009/06/11 14:49:13 momjian Exp $ + * $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.103 2009/08/29 19:26:52 tgl Exp $ *-------------------------------------------------------------------- */ #ifndef GUC_H @@ -247,7 +247,6 @@ extern void EmitWarningsOnPlaceholders(const char *className); extern const char *GetConfigOption(const char *name); extern const char *GetConfigOptionResetString(const char *name); -extern bool IsSuperuserConfigOption(const char *name); extern void ProcessConfigFile(GucContext context); extern void InitializeGUCOptions(void); extern bool SelectConfigFiles(const char *userDoption, const char *progname); |