Re: [GENERAL] db_user_namespace, md5 and changing passwords - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: [GENERAL] db_user_namespace, md5 and changing passwords
Date
Msg-id 200811200358.mAK3weA23952@momjian.us
Whole thread Raw
In response to Re: [GENERAL] db_user_namespace, md5 and changing passwords  (Magnus Hagander <magnus@hagander.net>)
Responses Re: [GENERAL] db_user_namespace, md5 and changing passwords
List pgsql-hackers
Magnus Hagander wrote:
> >> Not sure I care enough to dive into what it would actually mean. My
> >> guess is that it's very uncommon to use db_user_namespace in any of
> >> these scenarios (in fact I think it's very uncommon to use it at all,
> >> but even more uncommon in these cases)
> >
> > The documentation changes highlight that we are going to validate for
> > most external authentications using the server username, so the external
> > authentication has to be set up to use that server username.  Were the
> > docs not clear on that?  Do I need a mention of db_user_namespace in the
> > authentication docs?
>
> AFAICS, the changes only say MD5 doesn't work. I think it should be made
> more clear.
>
> And yes, it probably makes sense to put it around the authentication
> docs as well as a warning to people - that's where they'll go looking if
> something doesn't work.

OK, documentation updated stating that all authentication has to user
the server username, and added a mention in the client-auth docs too.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +
Index: doc/src/sgml/client-auth.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/client-auth.sgml,v
retrieving revision 1.111
diff -c -c -r1.111 client-auth.sgml
*** doc/src/sgml/client-auth.sgml    18 Nov 2008 13:10:20 -0000    1.111
--- doc/src/sgml/client-auth.sgml    20 Nov 2008 03:56:43 -0000
***************
*** 702,707 ****
--- 702,709 ----
      If you are at all concerned about password
      <quote>sniffing</> attacks then <literal>md5</> is preferred.
      Plain <literal>password</> should always be avoided if possible.
+     <literal>md5</> cannot be used with <xref
+     linkend="guc-db-user-namespace">.
     </para>

     <para>
Index: doc/src/sgml/config.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/config.sgml,v
retrieving revision 1.195
diff -c -c -r1.195 config.sgml
*** doc/src/sgml/config.sgml    11 Nov 2008 02:42:31 -0000    1.195
--- doc/src/sgml/config.sgml    20 Nov 2008 03:56:44 -0000
***************
*** 706,711 ****
--- 706,722 ----
          before the user name is looked up by the server.
         </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>
          <para>
           This feature is intended as a temporary measure until a
Index: src/backend/libpq/auth.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/libpq/auth.c,v
retrieving revision 1.171
diff -c -c -r1.171 auth.c
*** src/backend/libpq/auth.c    18 Nov 2008 13:10:20 -0000    1.171
--- src/backend/libpq/auth.c    20 Nov 2008 03:56:44 -0000
***************
*** 371,376 ****
--- 371,380 ----
              break;

          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);
              status = recv_and_check_password_packet(port);
              break;
Index: src/backend/libpq/hba.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/libpq/hba.c,v
retrieving revision 1.172
diff -c -c -r1.172 hba.c
*** src/backend/libpq/hba.c    28 Oct 2008 12:10:43 -0000    1.172
--- src/backend/libpq/hba.c    20 Nov 2008 03:56:47 -0000
***************
*** 846,852 ****
--- 846,861 ----
      else if (strcmp(token, "reject") == 0)
          parsedline->auth_method = uaReject;
      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;
+     }
      else if (strcmp(token, "pam") == 0)
  #ifdef USE_PAM
          parsedline->auth_method = uaPAM;

pgsql-hackers by date:

Previous
From: Tatsuo Ishii
Date:
Subject: Re: Cool hack with recursive queries
Next
From: KaiGai Kohei
Date:
Subject: Re: Updates of SE-PostgreSQL 8.4devel patches (r1197)