diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2005-06-28 22:16:45 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2005-06-28 22:16:45 +0000 |
commit | 6561372c572eff590d7d4759b4b5ec2cdc74ba5d (patch) | |
tree | 8f41fe7427f27604ed3c902786bca45157262a36 /src/backend/utils/init/miscinit.c | |
parent | 0eaa36a16a89029f1b2eb9a38c90e3a0a0e2641e (diff) | |
download | postgresql-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.c | 13 |
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 */ |