Re: listening addresses - Mailing list pgsql-patches

From Andrew Dunstan
Subject Re: listening addresses
Date
Msg-id 405F2E6C.40609@dunslane.net
Whole thread Raw
In response to Re: listening addresses  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: listening addresses
List pgsql-patches
Tom Lane wrote:

>
>Please revise, and update the docs too.
>
>
>

Second attempt attached. The fatal message now reads "no configured
listening socket available", but I am not wedded to the wording. I also
was not sure how to mark up * in the docs.

cheers

andrew
Index: doc/src/sgml/runtime.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql-server/doc/src/sgml/runtime.sgml,v
retrieving revision 1.251
diff -c -r1.251 runtime.sgml
*** doc/src/sgml/runtime.sgml    15 Mar 2004 17:57:51 -0000    1.251
--- doc/src/sgml/runtime.sgml    22 Mar 2004 17:26:36 -0000
***************
*** 571,588 ****

       <variablelist>

-      <varlistentry id="guc-tcpip-socket" xreflabel="tcpip_socket">
-       <term><varname>tcpip_socket</varname> (<type>boolean</type>)</term>
-       <listitem>
-        <para>
-         If this is true, then the server will accept TCP/IP connections.<indexterm><primary>TCP/IP</></>
-         Otherwise only local Unix domain socket connections are
-         accepted. It is off by default. This option can only be set at
-         server start.
-        </para>
-       </listitem>
-      </varlistentry>
-
       <varlistentry id="guc-max-connections" xreflabel="max_connections">
        <term><varname>max_connections</varname> (<type>integer</type>)</term>
        <listitem>
--- 571,576 ----
***************
*** 702,717 ****
        </listitem>
       </varlistentry>

!      <varlistentry id="guc-virtual-host" xreflabel="virtual_host">
!       <term><varname>virtual_host</varname> (<type>string</type>)</term>
        <listitem>
         <para>
!         Specifies the IP address(es) on which the server is
!         to listen for connections from client applications.  If specified,
!         it takes the form of a space-separated list of host names and/or
!         numeric IP addresses.  If the list is empty, the server listens
!         on all available addresses (including
!         <systemitem class="systemname">localhost</>).
         </para>
        </listitem>
       </varlistentry>
--- 690,707 ----
        </listitem>
       </varlistentry>

!      <varlistentry id="guc-listen-addresses" xreflabel="listen_addresses">
!       <term><varname>listen_addresses</varname> (<type>string</type>)</term>
        <listitem>
         <para>
!      Specifies the IP address(es) on which the server is
!      to listen for connections from client applications.
!      The default is <systemitem class="systemname">localhost</>.
!      The item takes the form of a space-separated list of host names and/or
!      numeric IP addresses.  The special entry * corresponds to all
!      available IP interfaces.
!      If the list is empty, the server  does not
!      listen on any IP interface at all.
         </para>
        </listitem>
       </varlistentry>
***************
*** 3009,3019 ****
         </row>
         <row>
          <entry><option>-h <replaceable>x</replaceable></option></entry>
!         <entry><literal>virtual_host = <replaceable>x</replaceable></></entry>
         </row>
         <row>
          <entry><option>-i</option></entry>
!         <entry><literal>tcpip_socket = on</></entry>
         </row>
         <row>
          <entry><option>-k <replaceable>x</replaceable></option></entry>
--- 2999,3009 ----
         </row>
         <row>
          <entry><option>-h <replaceable>x</replaceable></option></entry>
!         <entry><literal>listen_addresses = <replaceable>x</replaceable></></entry>
         </row>
         <row>
          <entry><option>-i</option></entry>
!         <entry><literal>listen_addresses = '*'</></entry>
         </row>
         <row>
          <entry><option>-k <replaceable>x</replaceable></option></entry>
Index: src/backend/postmaster/postmaster.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/postmaster/postmaster.c,v
retrieving revision 1.375
diff -c -r1.375 postmaster.c
*** src/backend/postmaster/postmaster.c    15 Mar 2004 16:18:42 -0000    1.375
--- src/backend/postmaster/postmaster.c    22 Mar 2004 17:26:38 -0000
***************
*** 149,155 ****
  /* The socket number we are listening for connections on */
  int            PostPortNumber;
  char       *UnixSocketDir;
! char       *VirtualHost;

  /*
   * MaxBackends is the limit on the number of backends we can start.
--- 149,155 ----
  /* The socket number we are listening for connections on */
  int            PostPortNumber;
  char       *UnixSocketDir;
! char       *ListenAddresses;

  /*
   * MaxBackends is the limit on the number of backends we can start.
***************
*** 202,208 ****
  static int    SendStop = false;

  /* still more option variables */
- bool        NetServer = false;    /* listen on TCP/IP */
  bool        EnableSSL = false;
  bool        SilentMode = false; /* silent mode (-S) */

--- 202,207 ----
***************
*** 513,522 ****
                  SetConfigOption("fsync", "false", PGC_POSTMASTER, PGC_S_ARGV);
                  break;
              case 'h':
!                 SetConfigOption("virtual_host", optarg, PGC_POSTMASTER, PGC_S_ARGV);
                  break;
              case 'i':
!                 SetConfigOption("tcpip_socket", "true", PGC_POSTMASTER, PGC_S_ARGV);
                  break;
              case 'k':
                  SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, PGC_S_ARGV);
--- 512,521 ----
                  SetConfigOption("fsync", "false", PGC_POSTMASTER, PGC_S_ARGV);
                  break;
              case 'h':
!                 SetConfigOption("listen_addresses", optarg, PGC_POSTMASTER, PGC_S_ARGV);
                  break;
              case 'i':
!                 SetConfigOption("listen_addresses", "*", PGC_POSTMASTER, PGC_S_ARGV);
                  break;
              case 'k':
                  SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, PGC_S_ARGV);
***************
*** 704,714 ****
       * Initialize SSL library, if specified.
       */
  #ifdef USE_SSL
-     if (EnableSSL && !NetServer)
-     {
-         postmaster_error("TCP/IP connections must be enabled for SSL");
-         ExitPostmaster(1);
-     }
      if (EnableSSL)
          secure_initialize();
  #endif
--- 703,708 ----
***************
*** 753,820 ****
      for (i = 0; i < MAXLISTEN; i++)
          ListenSocket[i] = -1;

!     if (NetServer)
      {
!         if (VirtualHost && VirtualHost[0])
          {
!             char       *curhost,
!                        *endptr;
!             char        c = 0;
!
!             curhost = VirtualHost;
!             for (;;)
!             {
!                 while (*curhost == ' ') /* skip any extra spaces */
!                     curhost++;
!                 if (*curhost == '\0')
!                     break;
!                 endptr = strchr(curhost, ' ');
!                 if (endptr)
!                 {
!                     c = *endptr;
!                     *endptr = '\0';
!                 }
                  status = StreamServerPort(AF_UNSPEC, curhost,
                                            (unsigned short) PostPortNumber,
                                            UnixSocketDir,
                                            ListenSocket, MAXLISTEN);
-                 if (status != STATUS_OK)
-                     ereport(FATAL,
-                      (errmsg("could not create listen socket for \"%s\"",
-                              curhost)));
-                 if (endptr)
-                 {
-                     *endptr = c;
-                     curhost = endptr + 1;
-                 }
-                 else
-                     break;
-             }
-         }
-         else
-         {
-             status = StreamServerPort(AF_UNSPEC, NULL,
-                                       (unsigned short) PostPortNumber,
-                                       UnixSocketDir,
-                                       ListenSocket, MAXLISTEN);
              if (status != STATUS_OK)
!                 ereport(FATAL,
!                       (errmsg("could not create TCP/IP listen socket")));
          }

  #ifdef USE_RENDEZVOUS
!         if (rendezvous_name != NULL)
!         {
!             DNSServiceRegistrationCreate(rendezvous_name,
!                                          "_postgresql._tcp.",
!                                          "",
!                                          htonl(PostPortNumber),
!                                          "",
!                                  (DNSServiceRegistrationReply) reg_reply,
!                                          NULL);
!         }
! #endif
      }

  #ifdef HAVE_UNIX_SOCKETS
      status = StreamServerPort(AF_UNIX, NULL,
--- 747,805 ----
      for (i = 0; i < MAXLISTEN; i++)
          ListenSocket[i] = -1;

!     if (ListenAddresses)
      {
!         char       *curhost,
!             *endptr;
!         char        c = 0;
!
!         curhost = ListenAddresses;
!         for (;;)
          {
!             while (isspace(*curhost)) /* skip any extra spaces */
!                 curhost++;
!             if (*curhost == '\0')
!                 break;
!             endptr = curhost;
!             while(*endptr != '\0' && !isspace(*endptr))
!                   endptr++;
!             c = *endptr;
!             *endptr = '\0';
!             if (strcmp(curhost,"*") == 0)
!                 status = StreamServerPort(AF_UNSPEC, NULL,
!                                           (unsigned short) PostPortNumber,
!                                           UnixSocketDir,
!                                           ListenSocket, MAXLISTEN);
!             else
                  status = StreamServerPort(AF_UNSPEC, curhost,
                                            (unsigned short) PostPortNumber,
                                            UnixSocketDir,
                                            ListenSocket, MAXLISTEN);
              if (status != STATUS_OK)
!                 ereport(WARNING,
!                         (errmsg("could not create listen socket for \"%s\"",
!                                 curhost)));
!             *endptr = c;
!             if(c != '\0')
!                 curhost = endptr+1;
!             else
!                 break;
          }
+     }

  #ifdef USE_RENDEZVOUS
!     if (ListenSocket[0] != -1 && rendezvous_name != NULL)
!     {
!         DNSServiceRegistrationCreate(rendezvous_name,
!                                      "_postgresql._tcp.",
!                                      "",
!                                      htonl(PostPortNumber),
!                                      "",
!                                      (DNSServiceRegistrationReply) reg_reply,
!                                      NULL);
      }
+ #endif
+

  #ifdef HAVE_UNIX_SOCKETS
      status = StreamServerPort(AF_UNIX, NULL,
***************
*** 822,830 ****
                                UnixSocketDir,
                                ListenSocket, MAXLISTEN);
      if (status != STATUS_OK)
!         ereport(FATAL,
                  (errmsg("could not create Unix-domain socket")));
  #endif

      XLOGPathInit();

--- 807,823 ----
                                UnixSocketDir,
                                ListenSocket, MAXLISTEN);
      if (status != STATUS_OK)
!         ereport(WARNING,
                  (errmsg("could not create Unix-domain socket")));
  #endif
+
+     /*
+      * check that we have some socket to talk on
+      */
+
+     if (ListenSocket[0] == -1)
+         ereport(FATAL,
+                 (errmsg("no configured listening socket available")));

      XLOGPathInit();

Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/utils/misc/guc.c,v
retrieving revision 1.191
diff -c -r1.191 guc.c
*** src/backend/utils/misc/guc.c    22 Mar 2004 03:15:29 -0000    1.191
--- src/backend/utils/misc/guc.c    22 Mar 2004 17:26:39 -0000
***************
*** 444,457 ****
          false, NULL, NULL
      },
      {
-         {"tcpip_socket", PGC_POSTMASTER, CONN_AUTH_SETTINGS,
-             gettext_noop("Makes the server accept TCP/IP connections."),
-             NULL
-         },
-         &NetServer,
-         false, NULL, NULL
-     },
-     {
          {"ssl", PGC_POSTMASTER, CONN_AUTH_SECURITY,
              gettext_noop("Enables SSL connections."),
              NULL
--- 444,449 ----
***************
*** 1711,1722 ****
      },

      {
!         {"virtual_host", PGC_POSTMASTER, CONN_AUTH_SETTINGS,
!             gettext_noop("Sets the host name or IP address to listen to."),
              NULL
          },
!         &VirtualHost,
!         "", NULL, NULL
      },

      {
--- 1703,1714 ----
      },

      {
!         {"listen_addresses", PGC_POSTMASTER, CONN_AUTH_SETTINGS,
!             gettext_noop("Sets the host name or IP addresses to listen to."),
              NULL
          },
!         &ListenAddresses,
!         "localhost", NULL, NULL
      },

      {
Index: src/backend/utils/misc/postgresql.conf.sample
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/utils/misc/postgresql.conf.sample,v
retrieving revision 1.108
diff -c -r1.108 postgresql.conf.sample
*** src/backend/utils/misc/postgresql.conf.sample    15 Mar 2004 15:56:26 -0000    1.108
--- src/backend/utils/misc/postgresql.conf.sample    22 Mar 2004 17:26:40 -0000
***************
*** 27,33 ****

  # - Connection Settings -

- #tcpip_socket = false
  #max_connections = 100
      # note: increasing max_connections costs about 500 bytes of shared
      # memory per connection slot, in addition to costs from shared_buffers
--- 27,32 ----
***************
*** 37,43 ****
  #unix_socket_directory = ''
  #unix_socket_group = ''
  #unix_socket_permissions = 0777    # octal
! #virtual_host = ''        # what interface to listen on; defaults to any
  #rendezvous_name = ''        # defaults to the computer name

  # - Security & Authentication -
--- 36,43 ----
  #unix_socket_directory = ''
  #unix_socket_group = ''
  #unix_socket_permissions = 0777    # octal
! #listen_addresses = 'localhost'    # what interface to listen on;
!                 # defaults to localhost, '*' = any
  #rendezvous_name = ''        # defaults to the computer name

  # - Security & Authentication -
Index: src/include/miscadmin.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/include/miscadmin.h,v
retrieving revision 1.153
diff -c -r1.153 miscadmin.h
*** src/include/miscadmin.h    10 Feb 2004 03:42:45 -0000    1.153
--- src/include/miscadmin.h    22 Mar 2004 17:26:40 -0000
***************
*** 212,218 ****
   *    A few postmaster startup options are exported here so the
   *    configuration file processor can access them.
   */
- extern bool NetServer;
  extern bool EnableSSL;
  extern bool SilentMode;
  extern int    MaxBackends;
--- 212,217 ----
***************
*** 222,228 ****
  extern int    Unix_socket_permissions;
  extern char *Unix_socket_group;
  extern char *UnixSocketDir;
! extern char *VirtualHost;


  /*****************************************************************************
--- 221,227 ----
  extern int    Unix_socket_permissions;
  extern char *Unix_socket_group;
  extern char *UnixSocketDir;
! extern char *ListenAddresses;


  /*****************************************************************************

pgsql-patches by date:

Previous
From: Tom Lane
Date:
Subject: Re: pstrndup()
Next
From: "Magnus Hagander"
Date:
Subject: Patch for select and APC on win32