aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/init/miscinit.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-06-28 22:16:45 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-06-28 22:16:45 +0000
commit6561372c572eff590d7d4759b4b5ec2cdc74ba5d (patch)
tree8f41fe7427f27604ed3c902786bca45157262a36 /src/backend/utils/init/miscinit.c
parent0eaa36a16a89029f1b2eb9a38c90e3a0a0e2641e (diff)
downloadpostgresql-6561372c572eff590d7d4759b4b5ec2cdc74ba5d.tar.gz
postgresql-6561372c572eff590d7d4759b4b5ec2cdc74ba5d.zip
Fix up problems in write_auth_file and parsing of the auth file.
In particular, make hba.c cope with zero-length tokens, which it never did properly before. Also, enforce rolcanlogin.
Diffstat (limited to 'src/backend/utils/init/miscinit.c')
-rw-r--r--src/backend/utils/init/miscinit.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index 1db29928996..be1f6e70496 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/init/miscinit.c,v 1.143 2005/06/28 05:09:02 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/init/miscinit.c,v 1.144 2005/06/28 22:16:45 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -312,6 +312,7 @@ void
InitializeSessionUserId(const char *rolename)
{
HeapTuple roleTup;
+ Form_pg_authid rform;
Datum datum;
bool isnull;
Oid roleid;
@@ -330,13 +331,19 @@ InitializeSessionUserId(const char *rolename)
0, 0, 0);
if (!HeapTupleIsValid(roleTup))
ereport(FATAL,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
+ (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),
errmsg("role \"%s\" does not exist", rolename)));
+ rform = (Form_pg_authid) GETSTRUCT(roleTup);
roleid = HeapTupleGetOid(roleTup);
+ if (!rform->rolcanlogin)
+ ereport(FATAL,
+ (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),
+ errmsg("role \"%s\" is not permitted to log in", rolename)));
+
AuthenticatedUserId = roleid;
- AuthenticatedUserIsSuperuser = ((Form_pg_authid) GETSTRUCT(roleTup))->rolsuper;
+ AuthenticatedUserIsSuperuser = rform->rolsuper;
SetSessionUserId(roleid); /* sets CurrentUserId too */