Re: [HACKERS] .pgpass file and unix domain sockets - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: [HACKERS] .pgpass file and unix domain sockets
Date
Msg-id 200605170218.k4H2IUf20601@candle.pha.pa.us
Whole thread Raw
Responses Re: [HACKERS] .pgpass file and unix domain sockets  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-patches
I have implemented the idea I listed below, patch attached.

---------------------------------------------------------------------------

Bruce Momjian wrote:
>
> Uh, why wouldn't we allow "localhost" to match the default unix domain
> socket name, as well as an empty hostname?  If you specify a non-default
> location, you then have to specify the full path.
>
> ---------------------------------------------------------------------------
>
> Andrew Dunstan wrote:
> >
> > hackers - any opinions?
> >
> > The biggest downside would be that a pgpass file would be version
> > specific for this feature. The badness of this is somewhat mitigated by
> > the ability we now have to specify an alternative pgpassfile location.
> >
> > cheers
> >
> > andrew
> >
> > -------- Original Message --------
> > Subject:     Re: [PATCHES] .pgpass file and unix domain sockets
> > Date:     Tue, 16 May 2006 12:16:53 -0400
> > From:     Tom Lane <tgl@sss.pgh.pa.us>
> > To:     Andrew Dunstan <andrew@dunslane.net>
> > CC:     Joachim Wieland <joe@mcknight.de>, pgsql-patches@postgresql.org
> > References:     <20060516122554.GA4009@mcknight.de>
> > <11676.1147787022@sss.pgh.pa.us> <4469F499.1040002@dunslane.net>
> > <13302.1147795016@sss.pgh.pa.us> <4469FA5A.3090504@dunslane.net>
> >
> >
> >
> > Andrew Dunstan <andrew@dunslane.net> writes:
> > > Tom Lane wrote:
> > >> Personally I wouldn't object to making it match "localhost" in all
> > >> cases.  That's what the documentation says, and the use-case for
> > >> doing something more complicated seems pretty thin.
> >
> > > I almost agree. If anything, I'd prefer to provide for an explicit entry
> > > covering all Unix Domain sockets - it took me by some surprise to find a
> > > while back that "localhost" covers that case - it seems a mismatch with
> > > how pg_hba.conf works.
> >
> > Well, that'd break existing .pgpass files (unless we match localhost
> > too, which seems to defeat the purpose).  But maybe it's worth doing
> > for consistency's sake.  I think we should bring it up on a more
> > widely read list than -patches if you want to propose a
> > non-backwards-compatible change ...
> >
> >
> >
> >
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 1: if posting/reading through Usenet, please send an appropriate
> >        subscribe-nomail command to majordomo@postgresql.org so that your
> >        message can get through to the mailing list cleanly
> >
>
> --
>   Bruce Momjian   http://candle.pha.pa.us
>   EnterpriseDB    http://www.enterprisedb.com
>
>   + If your life is a hard drive, Christ can be your backup. +
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: if posting/reading through Usenet, please send an appropriate
>        subscribe-nomail command to majordomo@postgresql.org so that your
>        message can get through to the mailing list cleanly
>

--
  Bruce Momjian   http://candle.pha.pa.us
  EnterpriseDB    http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +
Index: doc/src/sgml/libpq.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v
retrieving revision 1.208
diff -c -c -r1.208 libpq.sgml
*** doc/src/sgml/libpq.sgml    6 May 2006 16:25:11 -0000    1.208
--- doc/src/sgml/libpq.sgml    17 May 2006 01:52:40 -0000
***************
*** 4000,4008 ****
  entries first when you are using wildcards.)
  If an entry needs to contain <literal>:</literal> or
  <literal>\</literal>, escape this character with <literal>\</literal>.
! A hostname of <literal>localhost</> matches both <literal>host</> (TCP)
! and <literal>local</> (Unix domain socket) connections coming from the
! local machine.
  </para>

  <para>
--- 4000,4008 ----
  entries first when you are using wildcards.)
  If an entry needs to contain <literal>:</literal> or
  <literal>\</literal>, escape this character with <literal>\</literal>.
! A hostname of <literal>localhost</> matches both TCP <literal>host</> (hostname <literal>localhost</>)
! and Unix domain socket <literal>local</> (<literal>pghost</> empty or the default socket directory)
! connections coming from the local machine.
  </para>

  <para>
Index: src/interfaces/libpq/fe-connect.c
===================================================================
RCS file: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v
retrieving revision 1.328
diff -c -c -r1.328 fe-connect.c
*** src/interfaces/libpq/fe-connect.c    14 Mar 2006 22:48:23 -0000    1.328
--- src/interfaces/libpq/fe-connect.c    17 May 2006 01:52:59 -0000
***************
*** 3106,3114 ****
--- 3106,3129 ----
      if (username == NULL || strlen(username) == 0)
          return NULL;

+     /* 'localhost' matches pghost of '' or the default socket directory */
      if (hostname == NULL)
          hostname = DefaultHost;
+     else if (is_absolute_path(hostname))
+     {
+         char        canon_host[MAXPGPATH];
+         char        canon_def_socket[MAXPGPATH];
+
+         StrNCpy(canon_host, hostname, MAXPGPATH);
+         StrNCpy(canon_def_socket, DEFAULT_PGSOCKET_DIR, MAXPGPATH);

+         canonicalize_path(canon_host);
+         canonicalize_path(canon_def_socket);
+
+         if (strcmp(canon_host, canon_def_socket) == 0)
+             hostname = DefaultHost;
+     }
+
      if (port == NULL)
          port = DEF_PGPORT_STR;


pgsql-patches by date:

Previous
From: Joachim Wieland
Date:
Subject: Re: .pgpass file and unix domain sockets
Next
From: Simon Riggs
Date:
Subject: SLRU_BLCKSZ