From bcb0ccf5be9ef9e1a76968e773cb2bd11565ef9c Mon Sep 17 00:00:00 2001 From: Bruce Momjian <bruce@momjian.us> Date: Thu, 16 Aug 2001 16:24:16 +0000 Subject: [PATCH] Add new MD5 pg_hba.conf keyword. Prevent fallback to crypt. --- doc/src/sgml/client-auth.sgml | 35 ++++++++++++++++++---------- doc/src/sgml/jdbc.sgml | 4 ++-- src/backend/libpq/auth.c | 15 +++++------- src/backend/libpq/hba.c | 7 +++--- src/backend/libpq/pg_hba.conf.sample | 12 ++++++---- src/include/libpq/hba.h | 5 ++-- 6 files changed, 44 insertions(+), 34 deletions(-) diff --git a/doc/src/sgml/client-auth.sgml b/doc/src/sgml/client-auth.sgml index a7c9c8616b3..76cba407515 100644 --- a/doc/src/sgml/client-auth.sgml +++ b/doc/src/sgml/client-auth.sgml @@ -1,4 +1,4 @@ -<!-- $Header: /cvsroot/pgsql/doc/src/sgml/client-auth.sgml,v 1.16 2001/08/15 18:42:14 momjian Exp $ --> +<!-- $Header: /cvsroot/pgsql/doc/src/sgml/client-auth.sgml,v 1.17 2001/08/16 16:24:15 momjian Exp $ --> <chapter id="client-authentication"> <title>Client Authentication</title> @@ -194,25 +194,36 @@ hostssl <replaceable>database</replaceable> <replaceable>IP-address</replaceable <para> The password is sent over the wire in clear text. For better - protection, use the <literal>crypt</literal> method. + protection, use the <literal>md5</literal> or + <literal>crypt</literal> methods. </para> </listitem> </varlistentry> <varlistentry> - <term>crypt</> + <term>md5</> <listitem> <para> Like the <literal>password</literal> method, but the password is sent over the wire encrypted using a simple challenge-response protocol. This protects against incidental wire-sniffing. The name of a file may follow the - <literal>crypt</literal> keyword. It contains a list of users + <literal>md5</literal> keyword. It contains a list of users for this record. </para> </listitem> </varlistentry> + <varlistentry> + <term>crypt</> + <listitem> + <para> + Like the <literal>md5</literal> method but uses older crypt + authentication for pre-7.2 clients. + </para> + </listitem> + </varlistentry> + <varlistentry> <term>krb4</> <listitem> @@ -328,7 +339,7 @@ host template1 192.168.93.0 255.255.255.0 ident sameuser # Allow a user from host 192.168.12.10 to connect to database "template1" # if the user's password in pg_shadow is correctly supplied: -host template1 192.168.12.10 255.255.255.255 crypt +host template1 192.168.12.10 255.255.255.255 md5 # In the absence of preceding "host" lines, these two lines will reject # all connection attempts from 192.168.54.1 (since that entry will be @@ -377,11 +388,11 @@ host all 192.168.0.0 255.255.0.0 ident omicron </para> <para> - To restrict the set of users that are allowed to connect to - certain databases, list the set of users in a separate file (one - user name per line) in the same directory that - <filename>pg_hba.conf</> is in, and mention the (base) name of the - file after the <literal>password</> or <literal>crypt</> keyword, + To restrict the set of users that are allowed to connect to certain + databases, list the set of users in a separate file (one user name + per line) in the same directory that <filename>pg_hba.conf</> is in, + and mention the (base) name of the file after the + <literal>password</>, <literal>md5</>, or <literal>crypt</> keyword, respectively, in <filename>pg_hba.conf</>. If you do not use this feature, then any user that is known to the database system can connect to any database (so long as he passes password @@ -414,8 +425,8 @@ host all 192.168.0.0 255.255.0.0 ident omicron </para> <para> - Alternative passwords cannot be used when using the - <literal>crypt</> method. The file will still be evaluated as + Alternative passwords cannot be used when using the <literal>md5</> + or <literal>crypt</> methods. The file will still be evaluated as usual but the password field will simply be ignored and the <literal>pg_shadow</> password will be used. </para> diff --git a/doc/src/sgml/jdbc.sgml b/doc/src/sgml/jdbc.sgml index 0d02c039672..3063ee432df 100644 --- a/doc/src/sgml/jdbc.sgml +++ b/doc/src/sgml/jdbc.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/Attic/jdbc.sgml,v 1.20 2001/03/11 11:06:59 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/Attic/jdbc.sgml,v 1.21 2001/08/16 16:24:15 momjian Exp $ --> <chapter id="jdbc"> @@ -162,7 +162,7 @@ java uk.org.retep.finder.Main <filename>pg_hba.conf</filename> file may need to be configured. Refer to the <citetitle>Administrator's Guide</citetitle> for details. The <acronym>JDBC</acronym> Driver supports trust, - ident, password, and crypt authentication methods. + ident, password, and md5, crypt authentication methods. </para> </sect2> </sect1> diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index 2fd417e6130..c139f93f715 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.58 2001/08/16 04:27:18 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.59 2001/08/16 16:24:15 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -501,19 +501,16 @@ ClientAuthentication(Port *port) status = recv_and_check_password_packet(port); break; - case uaMD5: - sendAuthRequest(port, AUTH_REQ_MD5); - if ((status = recv_and_check_password_packet(port)) == STATUS_OK) - break; - port->auth_method = uaCrypt; - /* Try crypt() for old client */ - /* FALL THROUGH */ - case uaCrypt: sendAuthRequest(port, AUTH_REQ_CRYPT); status = recv_and_check_password_packet(port); break; + case uaMD5: + sendAuthRequest(port, AUTH_REQ_MD5); + status = recv_and_check_password_packet(port); + break; + case uaTrust: status = STATUS_OK; break; diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index f9e7898fb1a..cfafa712e12 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.63 2001/08/16 04:27:18 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.64 2001/08/16 16:24:15 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -226,9 +226,10 @@ parse_hba_auth(List *line, ProtocolVersion proto, UserAuth *userauth_p, *userauth_p = uaKrb5; else if (strcmp(token, "reject") == 0) *userauth_p = uaReject; - else if (strcmp(token, "crypt") == 0) - /* Try MD5 first; on failure, switch to crypt() */ + else if (strcmp(token, "md5") == 0) *userauth_p = uaMD5; + else if (strcmp(token, "crypt") == 0) + *userauth_p = uaCrypt; else *error_p = true; line = lnext(line); diff --git a/src/backend/libpq/pg_hba.conf.sample b/src/backend/libpq/pg_hba.conf.sample index a489b78a70b..d7498717b59 100644 --- a/src/backend/libpq/pg_hba.conf.sample +++ b/src/backend/libpq/pg_hba.conf.sample @@ -115,13 +115,15 @@ # utility. Remember, these passwords override pg_shadow # passwords. # -# crypt: Same as "password", but authentication is done by +# md5: Same as "password", but authentication is done by # encrypting the password sent over the network. This is # always preferable to "password" except for old clients -# that don't support "crypt". Also, crypt can use -# usernames stored in secondary password files but not -# secondary passwords. +# that don't support it. Also, md5 can use usernames stored +# in secondary password files but not secondary passwords. # +# crypt: Same as "md5", but uses crypt for pre-7.2 clients. You can +# not store encrypted passwords if you use this option. +# # ident: For TCP/IP connections, authentication is done by contacting # the ident server on the client host. (CAUTION: this is only # as secure as the client machine!) On machines that support @@ -173,7 +175,7 @@ # if the user's password in pg_shadow is correctly supplied: # # TYPE DATABASE IP_ADDRESS MASK AUTH_TYPE AUTH_ARGUMENT -# host template1 192.168.12.10 255.255.255.255 crypt +# host template1 192.168.12.10 255.255.255.255 md5 # # In the absence of preceding "host" lines, these two lines will reject # all connection from 192.168.54.1 (since that entry will be matched diff --git a/src/include/libpq/hba.h b/src/include/libpq/hba.h index 11f052d3634..da506d7aee8 100644 --- a/src/include/libpq/hba.h +++ b/src/include/libpq/hba.h @@ -4,7 +4,7 @@ * Interface to hba.c * * - * $Id: hba.h,v 1.23 2001/08/15 18:42:15 momjian Exp $ + * $Id: hba.h,v 1.24 2001/08/16 16:24:16 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -36,8 +36,7 @@ typedef enum UserAuth uaIdent, uaPassword, uaCrypt, - uaMD5 /* This starts as uaCrypt from pg_hba.conf, but gets - overridden if the client supports MD5 */ + uaMD5 } UserAuth; typedef struct Port hbaPort; -- GitLab