Thread: Re: [PATCHES] sslmode patch

Re: [PATCHES] sslmode patch

From
Bruce Momjian
Date:
I had a little problem apply this patch because it had an #ifdef for
elog() parameter passing.  Because ereport() is now a macro, you can't
do #ifdef inside a macro _call_, so I did it this way:


#ifdef USE_SSL
#define EREPORT_SSL_STATUS  (port->ssl ? "on" : "off")
#else
#define EREPORT_SSL_STATUS  "off"
#endif
ereport(FATAL,    (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),     errmsg("no pg_hba.conf entry for host
\"%s\",user \"%s\", database \"%s\", SSL \"%s\"",        hostinfo, port->user_name, port->database_name,
EREPORT_SSL_STATUS)));break;

Is this the proper way to do it?
---------------------------------------------------------------------------

Bruce Momjian wrote:
> 
> Newest patch applied.  Thanks.
> 
> ---------------------------------------------------------------------------
> 
> 
> 
> Jon Jensen wrote:
> > Folks,
> > 
> > At long last I put together a patch to support 4 client SSL negotiation
> > modes (and replace the requiressl boolean). The four options were first
> > spelled out by Magnus Hagander <mha@sollentuna.net> on 2000-08-23 in email
> > to pgsql-hackers, archived here:
> > 
> > http://archives.postgresql.org/pgsql-hackers/2000-08/msg00639.php
> > 
> > My original less-flexible patch and the ensuing thread are archived at:
> > 
> > http://dbforums.com/t623845.html
> > 
> > Attached is a new patch, including documentation.
> > 
> > To sum up, there's a new client parameter "sslmode" and environment 
> > variable "PGSSLMODE", with these options:
> > 
> > sslmode   description
> > -------   -----------
> > disable   Unencrypted non-SSL only
> > allow     Negotiate, prefer non-SSL
> > prefer    Negotiate, prefer SSL (default)
> > require   Require SSL
> > 
> > The only change to the server is a new pg_hba.conf line type,
> > "hostnossl", for specifying connections that are not allowed to use SSL
> > (for example, to prevent servers on a local network from accidentally
> > using SSL and wasting cycles). Thus the 3 pg_hba.conf line types are:
> > 
> > pg_hba.conf line types
> > ----------------------
> > host       applies to either SSL or regular connections
> > hostssl    applies only to SSL connections
> > hostnossl  applies only to regular connections
> > 
> > These client and server options, the postgresql.conf ssl = false option,
> > and finally the possibility of compiling with no SSL support at all,
> > make quite a range of combinations to test. I threw together a test
> > script to try many of them out. It's in a separate tarball with its
> > config files, a patch to psql so it'll announce SSL connections even in
> > absence of a tty, and the test output. The test is especially informative 
> > when run on the same tty the postmaster was started on, so the FATAL: 
> > errors during negotiation are interleaved with the psql client output.
> > 
> > I saw Tom write that new submissions for 7.4 have to be in before midnight
> > local time, and since I'm on the east coast in the US, this just makes it
> > in before the bell. :)
> > 
> > Jon
> 
> Content-Description: 
> 
> [ Attachment, skipping... ]
> 
> Content-Description: 
> 
> [ Attachment, skipping... ]
> 
> > 
> > ---------------------------(end of broadcast)---------------------------
> > TIP 6: Have you searched our list archives?
> > 
> >                http://archives.postgresql.org
> 
> -- 
>   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
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
> 

--  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,
Pennsylvania19073
 


Re: [PATCHES] sslmode patch

From
Tom Lane
Date:
Bruce Momjian <pgman@candle.pha.pa.us> writes:
> I had a little problem apply this patch because it had an #ifdef for
> elog() parameter passing.  Because ereport() is now a macro, you can't
> do #ifdef inside a macro _call_, so I did it this way:

I don't think a non-SSL-enabled build need be pointing that out in every
error message --- the SSL phrase shouldn't even be there in the message.
Accordingly, I'd be inclined to do this:

#ifdef USE_SSL   ereport(FATAL,       (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),        errmsg("no
pg_hba.confentry for host \"%s\", user \"%s\", database \"%s\", %s",               hostinfo, port->user_name,
port->database_name,              (port->ssl ? gettext("SSL on") : gettext("SSL off")))));
 
#else   ereport(FATAL,       (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),        errmsg("no pg_hba.conf entry
forhost \"%s\", user \"%s\", database \"%s\"",               hostinfo, port->user_name, port->database_name)));
 
#endif

This approach is also more localizable.
        regards, tom lane


Re: [PATCHES] sslmode patch

From
Bruce Momjian
Date:
Excellent idea.  Patch attached and applied.

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

Tom Lane wrote:
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > I had a little problem apply this patch because it had an #ifdef for
> > elog() parameter passing.  Because ereport() is now a macro, you can't
> > do #ifdef inside a macro _call_, so I did it this way:
>
> I don't think a non-SSL-enabled build need be pointing that out in every
> error message --- the SSL phrase shouldn't even be there in the message.
> Accordingly, I'd be inclined to do this:
>
> #ifdef USE_SSL
>     ereport(FATAL,
>         (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),
>          errmsg("no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s",
>                 hostinfo, port->user_name, port->database_name,
>                 (port->ssl ? gettext("SSL on") : gettext("SSL off")))));
> #else
>     ereport(FATAL,
>         (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),
>          errmsg("no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"",
>                 hostinfo, port->user_name, port->database_name)));
> #endif
>
> This approach is also more localizable.
>
>             regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
>                http://archives.postgresql.org
>

--
  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: auth.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/libpq/auth.c,v
retrieving revision 1.106
diff -c -c -r1.106 auth.c
*** auth.c    26 Jul 2003 13:50:02 -0000    1.106
--- auth.c    26 Jul 2003 15:21:20 -0000
***************
*** 440,454 ****
                                  NI_NUMERICHOST);

  #ifdef USE_SSL
- #define EREPORT_SSL_STATUS    (port->ssl ? "on" : "off")
- #else
- #define EREPORT_SSL_STATUS    "off"
- #endif
-
                  ereport(FATAL,
                          (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),
                           errmsg("no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", SSL \"%s\"",
!                                 hostinfo, port->user_name, port->database_name, EREPORT_SSL_STATUS)));
                  break;
              }

--- 440,455 ----
                                  NI_NUMERICHOST);

  #ifdef USE_SSL
                  ereport(FATAL,
                          (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),
                           errmsg("no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", SSL \"%s\"",
!                                 hostinfo, port->user_name, port->database_name, port->ssl ? "on" : "off")));
! #else
!                 ereport(FATAL,
!                         (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),
!                          errmsg("no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\"",
!                                 hostinfo, port->user_name, port->database_name)));
! #endif
                  break;
              }


Sorry/spam - how do you unsubscribe?

From
Steven Vajdic
Date: