Allow CREATE/ALTER ROLE PASSWORD NULL to allow restoring the default state

of having no password.
This commit is contained in:
Peter Eisentraut 2005-12-23 16:46:39 +00:00
parent dcc7da8d5e
commit 98b3c3c450
3 changed files with 24 additions and 10 deletions

View File

@ -1,5 +1,5 @@
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/create_role.sgml,v 1.5 2005/12/18 02:17:16 petere Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/create_role.sgml,v 1.6 2005/12/23 16:46:39 petere Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
@ -188,10 +188,13 @@ where <replaceable class="PARAMETER">option</replaceable> can be:
<listitem> <listitem>
<para> <para>
Sets the role's password. (A password is only of use for Sets the role's password. (A password is only of use for
roles having the <literal>LOGIN</literal> attribute, but you can roles having the <literal>LOGIN</literal> attribute, but you
nonetheless define one for roles without it.) can nonetheless define one for roles without it.) If you do
If you do not plan to use password not plan to use password authentication you can omit this
authentication you can omit this option. option. If no password is specified, the password will be set
to null and password authentication will always fail for that
user. A null password can optionally be written explicitly as
<literal>PASSWORD NULL</literal>.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>

View File

@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/backend/commands/user.c,v 1.166 2005/11/22 18:17:09 momjian Exp $ * $PostgreSQL: pgsql/src/backend/commands/user.c,v 1.167 2005/12/23 16:46:39 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -225,7 +225,7 @@ CreateRole(CreateRoleStmt *stmt)
defel->defname); defel->defname);
} }
if (dpassword) if (dpassword && dpassword->arg)
password = strVal(dpassword->arg); password = strVal(dpassword->arg);
if (dissuper) if (dissuper)
issuper = intVal(dissuper->arg) != 0; issuper = intVal(dissuper->arg) != 0;
@ -517,7 +517,7 @@ AlterRole(AlterRoleStmt *stmt)
defel->defname); defel->defname);
} }
if (dpassword) if (dpassword && dpassword->arg)
password = strVal(dpassword->arg); password = strVal(dpassword->arg);
if (dissuper) if (dissuper)
issuper = intVal(dissuper->arg); issuper = intVal(dissuper->arg);
@ -573,7 +573,7 @@ AlterRole(AlterRoleStmt *stmt)
!dconnlimit && !dconnlimit &&
!rolemembers && !rolemembers &&
!validUntil && !validUntil &&
password && dpassword &&
roleid == GetUserId())) roleid == GetUserId()))
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
@ -651,6 +651,13 @@ AlterRole(AlterRoleStmt *stmt)
new_record_repl[Anum_pg_authid_rolpassword - 1] = 'r'; new_record_repl[Anum_pg_authid_rolpassword - 1] = 'r';
} }
/* unset password */
if (dpassword && dpassword->arg == NULL)
{
new_record_repl[Anum_pg_authid_rolpassword - 1] = 'r';
new_record_nulls[Anum_pg_authid_rolpassword - 1] = 'n';
}
/* valid until */ /* valid until */
if (validUntil) if (validUntil)
{ {

View File

@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.517 2005/12/11 10:54:27 neilc Exp $ * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.518 2005/12/23 16:46:39 petere Exp $
* *
* HISTORY * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
@ -616,6 +616,10 @@ OptRoleElem:
$$ = makeDefElem("password", $$ = makeDefElem("password",
(Node *)makeString($2)); (Node *)makeString($2));
} }
| PASSWORD NULL_P
{
$$ = makeDefElem("password", NULL);
}
| ENCRYPTED PASSWORD Sconst | ENCRYPTED PASSWORD Sconst
{ {
$$ = makeDefElem("encryptedPassword", $$ = makeDefElem("encryptedPassword",