aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/user.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1998-02-19 17:20:01 +0000
committerBruce Momjian <bruce@momjian.us>1998-02-19 17:20:01 +0000
commitdf67b83a7a183291e53f9eea8f2553de893822c8 (patch)
tree62188fefb8055085351ebec1b0d0a5207c5d119b /src/backend/commands/user.c
parent70ddf2dfc2c2e06b74df0ccb9f34e80a76c51f33 (diff)
downloadpostgresql-df67b83a7a183291e53f9eea8f2553de893822c8.tar.gz
postgresql-df67b83a7a183291e53f9eea8f2553de893822c8.zip
Password fix. Now people have to do the REVOKE themselves.
Diffstat (limited to 'src/backend/commands/user.c')
-rw-r--r--src/backend/commands/user.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index c1fc7389848..ef4b28e93d4 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -30,8 +30,11 @@
#include <tcop/tcopprot.h>
#include <utils/acl.h>
#include <utils/rel.h>
+#include <utils/syscache.h>
#include <commands/user.h>
+static void CheckPgUserAclNotNull(void);
+
/*---------------------------------------------------------------------
* UpdatePgPwdFile
*
@@ -93,6 +96,8 @@ void DefineUser(CreateUserStmt *stmt) {
inblock;
int max_id = -1;
+ if (stmt->password)
+ CheckPgUserAclNotNull();
if (!(inblock = IsTransactionBlock()))
BeginTransactionBlock();
@@ -204,6 +209,8 @@ extern void AlterUser(AlterUserStmt *stmt) {
n,
inblock;
+ if (stmt->password)
+ CheckPgUserAclNotNull();
if (!(inblock = IsTransactionBlock()))
BeginTransactionBlock();
@@ -420,3 +427,30 @@ extern void RemoveUser(char* user) {
if (IsTransactionBlock() && !inblock)
EndTransactionBlock();
}
+
+/*
+ * CheckPgUserAclNotNull
+ *
+ * check to see if there is an ACL on pg_user
+ */
+static void CheckPgUserAclNotNull()
+{
+HeapTuple htp;
+
+ htp = SearchSysCacheTuple(RELNAME, PointerGetDatum(UserRelationName),
+ 0, 0, 0);
+ if (!HeapTupleIsValid(htp))
+ {
+ elog(ERROR, "IsPgUserAclNull: class \"%s\" not found",
+ UserRelationName);
+ }
+
+ if (heap_attisnull(htp, Anum_pg_class_relacl))
+ {
+ elog(NOTICE, "To use passwords, you have to revoke permissions on pg_user");
+ elog(NOTICE, "so normal users can not read the passwords.");
+ elog(ERROR, "Try 'REVOKE ALL ON pg_user FROM PUBLIC'");
+ }
+
+ return;
+}