diff --git a/doc/src/sgml/ref/pg_passwd.sgml b/doc/src/sgml/ref/pg_passwd.sgml
index 589ba1864126fe1b65d02edcc725add66589619e..8e244c237fd609e7649fdbfdd283d44a4179bf93 100644
--- a/doc/src/sgml/ref/pg_passwd.sgml
+++ b/doc/src/sgml/ref/pg_passwd.sgml
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/pg_passwd.sgml,v 1.6 2001/02/20 01:16:49 tgl Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/pg_passwd.sgml,v 1.7 2001/06/18 16:11:30 momjian Exp $
 Postgres documentation
 -->
 
@@ -16,7 +16,7 @@ Postgres documentation
 
  <refnamediv>
   <refname>pg_passwd</refname>
-  <refpurpose>Manipulate a text password file</refpurpose>
+  <refpurpose>Manipulate a secondary password file</refpurpose>
  </refnamediv>
 
  <refsynopsisdiv>
@@ -29,30 +29,28 @@ Postgres documentation
  <refsect1 id="app-pg-passwd-description">
   <title>Description</title>
   <para>
-   <application>pg_passwd</application> is a tool to manipulate a flat
-   text password file for the purpose of using that file to control
-   client authentication of the
-   <productname>PostgreSQL</productname> server.  More information
+   <application>pg_passwd</application> is a tool for manipulating flat
+   text password files. These files can control client authentication of
+   the <productname>PostgreSQL</productname> server. More information
    about setting up this authentication mechanism can be found in the
    <citetitle>Administrator's Guide</citetitle>.
   </para>
 
   <para>
-   The form of a text password file is one entry per line; the fields
-   of each entry are separated by colons.  The first field is the user
-   name, the second field is the encrypted password.  Other fields are
+   The format of a text password file is one entry per line; the fields
+   of each entry are separated by colons. The first field is the user
+   name, the second field is the encrypted password. Other fields are
    ignored (to allow password files to be shared between applications
-   that use similar formats).  The functionality of the
-   <application>pg_passwd</application> utility is to enable a user to
-   interactively add entries to such a file, to alter passwords of
-   existing entries, and to take care of encrypting the passwords.
+   that use similar formats). <application>pg_passwd</application>
+   enables users to interactively add entries to such a file, to alter
+   passwords of existing entries, and to encrypt such passwords.
   </para>
 
   <para>
-   Supply the name of the password file as argument to the <application>pg_passwd</application>
-   command.  To be of use for client authentication the file needs to
-   be located in the server's data directory, and the base name of
-   the file needs to be specified in the
+   Supply the name of the password file as argument to the
+   <application>pg_passwd</application> command. To be used by
+   PostgreSQL, the file needs to be located in the server's data
+   directory, and the base name of the file needs to be specified in the
    <filename>pg_hba.conf</filename> access control file.
 
 <screen>
@@ -90,11 +88,11 @@ host  mydb     133.65.96.250   255.255.255.255 password passwords
 
   <note>
    <para>
-    It is also useful to have entries in a password file with an empty
-    password field.  (This is different from an empty password.)
-    These entries cannot be managed by
-    <application>pg_passwd</application>, but it is always possible to
-    edit password files manually.
+    It is also useful to have entries in a password file with empty
+    password fields. (This is different from an empty password.) Such
+    entries allow you to restrict users who can access the system. These
+    entries cannot be managed by <application>pg_passwd</application>,
+    but you can edit password files manually.
    </para>
   </note>
  </refsect1>
diff --git a/src/backend/libpq/password.c b/src/backend/libpq/password.c
index 77b09be18a4eaf8b9a6153626d9dd715573d4908..2d4559a296c42f0631846d539d8332041ff61d83 100644
--- a/src/backend/libpq/password.c
+++ b/src/backend/libpq/password.c
@@ -2,7 +2,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: password.c,v 1.36 2001/03/22 03:59:30 momjian Exp $
+ * $Id: password.c,v 1.37 2001/06/18 16:11:30 momjian Exp $
  *
  */
 
@@ -76,9 +76,11 @@ verify_password(const Port *port, const char *user, const char *password)
 			FreeFile(pw_file);
 
 			/*
-			 * If the password is empty of "+" then we use the regular
+			 * If the password is empty or "+" then we use the regular
 			 * pg_shadow passwords. If we use crypt then we have to use
-			 * pg_shadow passwords no matter what.
+			 * pg_shadow passwords no matter what.  This is because
+			 * the current code needs non-encrypted passwords to
+			 * encrypt with a random salt.
 			 */
 			if (port->auth_method == uaCrypt
 				|| test_pw == NULL || test_pw[0] == '\0'
diff --git a/src/backend/libpq/pg_hba.conf.sample b/src/backend/libpq/pg_hba.conf.sample
index 66b0252c0f18c1d2b7cf482edf967748c4661c83..ddd3994a7236ab2942581c2d425463bd2e30c158 100644
--- a/src/backend/libpq/pg_hba.conf.sample
+++ b/src/backend/libpq/pg_hba.conf.sample
@@ -1,188 +1,217 @@
-#
-#                   PostgreSQL HOST ACCESS CONTROL FILE
-#
-# 
-# This file controls what hosts are allowed to connect to what databases
-# and specifies how users on a particular host are identified. It is read
-# by the PostgreSQL postmaster each time a host tries to make a connection
-# to a database.
-#
-# Each line (terminated by a newline character) is a record. A record
-# cannot be continued across two lines.
-# 
-# There are 3 kinds of records:
-#   1) comment:  Starts with #.
-#   2) empty:  Contains nothing excepting spaces and tabs.
-#   3) record: anything else.  
-# Only record lines are significant.
-#
-# A record consists of tokens separated by spaces or tabs. Spaces and
-# tabs at the beginning and end of a record are ignored, as are extra
-# spaces and tabs between two tokens.
-#
-# The first token in a record is the record type. The interpretation of
-# the rest of the record depends on the record type.
-
-
-# Record type "host"
-# ------------------
 # 
-# This record identifies a set of network hosts that are permitted to
-# connect to databases via IP connections. No hosts are permitted to connect
-# over IP except as specified by a "host" record.
-#
+#                PostgreSQL HOST-BASED ACCESS (HBA) CONTROL FILE
+# 
+# 
+# This file controls:
+# 
+# 	o which hosts are allowed to connect
+# 	o how users are authenticated on each host
+# 	o databases accessible by each host
+# 
+# It is read by the PostgreSQL postmaster each time a host tries to make a
+# connection to a database.
+# 
+# Each line is a new record. Records cannot be continued across multiple
+# lines. Lines beginning with # (comments) and blank lines are ignored. A
+# record consists of tokens separated by multiple spaces or tabs.
+# 
+# The first token of a record indicates its type. The remainder of the
+# record is interpreted based on its type.
+# 
+# Record Types
+# ============
+# 
+# There are three types of records:
+# 
+# 	o host
+# 	o hostssl
+# 	o local
+# 
+# host
+# ----
+# 
+# This record identifies the networked hosts that are permitted to connect
+# via IP connections.
+# 
 # Format:
 # 
-#   host  DBNAME  IP_ADDRESS  ADDRESS_MASK  AUTHTYPE  [AUTH_ARGUMENT]
-# 
-# DBNAME is the name of a PostgreSQL database, or "all" to indicate all
-# databases, or "sameuser" to restrict a user's access to a database with
-# the same name as the user.
-#
-# IP_ADDRESS and ADDRESS_MASK are a standard dotted decimal IP address
-# and mask to identify a set of hosts. These hosts are allowed to connect
-# to the database(s) identified by DBNAME.  Note that the IP address must
-# be specified numerically, not as a domain name.
-#
-# AUTHTYPE and AUTH_ARGUMENT are described below.
-#
+#   host  DBNAME  IP_ADDRESS  ADDRESS_MASK  AUTH_TYPE  [AUTH_ARGUMENT]
+# 
+# DBNAME can be:
+# 
+# 	o the name of a PostgreSQL database
+# 	o "all" to indicate all databases
+# 	o "sameuser" to allow access only to databases with the same
+# 	  name as the connecting user
+# 
+# IP_ADDRESS and ADDRESS_MASK are standard dotted decimal IP address and
+# mask values. IP addresses can only be specified numerically, not as
+# domain or host names.
+# 
+# AUTH_TYPE and AUTH_ARGUMENT are described below.
+# 
 # There can be multiple "host" records, possibly with overlapping sets of
-# host addresses.  The postmaster scans to find the first entry that matches
-# the connecting host IP address and the requested database name.  This
-# entry's AUTHTYPE will then be used to verify or reject the connection.
-# If no entry matches the host+database, the connection is rejected.
-
-
-# Record type "hostssl"
-# ---------------------
-#
-# The format of this record is identical to that of "host".
-#
+# host addresses. The postmaster finds the first entry that matches the
+# connecting host IP address and the requested database name. If no entry
+# matches the database/hostname combination, the connection is rejected.
+# 
+# 
+# hostssl
+# -------
+# 
+# The format of this record is identical to "host".
+# 
 # This record identifies a set of network hosts that are permitted to
-# connect to databases over secure SSL IP connections.  Note that a "host"
-# record will also allow SSL connections; write "hostssl" if you want to
-# accept *only* SSL-secured connections from this host or hosts.
-#
+# connect to databases over secure SSL IP connections. Note that a "host"
+# record will also allow SSL connections.  "hostssl" forces these
+# hosts to use *only* SSL-secured connections.
+# 
 # This keyword is only available if the server was compiled with SSL
 # support enabled.
-
-
-# Record type "local"
-# ------------------
+# 
+# 
+# local
+# -----
 # 
 # This record identifies the authentication to use when connecting to
-# the server via a local UNIX socket.  UNIX-socket connections will be
+# the server via a local UNIX domain socket.  UNIX-socket connections are
 # allowed only if this record type appears.
-#
+# 
 # Format:
 # 
-#   local  DBNAME  AUTHTYPE  [AUTH_ARGUMENT]
-#
-# The format is the same as that of the "host" record type except that
-# the IP_ADDRESS and ADDRESS_MASK are omitted.
-#
+#   local  DBNAME  AUTH_TYPE  [AUTH_ARGUMENT]
+# 
+# This format is identical to the "host" record type except the IP_ADDRESS
+# and ADDRESS_MASK fields are omitted.
+# 
 # As with "host" records, the first "local" record matching the requested
-# database name controls whether the connection is allowed.
-
-
-# Authentication Types (AUTHTYPE)
-# -------------------------------
-#
-# AUTHTYPE is a keyword indicating the method used to authenticate the
-# user, i.e. to determine that the user is authorized to connect under
-# the PostgreSQL username supplied in the connection request.  A
-# different AUTHTYPE can be specified for each record in the file.
-#
-#   trust:  	No authentication is done. Trust that the user has the
-#   		authority to use whatever username he specifies.
-#
+# database name is used.
+# 
+# 
+# 
+# Authentication Types (AUTH_TYPE)
+# ================================
+# 
+# AUTH_TYPE indicates the method used to authenticate users. The username
+# is specified in the connection request.  A different AUTH_TYPE can be
+# specified for each record in the file.
+# 
+#   trust:  	No authentication is done. Any valid username is accepted,
+# 		including the PostgreSQL superuser. This option should
+# 		be use only for machines where all users are truested.
+# 
 #   password:	Authentication is done by matching a password supplied
-#   		in clear by the host. If AUTH_ARGUMENT is specified then
-#   		the password is compared with the user's entry in that
-#   		file (in the $PGDATA directory).  These per-host password
-#		files can be maintained with the pg_passwd(1) utility.
-#		If no AUTH_ARGUMENT appears then the password is compared
-#		with the user's entry in the pg_shadow table.
-#
-#   crypt:  	Same as 'password', but authentication is done by
-#   		encrypting the password sent over the network.
-#
+#   		in clear by the host. If no AUTH_ARGUMENT is used, the
+#   		password is compared with the user's entry in the
+#   		pg_shadow table.
+# 
+# 		If AUTH_ARGUMENT is specified, the username is looked up
+# 		in that file in the $PGDATA directory. If the username
+# 		exists but there is no password, the password is looked
+# 		up in pg_shadow. If a password exists in the file, it is
+# 		it used instead. These secondary files allow fine-grained
+# 		control over who can access which databases and whether
+# 		a non-default passwords are required. The same file can be
+# 		used in multiple records for easier administration.
+# 		Password files can be maintained with the pg_passwd(1)
+# 		utility. Remember, these passwords override pg_shadow
+# 		passwords.
+# 
+#   crypt:  	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.
+# 
 #   ident:  	Authentication is done by the ident server on the remote
-#   		host, via the ident (RFC 1413) protocol.  An AUTH_ARGUMENT
-#		is required: it is a map name to be found in the
-#		$PGDATA/pg_ident.conf file.  The connection is accepted
-#		if pg_ident.conf contains an entry for this map name with
-#		the ident-supplied username and the requested PostgreSQL
-#		username. The special map name "sameuser" indicates an
-#		implied map (not sought in pg_ident.conf) that maps every
-#		ident username to the identical PostgreSQL username.
-#
+#   		host. AUTH_ARGUMENT is required and maps names found in
+#   		the $PGDATA/pg_ident.conf file. The connection is
+#   		accepted if the file contains an entry for this map
+#   		name with the ident-supplied username and the requested
+#   		PostgreSQL username. The special map name "sameuser"
+#   		indicates an implied map (not in pg_ident.conf)
+#   		that maps each ident username to the identical
+#   		PostgreSQL username.
+# 
 #   krb4:   	Kerberos V4 authentication is used.
-#
+# 
 #   krb5:   	Kerberos V5 authentication is used.
-#
-#   reject: 	Reject the connection.
-#
-# Local (UNIX socket) connections support only AUTHTYPEs "trust",
-# "password", "crypt", and "reject".
-
-
+# 
+#   reject: 	Reject the connection. This is used to reject certain hosts
+#   		that are part of a network specified later in the file.
+#   		To be effective, "reject" must appear before the later
+#   		entries.
+# 
+# Local UNIX-domain socket connections support only the AUTH_TYPEs of
+# "trust", "password", "crypt", and "reject".
+# 
+# 
+# 
 # Examples
-# --------
-#
-# TYPE       DATABASE    IP_ADDRESS    MASK               AUTHTYPE  MAP
+# ========
 # 
-# Allow any user on the local system to connect to any
-# database under any username, but only via an IP connection:
-#
-# host       all         127.0.0.1     255.255.255.255    trust     
-#
-# The same, over Unix-socket connections:
-#
+# 
+# Allow any user on the local system to connect to any database under any
+# username using Unix-domain sockets (the default for local connections):
+# TYPE       DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT
 # local      all                                          trust
-#
+# 
+# The same using IP connections on the same machine:
+# TYPE       DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT
+# host       all         127.0.0.1     255.255.255.255    trust     
+# 
 # Allow any user from any host with IP address 192.168.93.x to
-# connect to database "template1" as the same username that ident on that
-# host identifies him as (typically his Unix username):
-#
-# host       template1   192.168.93.0  255.255.255.0      ident     sameuser
+# connect to database "template1" as the same username that ident reports
+# for the connection (typically his Unix username):
+# 
+# TYPE       DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT
+# 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:
-#
+# 
+# TYPE       DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT
 # host       template1   192.168.12.10 255.255.255.255    crypt
-#
+# 
 # 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
-# matched first), but allow Kerberos V5-validated connections from anywhere
-# else on the Internet. The zero mask means that no bits of the host IP
-# address are considered, so it matches any host:
-#
+# all connection from 192.168.54.1 (since that entry will be matched
+# first), but allow Kerberos V5-validated connections from anywhere else
+# on the Internet. The zero mask means that no bits of the host IP address
+# are considered, so it matches any host:
+# 
+# 
+# TYPE       DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT
 # host       all        192.168.54.1   255.255.255.255    reject
 # host       all        0.0.0.0        0.0.0.0            krb5
-#
-# Allow users from 192.168.x.x hosts to connect to any database, if they
-# pass the ident check.  If, for example, ident says the user is "bryanh"
-# and he requests to connect as PostgreSQL user "guest1", the connection
-# is allowed if there is an entry in pg_ident.conf for map "omicron" that
-# says "bryanh" is allowed to connect as "guest1":
-#
-# host       all        192.168.0.0    255.255.0.0        ident     omicron
-#
-
-
+# 
+# Allow users from 192.168.x.x hosts to connect to any database if they
+# pass the ident check. For example, if ident says the user is "james" and
+# he requests to connect as PostgreSQL user "guest", the connection is
+# allowed if there is an entry in $PGDATA/pg_ident.conf with map name 
+# "phoenix" that says "james" is allowed to connect as "guest":
+# 
+# TYPE       DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT
+# host       all        192.168.0.0    255.255.0.0        ident      phoenix
+# 
+# See $PGDATA/pg_ident.conf for more information on Ident maps.
+# 
 # Put your actual configuration here
-# ----------------------------------
-
-# This default configuration allows any local user to connect as any
+# ==================================
+# 
+# This default configuration allows any local user to connect with any
 # PostgreSQL username, over either UNIX domain sockets or IP:
-
-local        all                                           trust
-host         all         127.0.0.1     255.255.255.255     trust
-
+# 
 # If you want to allow non-local connections, you will need to add more
-# "host" records (and don't forget to start the postmaster with "-i"!).
-
-# CAUTION: if you are on a multiple-user machine, the above default
-# configuration is probably too liberal for you --- change it to use
+# "host" records. Also, remember IP connections are only enabled if you
+# start the postmaster with the -i option.
+# 
+# CAUTION: if you are on a multiple-user machine, the default
+# configuration is probably too liberal for you. Change it to use
 # something other than "trust" authentication.
+# 
+# TYPE     DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT
+
+local      all                                          trust
+host       all         127.0.0.1     255.255.255.255    trust
+
diff --git a/src/backend/libpq/pg_ident.conf.sample b/src/backend/libpq/pg_ident.conf.sample
index 4abaff974140ae267ea74563d9eeb50c3f57e927..d321461c0c8e2fda5004b1715a31b6edbd0164d5 100644
--- a/src/backend/libpq/pg_ident.conf.sample
+++ b/src/backend/libpq/pg_ident.conf.sample
@@ -1,29 +1,31 @@
-# This is the pg_ident.conf file, which is used with Postgres ident-based
-# authentication (a subtype of host-based authentication).
-
-# This is a table of ident usernames (typically Unix usernames) and 
-# their corresponding Postgres usernames.  For example, user "bryanh" on
-# some particular remote system may equate to Postgres user "guest1".
-
-# This file contains multiple maps.  Each has a name.  The pg_hba.conf
-# file determines what connections relate to this file and for those that
-# do, which map to use.
-
-# Each record consists of 3 tokens:
-#
-# 1) map name
-# 2) ident username
-# 3) Postgres username
-
-# Note that it is possible for one user to map to multiple Postgres usernames.
-# A user always has to specify when he connects what Postgres username he is
-# using.  This file is only used to validate that selection.
-
-# If you just need a one-to-one correspondence between usernames reported
-# by ident and Postgres usernames, you don't need this file.  Instead use
-# the special map name "sameuser" in pg_hba.conf.
-
-#MAP       IDENT    POSTGRES USERNAME
-
-#testmap   robert   bob
-#testmap   lucy     lucy
+# 
+# 		PostgreSQL IDENT-BASED AUTHENTICATION MAPS
+# 
+# This file controls PostgreSQL ident-based authentication. It maps ident
+# usernames (typically Unix usernames) to their corresponding PostgreSQL
+# usernames. Entries are grouped by map name. Each record consists of
+# three fields:
+# 
+# 	o map name
+# 	o ident username
+# 	o PostgreSQL username
+# 
+# For example, the following entry equates user "james" on a remote system
+# to PostgreSQL user "guest" in the map named "phoenix":
+# 
+# MAP       IDENT    PGUSERNAME
+# phoenix   james    guest
+# 
+# "phoenix" can now be used by an "ident" record in $DATA/pg_hba.conf.
+# 
+# Multiple maps may be specified in this file and used by pg_hba.conf.
+# 
+# Note that it is possible for a remote user to map to multiple PostgreSQL
+# usernames. The PostgreSQL username specified at connection time controls
+# which one is used.
+# 
+# If all ident usernames and PostgreSQL usernames are the same, you don't
+# need this file. Instead, use the special map name "sameuser" in
+# pg_hba.conf.
+# 
+# MAP     IDENT    PGUSERNAME