Commit 170b66a0 authored by Bruce Momjian's avatar Bruce Momjian

Issue a proper error message when MD5 is attempted when

db_user_namespace is enabled.

Also document this limitation.
parent 176961c1
<!-- $PostgreSQL: pgsql/doc/src/sgml/client-auth.sgml,v 1.112 2008/11/20 11:48:26 mha Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/client-auth.sgml,v 1.113 2008/11/20 20:45:29 momjian Exp $ -->
<chapter id="client-authentication"> <chapter id="client-authentication">
<title>Client Authentication</title> <title>Client Authentication</title>
...@@ -712,6 +712,8 @@ omicron bryanh guest1 ...@@ -712,6 +712,8 @@ omicron bryanh guest1
If you are at all concerned about password If you are at all concerned about password
<quote>sniffing</> attacks then <literal>md5</> is preferred. <quote>sniffing</> attacks then <literal>md5</> is preferred.
Plain <literal>password</> should always be avoided if possible. Plain <literal>password</> should always be avoided if possible.
<literal>md5</> cannot be used with <xref
linkend="guc-db-user-namespace">.
</para> </para>
<para> <para>
......
<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.195 2008/11/11 02:42:31 tgl Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.196 2008/11/20 20:45:29 momjian Exp $ -->
<chapter Id="runtime-config"> <chapter Id="runtime-config">
<title>Server Configuration</title> <title>Server Configuration</title>
...@@ -706,6 +706,17 @@ SET ENABLE_SEQSCAN TO OFF; ...@@ -706,6 +706,17 @@ SET ENABLE_SEQSCAN TO OFF;
before the user name is looked up by the server. before the user name is looked up by the server.
</para> </para>
<para>
<varname>db_user_namespace</> causes the client's and
server's user name representation to differ.
Authentication checks are always done with the server's user name
so authentication methods must be configured for the
server's user name, not the client's. Because
<literal>md5</> uses the user name as salt on both the
client and server, <literal>md5</> cannot be used with
<varname>db_user_namespace</>.
</para>
<note> <note>
<para> <para>
This feature is intended as a temporary measure until a This feature is intended as a temporary measure until a
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/libpq/auth.c,v 1.173 2008/11/20 11:48:26 mha Exp $ * $PostgreSQL: pgsql/src/backend/libpq/auth.c,v 1.174 2008/11/20 20:45:30 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -413,6 +413,10 @@ ClientAuthentication(Port *port) ...@@ -413,6 +413,10 @@ ClientAuthentication(Port *port)
break; break;
case uaMD5: case uaMD5:
if (Db_user_namespace)
ereport(FATAL,
(errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),
errmsg("MD5 authentication is not supported when \"db_user_namespace\" is enabled")));
sendAuthRequest(port, AUTH_REQ_MD5); sendAuthRequest(port, AUTH_REQ_MD5);
status = recv_and_check_password_packet(port); status = recv_and_check_password_packet(port);
break; break;
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.174 2008/11/20 11:48:26 mha Exp $ * $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.175 2008/11/20 20:45:30 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -846,7 +846,16 @@ parse_hba_line(List *line, int line_num, HbaLine *parsedline) ...@@ -846,7 +846,16 @@ parse_hba_line(List *line, int line_num, HbaLine *parsedline)
else if (strcmp(token, "reject") == 0) else if (strcmp(token, "reject") == 0)
parsedline->auth_method = uaReject; parsedline->auth_method = uaReject;
else if (strcmp(token, "md5") == 0) else if (strcmp(token, "md5") == 0)
{
if (Db_user_namespace)
{
ereport(LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("MD5 authentication is not supported when \"db_user_namespace\" is enabled")));
return false;
}
parsedline->auth_method = uaMD5; parsedline->auth_method = uaMD5;
}
else if (strcmp(token, "pam") == 0) else if (strcmp(token, "pam") == 0)
#ifdef USE_PAM #ifdef USE_PAM
parsedline->auth_method = uaPAM; parsedline->auth_method = uaPAM;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment