Thread: Re: [BUGS] Bug #756: suggestion: file with password instead of
Tom Lane wrote: > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > OK, next question. Is this something that can be fixed during beta. > > Yeah, I think so --- it's not forcing an initdb, so it won't be too > painful for beta testers. And once we release it will be very hard > to change the definition of the feature; better to get it right now. OK, patch applied. I will update HISTORY now and send an email to hackers outlining the change. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 Index: doc/src/sgml/libpq.sgml =================================================================== RCS file: /cvsroot/pgsql-server/doc/src/sgml/libpq.sgml,v retrieving revision 1.94 diff -c -c -r1.94 libpq.sgml *** doc/src/sgml/libpq.sgml 2 Sep 2002 20:21:32 -0000 1.94 --- doc/src/sgml/libpq.sgml 5 Sep 2002 21:46:31 -0000 *************** *** 2052,2074 **** </listitem> <listitem> <para> - <indexterm> - <primary><envar>PGPASSWORDFILE</envar></primary> - </indexterm> - <envar>PGPASSWORDFILE</envar> - sets the password file used if the backend demands password authentication. - This file should have the format - <screen> - <replaceable>hostname</replaceable>:<replaceable>port</replaceable>:<replaceable>database</replaceable>:<replaceable>username</replaceable>:<replaceable>password</replaceable> - </screen> - Any of these may be a literal name, or a <literal>*</literal> that matches - anything. The first match will be the one used, so put more specific entries first. - Entries with <literal>:</literal> or <literal>\</literal> should be escaped - with <literal>\</literal>. - </para> - </listitem> - <listitem> - <para> <envar>PGREALM</envar> sets the Kerberos realm to use with <productname>PostgreSQL</productname>, if it is different from the local realm. If <envar>PGREALM</envar> is set, <productname>PostgreSQL</productname> --- 2052,2057 ---- *************** *** 2139,2144 **** --- 2122,2148 ---- for information on correct values for these environment variables. </para> + </sect1> + + + <sect1 id="libpq-files"> + <title>Files</title> + + <indexterm zone="libpq-files"> + <primary>files</primary> + </indexterm> + <para> + <filename>$HOME/.pgpass</filename> is a file that can contain passwords + to be used if the connection requires a password. This file should have the + format: + <screen> + <replaceable>hostname</replaceable>:<replaceable>port</replaceable>:<replaceable>database</replaceable>:<replaceable>username</replaceable>:<replaceable>password</replaceable> + </screen> + Any of these may be a literal name, or <literal>*</literal>, which matches + anything. The first match will be used so put more specific entries first. + Entries with <literal>:</literal> or <literal>\</literal> should be escaped + with <literal>\</literal>. + </para> </sect1> <sect1 id="libpq-threading"> Index: doc/src/sgml/ref/clusterdb.sgml =================================================================== RCS file: /cvsroot/pgsql-server/doc/src/sgml/ref/clusterdb.sgml,v retrieving revision 1.2 diff -c -c -r1.2 clusterdb.sgml *** doc/src/sgml/ref/clusterdb.sgml 3 Sep 2002 01:11:37 -0000 1.2 --- doc/src/sgml/ref/clusterdb.sgml 5 Sep 2002 21:46:32 -0000 *************** *** 54,63 **** </para> <para> ! <application>clusterdb</application> will need to connect several times to the ! <productname>PostgreSQL</productname> server. If you are using password ! authentication, it will ask for the password each time. It will probably be ! very convenient to have a PGPASSWORDFILE in that case. </para> </refsect1> --- 54,63 ---- </para> <para> ! <application>clusterdb</application> might need to connect several ! times to the <productname>PostgreSQL</productname> server, asking for ! a password each time. It is convenient to have a ! <filename>$HOME/.pgpass</> file in such cases. </para> </refsect1> Index: doc/src/sgml/ref/pg_dumpall.sgml =================================================================== RCS file: /cvsroot/pgsql-server/doc/src/sgml/ref/pg_dumpall.sgml,v retrieving revision 1.32 diff -c -c -r1.32 pg_dumpall.sgml *** doc/src/sgml/ref/pg_dumpall.sgml 27 Aug 2002 18:57:26 -0000 1.32 --- doc/src/sgml/ref/pg_dumpall.sgml 5 Sep 2002 21:46:34 -0000 *************** *** 61,66 **** --- 61,74 ---- The SQL script will be written to the standard output. Shell operators should be used to redirect it into a file. </para> + + <para> + <application>pg_dumpall</application> might need to connect several + times to the <productname>PostgreSQL</productname> server, asking for + a password each time. It is convenient to have a + <filename>$HOME/.pgpass</> file in such cases. + </para> + </refsect1> <refsect1> Index: doc/src/sgml/ref/vacuumdb.sgml =================================================================== RCS file: /cvsroot/pgsql-server/doc/src/sgml/ref/vacuumdb.sgml,v retrieving revision 1.24 diff -c -c -r1.24 vacuumdb.sgml *** doc/src/sgml/ref/vacuumdb.sgml 27 Aug 2002 03:55:17 -0000 1.24 --- doc/src/sgml/ref/vacuumdb.sgml 5 Sep 2002 21:46:34 -0000 *************** *** 62,70 **** <para> ! <application>vacuumdb</application> will need to connect several times to the ! <productname>PostgreSQL</productname> server, asking for the password each ! time. It will probably be very convenient to have a PGPASSWORDFILE in that case. </para> </refsect1> --- 62,71 ---- <para> ! <application>vacuumdb</application> might need to connect several ! times to the <productname>PostgreSQL</productname> server, asking for ! a password each time. It is convenient to have a ! <filename>$HOME/.pgpass</> file in such cases. </para> </refsect1> Index: src/bin/psql/input.c =================================================================== RCS file: /cvsroot/pgsql-server/src/bin/psql/input.c,v retrieving revision 1.19 diff -c -c -r1.19 input.c *** src/bin/psql/input.c 10 Apr 2002 22:46:58 -0000 1.19 --- src/bin/psql/input.c 5 Sep 2002 21:46:38 -0000 *************** *** 30,35 **** --- 30,37 ---- static void finishInput(int, void *); #endif + #define PSQLHISTORY "/.psql_history" + /* * gets_interactive() *************** *** 142,152 **** home = getenv("HOME"); if (home) { ! char *psql_history = (char *) malloc(strlen(home) + 20); if (psql_history) { ! sprintf(psql_history, "%s/.psql_history", home); read_history(psql_history); free(psql_history); } --- 144,155 ---- home = getenv("HOME"); if (home) { ! char *psql_history = (char *) malloc(strlen(home) + ! strlen(PSQLHISTORY) + 1); if (psql_history) { ! sprintf(psql_history, "%s" PSQLHISTORY, home); read_history(psql_history); free(psql_history); } *************** *** 201,214 **** home = getenv("HOME"); if (home) { ! psql_history = (char *) malloc(strlen(home) + 20); if (psql_history) { const char *var = GetVariable(pset.vars, "HISTSIZE"); if (var) stifle_history(atoi(var)); ! sprintf(psql_history, "%s/.psql_history", home); write_history(psql_history); free(psql_history); } --- 204,218 ---- home = getenv("HOME"); if (home) { ! psql_history = (char *) malloc(strlen(home) + ! strlen(PSQLHISTORY) + 1); if (psql_history) { const char *var = GetVariable(pset.vars, "HISTSIZE"); if (var) stifle_history(atoi(var)); ! sprintf(psql_history, "%s" PSQLHISTORY, home); write_history(psql_history); free(psql_history); } Index: src/bin/psql/startup.c =================================================================== RCS file: /cvsroot/pgsql-server/src/bin/psql/startup.c,v retrieving revision 1.64 diff -c -c -r1.64 startup.c *** src/bin/psql/startup.c 4 Sep 2002 20:31:36 -0000 1.64 --- src/bin/psql/startup.c 5 Sep 2002 21:46:41 -0000 *************** *** 599,622 **** #define R_OK 0 #endif /* Look for one in the home dir */ home = getenv("HOME"); if (home) { ! psqlrc = malloc(strlen(home) + 20); if (!psqlrc) { fprintf(stderr, gettext("%s: out of memory\n"), pset.progname); exit(EXIT_FAILURE); } ! sprintf(psqlrc, "%s/.psqlrc-" PG_VERSION, home); if (access(psqlrc, R_OK) == 0) process_file(psqlrc); else { ! sprintf(psqlrc, "%s/.psqlrc", home); if (access(psqlrc, R_OK) == 0) process_file(psqlrc); } --- 599,625 ---- #define R_OK 0 #endif + #define PSQLRC "/.psqlrc" + /* Look for one in the home dir */ home = getenv("HOME"); if (home) { ! psqlrc = malloc(strlen(home) + strlen(PSQLRC) + 1 + ! strlen(PG_VERSION) + 1); if (!psqlrc) { fprintf(stderr, gettext("%s: out of memory\n"), pset.progname); exit(EXIT_FAILURE); } ! sprintf(psqlrc, "%s" PSQLRC "-" PG_VERSION, home); if (access(psqlrc, R_OK) == 0) process_file(psqlrc); else { ! sprintf(psqlrc, "%s" PSQLRC, home); if (access(psqlrc, R_OK) == 0) process_file(psqlrc); } Index: src/interfaces/libpq/fe-connect.c =================================================================== RCS file: /cvsroot/pgsql-server/src/interfaces/libpq/fe-connect.c,v retrieving revision 1.201 diff -c -c -r1.201 fe-connect.c *** src/interfaces/libpq/fe-connect.c 4 Sep 2002 20:31:46 -0000 1.201 --- src/interfaces/libpq/fe-connect.c 5 Sep 2002 21:46:55 -0000 *************** *** 66,71 **** --- 66,72 ---- #define NOTIFYLIST_INITIAL_SIZE 10 #define NOTIFYLIST_GROWBY 10 + #define PGPASSFILE "/.pgpass" /* ---------- * Definition of the conninfo parameters and their fallback resources. *************** *** 186,192 **** PQExpBuffer errorMessage); char *pwdfMatchesString(char *buf, char *token); char *PasswordFromFile(char *hostname, char *port, char *dbname, ! char *username, char *pwdfile); /* * Connecting to a Database --- 187,193 ---- PQExpBuffer errorMessage); char *pwdfMatchesString(char *buf, char *token); char *PasswordFromFile(char *hostname, char *port, char *dbname, ! char *username); /* * Connecting to a Database *************** *** 395,404 **** * * PGPASSWORD The user's password. * - * PGPASSWORDFILE - * A file that contains host:port:database:user:password - * for authentication - * * PGDATABASE name of database to which to connect if <pgdatabase> * argument is NULL or a null string * --- 396,401 ---- *************** *** 506,513 **** else if ((tmp = getenv("PGPASSWORD")) != NULL) conn->pgpass = strdup(tmp); else if ((tmp = PasswordFromFile(conn->pghost, conn->pgport, ! conn->dbName, conn->pguser, ! getenv("PGPASSWORDFILE"))) != NULL) conn->pgpass = tmp; else conn->pgpass = strdup(DefaultPassword); --- 503,509 ---- else if ((tmp = getenv("PGPASSWORD")) != NULL) conn->pgpass = strdup(tmp); else if ((tmp = PasswordFromFile(conn->pghost, conn->pgport, ! conn->dbName, conn->pguser))) conn->pgpass = tmp; else conn->pgpass = strdup(DefaultPassword); *************** *** 2905,2926 **** /* get a password from the password file. */ char * ! PasswordFromFile(char *hostname, char *port, char *dbname, ! char *username, char *pwdfile) { FILE *fp; #define LINELEN NAMEDATALEN*5 char buf[LINELEN]; - struct stat stat_buf; - - if (pwdfile == NULL || strcmp(pwdfile, "") == 0) - return NULL; ! if (dbname == NULL || strcmp(dbname, "") == 0) return NULL; ! if (username == NULL || strcmp(username, "") == 0) return NULL; if (hostname == NULL) --- 2901,2920 ---- /* get a password from the password file. */ char * ! PasswordFromFile(char *hostname, char *port, char *dbname, char *username) { FILE *fp; + char *pgpassfile; + char *home; + struct stat stat_buf; #define LINELEN NAMEDATALEN*5 char buf[LINELEN]; ! if (dbname == NULL || strlen(dbname) == 0) return NULL; ! if (username == NULL || strlen(username) == 0) return NULL; if (hostname == NULL) *************** *** 2929,2948 **** if (port == NULL) port = DEF_PGPORT_STR; /* If password file cannot be opened, ignore it. */ ! if (stat(pwdfile, &stat_buf) == -1) return NULL; /* If password file is insecure, alert the user and ignore it. */ if (stat_buf.st_mode & (S_IRWXG | S_IRWXO)) { fprintf(stderr, libpq_gettext("WARNING: Password file %s has world or group read access; permission should be u=rw (0600)"), ! pwdfile); return NULL; } ! fp = fopen(pwdfile, "r"); if (fp == NULL) return NULL; --- 2923,2963 ---- if (port == NULL) port = DEF_PGPORT_STR; + /* Look for it in the home dir */ + home = getenv("HOME"); + if (home) + { + pgpassfile = malloc(strlen(home) + strlen(PGPASSFILE) + 1); + if (!pgpassfile) + { + fprintf(stderr, gettext("%s: out of memory\n"), pset.progname); + exit(EXIT_FAILURE); + } + } + else + return NULL; + + sprintf(pgpassfile, "%s" PGPASSFILE, home); + /* If password file cannot be opened, ignore it. */ ! if (stat(pgpassfile, &stat_buf) == -1) ! { ! free(pgpassfile); return NULL; + } /* If password file is insecure, alert the user and ignore it. */ if (stat_buf.st_mode & (S_IRWXG | S_IRWXO)) { fprintf(stderr, libpq_gettext("WARNING: Password file %s has world or group read access; permission should be u=rw (0600)"), ! pgpassfile); ! free(pgpassfile); return NULL; } ! fp = fopen(pgpassfile, "r"); ! free(pgpassfile); if (fp == NULL) return NULL; *************** *** 2965,2970 **** --- 2980,2986 ---- fclose(fp); return ret; } + fclose(fp); return NULL;
Bruce Momjian <pgman@candle.pha.pa.us> writes: > + #define PSQLHISTORY "/.psql_history" > ... > ! char *psql_history = (char *) malloc(strlen(home) + > ! strlen(PSQLHISTORY) + 1); > ! sprintf(psql_history, "%s" PSQLHISTORY, home); This seems like a really ugly coding practice. The sprintf is hard to read and absolutely dependent on the assumption that PSQLHISTORY contains no %. I'd suggest this pattern: #define PSQLHISTORY ".psql_history" > ... > ! char *psql_history = (char *) malloc(strlen(home) + > ! strlen(PSQLHISTORY) + 2); > ! sprintf(psql_history, "%s/%s", home, PSQLHISTORY); as being easier to read and safer. In PasswordFromFile(): > + /* Look for it in the home dir */ > + home = getenv("HOME"); > + if (home) > + { > + pgpassfile = malloc(strlen(home) + strlen(PGPASSFILE) + 1); > + if (!pgpassfile) > + { > + fprintf(stderr, gettext("%s: out of memory\n"), pset.progname); > + exit(EXIT_FAILURE); > + } > + } > + else > + return NULL; libpq has no business calling exit(). How about just "return NULL" like all the other failure cases in that routine? regards, tom lane
OK, I will make those changes. Thanks. --------------------------------------------------------------------------- Tom Lane wrote: > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > + #define PSQLHISTORY "/.psql_history" > > ... > > ! char *psql_history = (char *) malloc(strlen(home) + > > ! strlen(PSQLHISTORY) + 1); > > > ! sprintf(psql_history, "%s" PSQLHISTORY, home); > > This seems like a really ugly coding practice. The sprintf is hard to > read and absolutely dependent on the assumption that PSQLHISTORY > contains no %. I'd suggest this pattern: > > #define PSQLHISTORY ".psql_history" > > ... > > ! char *psql_history = (char *) malloc(strlen(home) + > > ! strlen(PSQLHISTORY) + 2); > > > ! sprintf(psql_history, "%s/%s", home, PSQLHISTORY); > > as being easier to read and safer. > > In PasswordFromFile(): > > > + /* Look for it in the home dir */ > > + home = getenv("HOME"); > > + if (home) > > + { > > + pgpassfile = malloc(strlen(home) + strlen(PGPASSFILE) + 1); > > + if (!pgpassfile) > > + { > > + fprintf(stderr, gettext("%s: out of memory\n"), pset.progname); > > + exit(EXIT_FAILURE); > > + } > > + } > > + else > > + return NULL; > > libpq has no business calling exit(). How about just "return NULL" like > all the other failure cases in that routine? > > regards, tom lane > > ---------------------------(end of broadcast)--------------------------- > TIP 4: Don't 'kill -9' the postmaster > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073
OK, changes made. The pasting wasn't my idea but was there as part of the original source: sprintf(psqlrc, "%s/.psqlrc-" PG_VERSION, home); I thought that was the way to do it so I propogated it consistenly. No unpropoaged. Thanks for the code review. --------------------------------------------------------------------------- Tom Lane wrote: > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > + #define PSQLHISTORY "/.psql_history" > > ... > > ! char *psql_history = (char *) malloc(strlen(home) + > > ! strlen(PSQLHISTORY) + 1); > > > ! sprintf(psql_history, "%s" PSQLHISTORY, home); > > This seems like a really ugly coding practice. The sprintf is hard to > read and absolutely dependent on the assumption that PSQLHISTORY > contains no %. I'd suggest this pattern: > > #define PSQLHISTORY ".psql_history" > > ... > > ! char *psql_history = (char *) malloc(strlen(home) + > > ! strlen(PSQLHISTORY) + 2); > > > ! sprintf(psql_history, "%s/%s", home, PSQLHISTORY); > > as being easier to read and safer. > > In PasswordFromFile(): > > > + /* Look for it in the home dir */ > > + home = getenv("HOME"); > > + if (home) > > + { > > + pgpassfile = malloc(strlen(home) + strlen(PGPASSFILE) + 1); > > + if (!pgpassfile) > > + { > > + fprintf(stderr, gettext("%s: out of memory\n"), pset.progname); > > + exit(EXIT_FAILURE); > > + } > > + } > > + else > > + return NULL; > > libpq has no business calling exit(). How about just "return NULL" like > all the other failure cases in that routine? > > regards, tom lane > > ---------------------------(end of broadcast)--------------------------- > TIP 4: Don't 'kill -9' the postmaster > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 Index: src/bin/psql/input.c =================================================================== RCS file: /cvsroot/pgsql-server/src/bin/psql/input.c,v retrieving revision 1.20 diff -c -c -r1.20 input.c *** src/bin/psql/input.c 5 Sep 2002 22:05:50 -0000 1.20 --- src/bin/psql/input.c 6 Sep 2002 02:27:37 -0000 *************** *** 30,36 **** static void finishInput(int, void *); #endif ! #define PSQLHISTORY "/.psql_history" /* --- 30,36 ---- static void finishInput(int, void *); #endif ! #define PSQLHISTORY ".psql_history" /* *************** *** 144,155 **** home = getenv("HOME"); if (home) { ! char *psql_history = (char *) malloc(strlen(home) + strlen(PSQLHISTORY) + 1); if (psql_history) { ! sprintf(psql_history, "%s" PSQLHISTORY, home); read_history(psql_history); free(psql_history); } --- 144,155 ---- home = getenv("HOME"); if (home) { ! char *psql_history = (char *) malloc(strlen(home) + 1 + strlen(PSQLHISTORY) + 1); if (psql_history) { ! sprintf(psql_history, "%s/%s", home, PSQLHISTORY); read_history(psql_history); free(psql_history); } *************** *** 204,210 **** home = getenv("HOME"); if (home) { ! psql_history = (char *) malloc(strlen(home) + strlen(PSQLHISTORY) + 1); if (psql_history) { --- 204,210 ---- home = getenv("HOME"); if (home) { ! psql_history = (char *) malloc(strlen(home) + 1 + strlen(PSQLHISTORY) + 1); if (psql_history) { *************** *** 212,218 **** if (var) stifle_history(atoi(var)); ! sprintf(psql_history, "%s" PSQLHISTORY, home); write_history(psql_history); free(psql_history); } --- 212,218 ---- if (var) stifle_history(atoi(var)); ! sprintf(psql_history, "%s/%s", home, PSQLHISTORY); write_history(psql_history); free(psql_history); } Index: src/bin/psql/startup.c =================================================================== RCS file: /cvsroot/pgsql-server/src/bin/psql/startup.c,v retrieving revision 1.65 diff -c -c -r1.65 startup.c *** src/bin/psql/startup.c 5 Sep 2002 22:05:50 -0000 1.65 --- src/bin/psql/startup.c 6 Sep 2002 02:27:39 -0000 *************** *** 42,48 **** */ PsqlSettings pset; ! #define PSQLRC "/.psqlrc" /* * Structures to pass information between the option parsing routine --- 42,48 ---- */ PsqlSettings pset; ! #define PSQLRC ".psqlrc" /* * Structures to pass information between the option parsing routine *************** *** 605,611 **** if (home) { ! psqlrc = malloc(strlen(home) + strlen(PSQLRC) + 1 + strlen(PG_VERSION) + 1); if (!psqlrc) { --- 605,611 ---- if (home) { ! psqlrc = malloc(strlen(home) + 1 + strlen(PSQLRC) + 1 + strlen(PG_VERSION) + 1); if (!psqlrc) { *************** *** 613,624 **** exit(EXIT_FAILURE); } ! sprintf(psqlrc, "%s" PSQLRC "-" PG_VERSION, home); if (access(psqlrc, R_OK) == 0) process_file(psqlrc); else { ! sprintf(psqlrc, "%s" PSQLRC, home); if (access(psqlrc, R_OK) == 0) process_file(psqlrc); } --- 613,624 ---- exit(EXIT_FAILURE); } ! sprintf(psqlrc, "%s/%s-%s", home, PSQLRC, PG_VERSION); if (access(psqlrc, R_OK) == 0) process_file(psqlrc); else { ! sprintf(psqlrc, "%s/%s", home, PSQLRC); if (access(psqlrc, R_OK) == 0) process_file(psqlrc); } Index: src/interfaces/libpq/fe-connect.c =================================================================== RCS file: /cvsroot/pgsql-server/src/interfaces/libpq/fe-connect.c,v retrieving revision 1.203 diff -c -c -r1.203 fe-connect.c *** src/interfaces/libpq/fe-connect.c 5 Sep 2002 22:24:23 -0000 1.203 --- src/interfaces/libpq/fe-connect.c 6 Sep 2002 02:27:50 -0000 *************** *** 66,72 **** #define NOTIFYLIST_INITIAL_SIZE 10 #define NOTIFYLIST_GROWBY 10 ! #define PGPASSFILE "/.pgpass" /* ---------- * Definition of the conninfo parameters and their fallback resources. --- 66,72 ---- #define NOTIFYLIST_INITIAL_SIZE 10 #define NOTIFYLIST_GROWBY 10 ! #define PGPASSFILE ".pgpass" /* ---------- * Definition of the conninfo parameters and their fallback resources. *************** *** 2927,2944 **** home = getenv("HOME"); if (home) { ! pgpassfile = malloc(strlen(home) + strlen(PGPASSFILE) + 1); if (!pgpassfile) { - fprintf(stderr, libpq_gettext("out of memory\n")); ! exit(EXIT_FAILURE); } } else return NULL; ! sprintf(pgpassfile, "%s" PGPASSFILE, home); /* If password file cannot be opened, ignore it. */ if (stat(pgpassfile, &stat_buf) == -1) --- 2927,2943 ---- home = getenv("HOME"); if (home) { ! pgpassfile = malloc(strlen(home) + 1 + strlen(PGPASSFILE) + 1); if (!pgpassfile) { fprintf(stderr, libpq_gettext("out of memory\n")); ! return NULL; } } else return NULL; ! sprintf(pgpassfile, "%s/%s", home, PGPASSFILE); /* If password file cannot be opened, ignore it. */ if (stat(pgpassfile, &stat_buf) == -1) Index: src/bin/psql/input.c =================================================================== RCS file: /cvsroot/pgsql-server/src/bin/psql/input.c,v retrieving revision 1.20 diff -c -c -r1.20 input.c *** src/bin/psql/input.c 5 Sep 2002 22:05:50 -0000 1.20 --- src/bin/psql/input.c 6 Sep 2002 02:27:37 -0000 *************** *** 30,36 **** static void finishInput(int, void *); #endif ! #define PSQLHISTORY "/.psql_history" /* --- 30,36 ---- static void finishInput(int, void *); #endif ! #define PSQLHISTORY ".psql_history" /* *************** *** 144,155 **** home = getenv("HOME"); if (home) { ! char *psql_history = (char *) malloc(strlen(home) + strlen(PSQLHISTORY) + 1); if (psql_history) { ! sprintf(psql_history, "%s" PSQLHISTORY, home); read_history(psql_history); free(psql_history); } --- 144,155 ---- home = getenv("HOME"); if (home) { ! char *psql_history = (char *) malloc(strlen(home) + 1 + strlen(PSQLHISTORY) + 1); if (psql_history) { ! sprintf(psql_history, "%s/%s", home, PSQLHISTORY); read_history(psql_history); free(psql_history); } *************** *** 204,210 **** home = getenv("HOME"); if (home) { ! psql_history = (char *) malloc(strlen(home) + strlen(PSQLHISTORY) + 1); if (psql_history) { --- 204,210 ---- home = getenv("HOME"); if (home) { ! psql_history = (char *) malloc(strlen(home) + 1 + strlen(PSQLHISTORY) + 1); if (psql_history) { *************** *** 212,218 **** if (var) stifle_history(atoi(var)); ! sprintf(psql_history, "%s" PSQLHISTORY, home); write_history(psql_history); free(psql_history); } --- 212,218 ---- if (var) stifle_history(atoi(var)); ! sprintf(psql_history, "%s/%s", home, PSQLHISTORY); write_history(psql_history); free(psql_history); } Index: src/bin/psql/startup.c =================================================================== RCS file: /cvsroot/pgsql-server/src/bin/psql/startup.c,v retrieving revision 1.65 diff -c -c -r1.65 startup.c *** src/bin/psql/startup.c 5 Sep 2002 22:05:50 -0000 1.65 --- src/bin/psql/startup.c 6 Sep 2002 02:27:39 -0000 *************** *** 42,48 **** */ PsqlSettings pset; ! #define PSQLRC "/.psqlrc" /* * Structures to pass information between the option parsing routine --- 42,48 ---- */ PsqlSettings pset; ! #define PSQLRC ".psqlrc" /* * Structures to pass information between the option parsing routine *************** *** 605,611 **** if (home) { ! psqlrc = malloc(strlen(home) + strlen(PSQLRC) + 1 + strlen(PG_VERSION) + 1); if (!psqlrc) { --- 605,611 ---- if (home) { ! psqlrc = malloc(strlen(home) + 1 + strlen(PSQLRC) + 1 + strlen(PG_VERSION) + 1); if (!psqlrc) { *************** *** 613,624 **** exit(EXIT_FAILURE); } ! sprintf(psqlrc, "%s" PSQLRC "-" PG_VERSION, home); if (access(psqlrc, R_OK) == 0) process_file(psqlrc); else { ! sprintf(psqlrc, "%s" PSQLRC, home); if (access(psqlrc, R_OK) == 0) process_file(psqlrc); } --- 613,624 ---- exit(EXIT_FAILURE); } ! sprintf(psqlrc, "%s/%s-%s", home, PSQLRC, PG_VERSION); if (access(psqlrc, R_OK) == 0) process_file(psqlrc); else { ! sprintf(psqlrc, "%s/%s", home, PSQLRC); if (access(psqlrc, R_OK) == 0) process_file(psqlrc); } Index: src/interfaces/libpq/fe-connect.c =================================================================== RCS file: /cvsroot/pgsql-server/src/interfaces/libpq/fe-connect.c,v retrieving revision 1.203 diff -c -c -r1.203 fe-connect.c *** src/interfaces/libpq/fe-connect.c 5 Sep 2002 22:24:23 -0000 1.203 --- src/interfaces/libpq/fe-connect.c 6 Sep 2002 02:27:50 -0000 *************** *** 66,72 **** #define NOTIFYLIST_INITIAL_SIZE 10 #define NOTIFYLIST_GROWBY 10 ! #define PGPASSFILE "/.pgpass" /* ---------- * Definition of the conninfo parameters and their fallback resources. --- 66,72 ---- #define NOTIFYLIST_INITIAL_SIZE 10 #define NOTIFYLIST_GROWBY 10 ! #define PGPASSFILE ".pgpass" /* ---------- * Definition of the conninfo parameters and their fallback resources. *************** *** 2927,2944 **** home = getenv("HOME"); if (home) { ! pgpassfile = malloc(strlen(home) + strlen(PGPASSFILE) + 1); if (!pgpassfile) { - fprintf(stderr, libpq_gettext("out of memory\n")); ! exit(EXIT_FAILURE); } } else return NULL; ! sprintf(pgpassfile, "%s" PGPASSFILE, home); /* If password file cannot be opened, ignore it. */ if (stat(pgpassfile, &stat_buf) == -1) --- 2927,2943 ---- home = getenv("HOME"); if (home) { ! pgpassfile = malloc(strlen(home) + 1 + strlen(PGPASSFILE) + 1); if (!pgpassfile) { fprintf(stderr, libpq_gettext("out of memory\n")); ! return NULL; } } else return NULL; ! sprintf(pgpassfile, "%s/%s", home, PGPASSFILE); /* If password file cannot be opened, ignore it. */ if (stat(pgpassfile, &stat_buf) == -1)