Hi,

pcp process always listen on all interfaces. But I think this is not
correct.

So I'm planning to add a new directive "pcp_listen_addresses". Do we
need the new feature into pgpool-II 2.1? pgpool-II 2.1 is in feature
freeze now...

Here is a patch to add the new directive.

  % echo "pcp_listen_addresses = 'localhost'" >> pgpool.conf
  % pgpool -f pgpool.conf

  % netstat -nl | grep 9898
  tcp        0      0 127.0.0.1:9898          0.0.0.0:*               LISTEN
  unix  2      [ ACC ]     STREAM     LISTENING     2176517  /tmp/.s.PGSQL.9898

  % psql -p 9999 -c 'show pool_status' postgres | grep pcp_listen_addresses | 
cut -d '|' -f 1,2
   pcp_listen_addresses         | localhost

Regards,
--
Yoshiyuki Asaba
[EMAIL PROTECTED]
Index: main.c
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/main.c,v
retrieving revision 1.37
diff -c -r1.37 main.c
*** main.c      22 May 2008 14:36:38 -0000      1.37
--- main.c      30 May 2008 07:20:59 -0000
***************
*** 453,460 ****
                         pool_config->pcp_socket_dir,
                         pool_config->pcp_port);
        pcp_unix_fd = create_unix_domain_socket(pcp_un_addr);
!     /* maybe change "*" to pool_config->pcp_listen_addresses */
!       pcp_inet_fd = create_inet_domain_socket("*", pool_config->pcp_port);
        pcp_pid = pcp_fork_a_child(pcp_unix_fd, pcp_inet_fd, pcp_conf_file);
  
        retrycnt = 0;           /* reset health check retry counter */
--- 453,459 ----
                         pool_config->pcp_socket_dir,
                         pool_config->pcp_port);
        pcp_unix_fd = create_unix_domain_socket(pcp_un_addr);
!       pcp_inet_fd = 
create_inet_domain_socket(pool_config->pcp_listen_addresses, 
pool_config->pcp_port);
        pcp_pid = pcp_fork_a_child(pcp_unix_fd, pcp_inet_fd, pcp_conf_file);
  
        retrycnt = 0;           /* reset health check retry counter */
Index: pool.h
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/pool.h,v
retrieving revision 1.29
diff -c -r1.29 pool.h
*** pool.h      12 Feb 2008 11:16:09 -0000      1.29
--- pool.h      30 May 2008 07:20:59 -0000
***************
*** 121,126 ****
--- 121,127 ----
        char *listen_addresses; /* hostnames/IP addresses to listen on */
      int       port;   /* port # to bind */
        int pcp_port;                           /* PCP port # to bind */
+       char *pcp_listen_addresses; /* hostname/IP addresses to listen on for 
PCP */
        char *socket_dir;               /* pgpool socket directory */
        char *pcp_socket_dir;           /* PCP socket directory */
        int pcp_timeout;                        /* PCP timeout for an idle 
client */
Index: pool_config.l
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/pool_config.l,v
retrieving revision 1.21
diff -c -r1.21 pool_config.l
*** pool_config.l       12 Feb 2008 11:16:10 -0000      1.21
--- pool_config.l       30 May 2008 07:21:00 -0000
***************
*** 124,129 ****
--- 124,130 ----
        pool_config->listen_addresses = "localhost";
        pool_config->port = 9999;
        pool_config->pcp_port = 9898;
+       pool_config->pcp_listen_addresses = "localhost";
        pool_config->socket_dir = DEFAULT_SOCKET_DIR;
        pool_config->pcp_socket_dir = DEFAULT_SOCKET_DIR;
        pool_config->backend_socket_dir = DEFAULT_SOCKET_DIR;
***************
*** 298,303 ****
--- 299,322 ----
                        }
                        pool_config->pcp_port = v;
                }
+               else if (!strcmp(key, "pcp_listen_addresses") && 
CHECK_CONTEXT(INIT_CONFIG, context))
+               {
+                       char *str;
+ 
+                       if (token != POOL_STRING && token != 
POOL_UNQUOTED_STRING && token != POOL_KEY)
+                       {
+                               PARSE_ERROR();
+                               fclose(fd);
+                               return(-1);
+                       }
+                       str = extract_string(yytext, token);
+                       if (str == NULL)
+                       {
+                               fclose(fd);
+                               return(-1);
+                       }
+                       pool_config->pcp_listen_addresses = str;
+               }
                else if (!strcmp(key, "socket_dir") && 
CHECK_CONTEXT(INIT_CONFIG, context))
                {
                        char *str;
Index: pool_process_query.c
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/pool_process_query.c,v
retrieving revision 1.108
diff -c -r1.108 pool_process_query.c
*** pool_process_query.c        30 May 2008 07:18:44 -0000      1.108
--- pool_process_query.c        30 May 2008 07:21:05 -0000
***************
*** 3311,3316 ****
--- 3311,3321 ----
        strncpy(status[i].desc, "number of queries in reset_query_list", 
POOLCONFIG_MAXDESCLEN);
        i++;
  
+       strncpy(status[i].name, "pcp_listen_addresses", POOLCONFIG_MAXNAMELEN);
+       snprintf(status[i].value, POOLCONFIG_MAXVALLEN, "%s", 
pool_config->pcp_listen_addresses);
+       strncpy(status[i].desc, "host name(s) or IP address(es) to listen on 
for PCP", POOLCONFIG_MAXDESCLEN);
+       i++;
+ 
        strncpy(status[i].name, "pcp_port", POOLCONFIG_MAXNAMELEN);
        snprintf(status[i].value, POOLCONFIG_MAXVALLEN, "%d", 
pool_config->pcp_port);
        strncpy(status[i].desc, "PCP port # to bind", POOLCONFIG_MAXDESCLEN);
Index: doc/pgpool-en.html
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/doc/pgpool-en.html,v
retrieving revision 1.30
diff -c -r1.30 pgpool-en.html
*** doc/pgpool-en.html  27 Mar 2008 07:54:18 -0000      1.30
--- doc/pgpool-en.html  30 May 2008 07:21:07 -0000
***************
*** 338,343 ****
--- 338,353 ----
        This parameter can only be set at server start.</p>
    </dd>
  
+ <dl>
+   <dt>pcp_listen_addresses</dt>
+   <dd>
+       <p>Specifies the address in hostname or IP address, which will
+       be accepted by PCP daemon via TCP/IP network. <code>'*'</code> accepts
+       all incoming connections. <code>''</code> disables TCP/IP
+       connections. Default is <code>'localhost'</code>. Connections via UNIX
+       domain socket are always accepted. This parameter can only be set at 
server start.</p>
+   </dd>
+ 
    <dt>pcp_port</dt>
    <dd>
        <p>The port number where PCP process accepts
Index: doc/pgpool-ja.html
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/doc/pgpool-ja.html,v
retrieving revision 1.49
diff -c -r1.49 pgpool-ja.html
*** doc/pgpool-ja.html  4 Apr 2008 04:32:53 -0000       1.49
--- doc/pgpool-ja.html  30 May 2008 07:21:09 -0000
***************
*** 344,349 ****
--- 344,360 ----
  このパラメータを変更した時には pgpool-II を再起動してください。
  </p>
  
+ <dt>pcp_listen_addresses
+ <dd>
+ <p>
+ pgpool-IIの PCP デーモンがTCP/IPコネクションを受け付けるアドレスをホスト名またはIPアドレスで
+ 指定します.「*」を指定するとすべてのIPインタフェースからのコネクショ
+ ンを受け付けます.「''」を指定するとTCP/IPコネクションを受け付けま
+ せん.デフォルト値は「localhost」です.
+ UNIXドメインソケット経由のコネクションは常に受け付けます.このパラメー
+ タを変更した時には pgpool-II を再起動してください。
+ </p>
+ 
  <dt>pcp_port
  <dd>
  <p>
_______________________________________________
Pgpool-hackers mailing list
[email protected]
http://pgfoundry.org/mailman/listinfo/pgpool-hackers

Reply via email to