Thread: pg_hba.conf and crypt/password

pg_hba.conf and crypt/password

From
Jim Mercer
Date:
i seem to recall setting this up before, but now i can't seem to
get passwords working the way i want.

i'm running 7.0.3 on FreeBSD 4.3-RC.

i've set the entry in pg_hba.conf to both "crypt" and "password".

i've used "ALTER USER pgsql WITH PASSWORD 'test';

regardless of "crypt" or "password", psql allows entry using "test".

what i want is for the pg_shadow file to contain encrypted passwords like
/etc/passwd, and for the server to encrypt the plain text password handed
to it and compare with the crypto-gunge in pg_shadow.

is this not what "crypt" is supposed to do?

--
[ Jim Mercer          jim@pneumonoultramicroscopicsilicovolcanoconiosis.ca ]
[          Reptilian Research -- Longer Life through Colder Blood          ]
[ aka                        jim@reptiles.org              +1 416 410-5633 ]

Re: pg_hba.conf and crypt/password

From
"Oliver Elphick"
Date:
Jim Mercer wrote:
  >
  >i seem to recall setting this up before, but now i can't seem to
  >get passwords working the way i want.
  >
  >i'm running 7.0.3 on FreeBSD 4.3-RC.
  >
  >i've set the entry in pg_hba.conf to both "crypt" and "password".
  >
  >i've used "ALTER USER pgsql WITH PASSWORD 'test';
  >
  >regardless of "crypt" or "password", psql allows entry using "test".
  >
  >what i want is for the pg_shadow file to contain encrypted passwords like
  >/etc/passwd, and for the server to encrypt the plain text password handed
  >to it and compare with the crypto-gunge in pg_shadow.
  >
  >is this not what "crypt" is supposed to do?

'crypt' encrypts the password during transmission; apart from that there
is no difference from 'password'.

--
Oliver Elphick                                Oliver.Elphick@lfix.co.uk
Isle of Wight                              http://www.lfix.co.uk/oliver
PGP: 1024R/32B8FAA1: 97 EA 1D 47 72 3F 28 47  6B 7E 39 CC 56 E4 C1 47
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839  932A 614D 4C34 3E1D 0C1C
                 ========================================
     "If we confess our sins, he is faithful and just to
      forgive us our sins, and to cleanse us from all
      unrighteousness."           I John 1:9



Re: pg_hba.conf and crypt/password

From
Peter Eisentraut
Date:
Jim Mercer writes:

> i seem to recall setting this up before, but now i can't seem to
> get passwords working the way i want.
>
> i'm running 7.0.3 on FreeBSD 4.3-RC.
>
> i've set the entry in pg_hba.conf to both "crypt" and "password".
>
> i've used "ALTER USER pgsql WITH PASSWORD 'test';
>
> regardless of "crypt" or "password", psql allows entry using "test".

This is correct.

> what i want is for the pg_shadow file to contain encrypted passwords like
> /etc/passwd, and for the server to encrypt the plain text password handed
> to it and compare with the crypto-gunge in pg_shadow.

This is not possible.

> is this not what "crypt" is supposed to do?

Crypt encrypts the password on the wire, not in the storage.

--
Peter Eisentraut      peter_e@gmx.net       http://yi.org/peter-e/


Re: pg_hba.conf and crypt/password

From
Jim Mercer
Date:
On Sat, Mar 31, 2001 at 10:31:36AM +0200, Peter Eisentraut wrote:
> > what i want is for the pg_shadow file to contain encrypted passwords like
> > /etc/passwd, and for the server to encrypt the plain text password handed
> > to it and compare with the crypto-gunge in pg_shadow.
>
> This is not possible.

i had a look at the code, and figured i wanted similar behaviour for:

host all 127.0.0.1 255.255.255.255 password /dir/passwd.file

but, rather than have a file, i wanted to use pg_shadow with encrypted
passwords.

so the following patch allows for:

host all 127.0.0.1 255.255.255.255 password pg_shadow

where "pg_shadow" is a special key (like "ident sameuser") to set up this
behaviour.

the patch is done in such a way that it will not impact existing installations

--
[ Jim Mercer          jim@pneumonoultramicroscopicsilicovolcanoconiosis.ca ]
[          Reptilian Research -- Longer Life through Colder Blood          ]
[ aka                        jim@reptiles.org              +1 416 410-5633 ]


*** auth.c.orig    Fri Mar 30 19:37:08 2001
--- auth.c    Fri Mar 30 19:28:20 2001
***************
*** 695,701 ****
  static int
  checkPassword(Port *port, char *user, char *password)
  {
!     if (port->auth_method == uaPassword && port->auth_arg[0] != '\0')
          return verify_password(port->auth_arg, user, password);

      return crypt_verify(port, user, password);
--- 695,702 ----
  static int
  checkPassword(Port *port, char *user, char *password)
  {
!     if (port->auth_method == uaPassword && port->auth_arg[0] != '\0'
!             && strcmp(port->auth_arg, "pg_shadow") != 0)
          return verify_password(port->auth_arg, user, password);

      return crypt_verify(port, user, password);
*** crypt.c.orig    Fri Mar 30 19:38:26 2001
--- crypt.c    Fri Mar 30 19:39:07 2001
***************
*** 280,287 ****
       * authentication method being used for this connection.
       */

!     crypt_pwd =
!         (port->auth_method == uaCrypt ? crypt(passwd, port->salt) : passwd);

      if (!strcmp(pgpass, crypt_pwd))
      {
--- 280,294 ----
       * authentication method being used for this connection.
       */

!     if (port->auth_method == uaCrypt)
!         crypt_pwd = crypt(passwd, port->salt);
!     else
!     {
!         /* if port->auth_arg, encrypt password from client before compare */
!         if (port->auth_arg[0] != 0)
!             pgpass = crypt(pgpass, passwd);
!         crypt_pwd = passwd;
!     }

      if (!strcmp(pgpass, crypt_pwd))
      {