-The pathces and a prototype tool to manipulate the ``flat password file
-'' functionality of PostgreSQL6.1
-1. File
-Makefile
-pg_passwd.c the source file of the tool.
-2. How to specify pasword files and their format.
-Specify the password file in the same style of Ident authentication in
-$PGDATA/pg_hba.conf
-host unv 133.65.96.250 255.255.255.255 password passwd
-The above line allows access from 133.65.96.250 using the passwords listed
-in $PGDATA/passwd.
-The format of the password files follows those of /etc/passwd and
-/etc/shadow: the first field is the user name, and the second field
-is the encrypted password. The rest is completely ignored. Thus
-the following three sample lines specify the same user and password pair:.
-pg_guest:/nB7.w5Auq.BY:10031::::::
-pg_guest:/nB7.w5Auq.BY:93001:930::/home/guest:/bin/tcsh
-pg_guest:/nB7.w5Auq.BY:93001
-Note that the original src/backend/libpq/password.c has a bug, which
-disallows the first and the second format. If you want to use these
-formats, please make sure you've applied the patch accompanied with
-this tool.
-3. Usage of pg_passwd
-Supply the password file to the pg_passwd command. In the case described
-above, after ``cd'ing to $PGDATA, the following command execution specify
-the new password for pg_guest:
-% pg_passwd passwd
-Username: pg_guest
-Password:
-Re-enter password:
-where the Password: and Re-enter password: prompts require the same
-password input which are not displayed on the terminal.
-The original password file is renamed to ``passwd.bk''.
-4. How to specify pasasword authentication
-You can use the password authentication fro psq, perl, or pg{tcl,tk}sh.
-4.1 psql
-Use the -u option. Note that the original distribution includes a bug.
-Please make sure you've applied the patch distributed with this tool.
-The following lines show the sample usage of the option:
-% psql -h hyalos -u unv
-Username: pg_guest
-Password:
-Welcome to the POSTGRESQL interactive sql monitor:
- Please read the file COPYRIGHT for copyright terms of POSTGRESQL
- type \? for help on slash commands
- type \q to quit
- type \g or terminate with semicolon to execute query
- You are currently connected to the database: unv
-unv=>
-4.2 perl5
-Use the new style of the Pg.pm like this
-$conn = Pg::connectdb("host=hyalos authtype=password dbname=unv
- user=pg_guest password=xxxxxxx");
-For more details, the users refer to to ``src/pgsql_perl5/Pg.pm''.
-4.3 pg{tcl,tk}sh
-Use the pg_connect comamnd with -conninfo option thus
-% set conn [pg_connect -conninfo \
- "host=hyalos authtype=password dbname=unv \
- user=pg_guest password=xxxxxxx "]
-Use can list all of the keys for the option by executing the following
-command:
-% puts [ pg_conndefaults]
-5. Acknowledgment
-Mr. Ishii, SRA, pointed out the original bugs in the tool. He also
-supplied the Makefile for this distribution.
--------------------------------------------------------------------------
-July 2, 1997
-Yoshihiko Ichikawa, Dept of Info Sci, Fac of Sci, Ochanomizu University
-E-mail: ichikawa@is.ocha.ac.jp
PostgreSQL Data Base Management System (formerly known as Postgres, then
as Postgres95).
#
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/bin/Makefile,v 1.8 1997/08/25 19:41:39 momjian Exp $
+# $Header: /cvsroot/pgsql/src/bin/Makefile,v 1.9 1997/08/25 19:59:52 momjian Exp $
#
#-------------------------------------------------------------------------
$(MAKE) -C pg_version $@
$(MAKE) -C psql $@
$(MAKE) -C pg_dump $@
- $(MAKE) -C pg_passwd $@
+ $(MAKE) -C pg_passwd $@
#
# Shell scripts
#
--- /dev/null
+#-------------------------------------------------------------------------
+#
+# Makefile
+# Makefile for bin/pg_passwd
+#-------------------------------------------------------------------------
+SRCDIR= ../..
+include ../../Makefile.global
+OBJS= pg_passwd.o
+all: pg_passwd
+pg_passwd: $(OBJS)
+ $(CC) -o pg_passwd $(OBJS) $(LDFLAGS)
+install: pg_passwd
+ $(INSTALL) $(INSTL_EXE_OPTS) pg_passwd $(DESTDIR)$(BINDIR)/pg_passwd
+depend dep:
+ $(CC) -MM $(INCLUDE_OPT) *.c >depend
+clean:
+ rm -f pg_passwd $(OBJS)
+ifeq (depend,$(wildcard depend))
+include depend
+endif
--- /dev/null
+The pathces and a prototype tool to manipulate the ``flat password file
+'' functionality of PostgreSQL6.1
+1. File
+Makefile
+pg_passwd.c the source file of the tool.
+2. How to specify pasword files and their format.
+Specify the password file in the same style of Ident authentication in
+$PGDATA/pg_hba.conf
+host unv 133.65.96.250 255.255.255.255 password passwd
+The above line allows access from 133.65.96.250 using the passwords listed
+in $PGDATA/passwd.
+The format of the password files follows those of /etc/passwd and
+/etc/shadow: the first field is the user name, and the second field
+is the encrypted password. The rest is completely ignored. Thus
+the following three sample lines specify the same user and password pair:.
+pg_guest:/nB7.w5Auq.BY:10031::::::
+pg_guest:/nB7.w5Auq.BY:93001:930::/home/guest:/bin/tcsh
+pg_guest:/nB7.w5Auq.BY:93001
+Note that the original src/backend/libpq/password.c has a bug, which
+disallows the first and the second format. If you want to use these
+formats, please make sure you've applied the patch accompanied with
+this tool.
+3. Usage of pg_passwd
+Supply the password file to the pg_passwd command. In the case described
+above, after ``cd'ing to $PGDATA, the following command execution specify
+the new password for pg_guest:
+% pg_passwd passwd
+Username: pg_guest
+Password:
+Re-enter password:
+where the Password: and Re-enter password: prompts require the same
+password input which are not displayed on the terminal.
+The original password file is renamed to ``passwd.bk''.
+4. How to specify pasasword authentication
+You can use the password authentication fro psq, perl, or pg{tcl,tk}sh.
+4.1 psql
+Use the -u option. Note that the original distribution includes a bug.
+Please make sure you've applied the patch distributed with this tool.
+The following lines show the sample usage of the option:
+% psql -h hyalos -u unv
+Username: pg_guest
+Password:
+Welcome to the POSTGRESQL interactive sql monitor:
+ Please read the file COPYRIGHT for copyright terms of POSTGRESQL
+ type \? for help on slash commands
+ type \q to quit
+ type \g or terminate with semicolon to execute query
+ You are currently connected to the database: unv
+unv=>
+4.2 perl5
+Use the new style of the Pg.pm like this
+$conn = Pg::connectdb("host=hyalos authtype=password dbname=unv
+ user=pg_guest password=xxxxxxx");
+For more details, the users refer to to ``src/pgsql_perl5/Pg.pm''.
+4.3 pg{tcl,tk}sh
+Use the pg_connect comamnd with -conninfo option thus
+% set conn [pg_connect -conninfo \
+ "host=hyalos authtype=password dbname=unv \
+ user=pg_guest password=xxxxxxx "]
+Use can list all of the keys for the option by executing the following
+command:
+% puts [ pg_conndefaults]
+5. Acknowledgment
+Mr. Ishii, SRA, pointed out the original bugs in the tool. He also
+supplied the Makefile for this distribution.
+-------------------------------------------------------------------------
+July 2, 1997
+Yoshihiko Ichikawa, Dept of Info Sci, Fac of Sci, Ochanomizu University
+E-mail: ichikawa@is.ocha.ac.jp
+
+PostgreSQL Data Base Management System (formerly known as Postgres, then
+as Postgres95).
+
+This directory contains the version 6.1 release of the PostgreSQL
+database server. The server is not ANSI SQL compliant, but it gets
+closer with every release. After you unzip and untar the distribution
+file, look at file INSTALL for the installation notes and file HISTORY
+for the changes.
+
+The latest version of this software may be obtained at
+ftp://ftp.postgresql.org/pub/. For more information look at our WWW
+home page located at http://www.postgreSQL.org/.
+
+PostgreSQL is not public domain software. It is copyrighted by the
+University of California but may be used according to the licensing
+terms of the the copyright below:
+
+------------------------------------------------------------------------
+
+POSTGRES95 Data Base Management System (formerly known as Postgres, then
+as Postgres95).
+
+Copyright (c) 1994-7 Regents of the University of California
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose, without fee, and without a written agreement
+is hereby granted, provided that the above copyright notice and this
+paragraph and the following two paragraphs appear in all copies.
+
+IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
+DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
+LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
+DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO
+PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
--- /dev/null
+/*
+ * @(#) pg_passwd.c 1.8 09:13:16 97/07/02 Y. Ichikawa
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/time.h>
+#include <ctype.h>
+#define issaltchar(c) (isalnum(c) || (c) == '.' || (c) == '/')
+#include "postgres.h"
+#ifdef HAVE_TERMIOS_H
+#include <termios.h>
+#endif
+#ifdef HAVE_CRYPT_H
+#include <crypt.h>
+#else
+extern char *crypt(const char *, const char *);
+#endif
+char *comname;
+void usage(FILE *stream);
+void read_pwd_file(char *filename);
+void write_pwd_file(char *filename, char *bkname);
+void encrypt_pwd(char key[9], char salt[3], char passwd[14]);
+int check_pwd(char key[9], char passwd[14]);
+void prompt_for_username(char *username);
+void prompt_for_password(char *prompt, char *password);
+void usage(FILE *stream)
+{
+ fprintf(stream, "Usage: %s <password file>\n", comname);
+}
+typedef struct {
+ char *uname;
+ char *pwd;
+ char *rest;
+} pg_pwd;
+#define MAXPWDS 1024
+pg_pwd pwds[MAXPWDS];
+int npwds = 0;
+void read_pwd_file(char *filename)
+{
+ FILE *fp;
+ static char line[512];
+ static char ans[128];
+ int i;
+ try_again:
+ fp = fopen(filename, "r");
+ if (fp == NULL) {
+ if (errno == ENOENT) {
+ printf("File \"%s\" does not exist. Create? (y/n): ", filename);
+ fflush(stdout);
+ fgets(ans, 128, stdin);
+ switch (ans[0]) {
+ case 'y': case 'Y':
+ fp = fopen(filename, "w");
+ if (fp == NULL) {
+ perror(filename);
+ exit(1);
+ }
+ fclose(fp);
+ goto try_again;
+ default:
+ /* cannot continue */
+ exit(1);
+ }
+ } else {
+ perror(filename);
+ exit(1);
+ }
+ }
+ /* read all the entries */
+ for (npwds = 0; npwds < MAXPWDS && fgets(line, 512, fp) != NULL; ++npwds)