]> git.pld-linux.org Git - packages/postgresql.git/blobdiff - postgresql-pg_ctl-fix.patch
Version: 9.0.18
[packages/postgresql.git] / postgresql-pg_ctl-fix.patch
index 4d52254f126f9158014610ae2a5f5f63fa18199b..e5bb690e50a6f416dc18acce615029e17352e3ed 100644 (file)
@@ -1,89 +1,96 @@
---- postgresql-8.2.5/src/bin/pg_ctl/pg_ctl.c.orig      2007-09-18 22:08:39.757996485 +0100
-+++ postgresql-8.2.5/src/bin/pg_ctl/pg_ctl.c   2007-09-18 22:43:12.441795575 +0100
-@@ -19,6 +19,7 @@
- #include "postgres_fe.h"
- #include "libpq-fe.h"
-+#include "pg_config_manual.h"
- #include <locale.h>
- #include <signal.h>
-@@ -404,10 +405,12 @@
+--- postgresql-8.3.1/src/bin/pg_ctl/pg_ctl.c.orig      2008-03-01 00:31:42.000000000 +0100
++++ postgresql-8.3.1/src/bin/pg_ctl/pg_ctl.c   2008-03-20 22:59:22.658133220 +0100
+@@ -412,12 +412,12 @@
+       PGconn     *conn;
        bool            success = false;
        int                     i;
-       char            portstr[32];
-+      char            sockstr[MAXPGPATH];
+-      char            portstr[32];
++      char            portstr[32], sockstr[MAXPGPATH];
        char       *p;
--      char            connstr[128]; /* Should be way more than enough! */
-+      char            connstr[MAXPGPATH+128];
+       char       *q;
+-      char            connstr[128];   /* Should be way more than enough! */
++      char            connstr[128+MAXPGPATH]; /* Should be way more than enough! */
  
-       *portstr = '\0';
-+      *sockstr = '\0';
+-      *portstr = '\0';
++      *portstr = *sockstr = '\0';
  
-       /* post_opts */
-       for (p = post_opts; *p;)
-@@ -432,7 +435,7 @@
-       }
-       /* config file */
+       /*
+        * Look in post_opts for a -p switch.
+@@ -448,6 +448,21 @@
+                       strlcpy(portstr, p, Min((q - p) + 1, sizeof(portstr)));
+                       /* keep looking, maybe there is another -p */
+                       p = q;
++              } else if (strncmp(p, "-k", strlen("-k")) == 0)
++              {
++                      p += 2;
++                      /* advance past whitespace/quoting */
++                      while (isspace((unsigned char) *p) || *p == '\'' || *p == '"')
++                              p++;
++                      /* find end of value (not including any ending quote!) */
++                      q = p;
++                      while (*q &&
++                                 !(isspace((unsigned char) *q) || *q == '\'' || *q == '"'))
++                              q++;
++                      /* and save the argument value */
++                      strlcpy(sockstr, p, Min(q - p + 1, sizeof(sockstr)));
++                      /* keep looking, maybe there is another -k */
++                      p = q;
+               }
+               /* Advance to next whitespace */
+               while (*p && !isspace((unsigned char) *p))
+@@ -460,7 +475,7 @@
+        * This parsing code isn't amazingly bright either, but it should be
+        * okay for valid port settings.
+        */
 -      if (!*portstr)
 +      if (!*portstr || !*sockstr)
        {
                char      **optlines;
  
-@@ -445,18 +448,32 @@
+@@ -473,8 +488,7 @@
  
                                while (isspace((unsigned char) *p))
                                        p++;
--                              if (strncmp(p, "port", strlen("port")) != 0)
+-                              if (strncmp(p, "port", 4) != 0)
 -                                      continue;
--                              p += strlen("port");
--                              while (isspace((unsigned char) *p))
--                                      p++;
--                              if (*p != '=')
--                                      continue;
--                              p++;
--                              while (isspace((unsigned char) *p))
-+                              if (!*portstr && strncmp(p, "port", strlen("port")) == 0)
-+                              {
-+                                      p += strlen("port");
-+                                      while (isspace((unsigned char) *p))
-+                                              p++;
-+                                      if (*p != '=')
-+                                              continue;
++                              if (!strncmp(p, "port", 4)) {
+                               p += 4;
+                               while (isspace((unsigned char) *p))
                                        p++;
--                              StrNCpy(portstr, p, Min(strcspn(p, "#" WHITESPACE) + 1,
-+                                      while (isspace((unsigned char) *p))
-+                                              p++;
-+                                      StrNCpy(portstr, p, Min(strcspn(p, "#" WHITESPACE) + 1,
-                                                                               sizeof(portstr)));
-+                              }
-+                              if (!*sockstr && strncmp(p, "unix_socket_directory", strlen("unix_socket_directory")) == 0)
-+                              {
-+                                      p += strlen("unix_socket_directory");
+@@ -493,6 +507,26 @@
+                               /* and save the argument value */
+                               strlcpy(portstr, p, Min((q - p) + 1, sizeof(portstr)));
+                               /* keep looking, maybe there is another */
++                              } else if(!strncmp(p, "unix_socket_directory", 21)) {
++                                      p += 21;
 +                                      while (isspace((unsigned char) *p))
 +                                              p++;
 +                                      if (*p != '=')
 +                                              continue;
 +                                      p++;
++                                      /* advance past any whitespace/quoting */
 +                                      while (isspace((unsigned char) *p) || *p == '\'' || *p == '"')
 +                                              p++;
-+                                      StrNCpy(sockstr, p, Min(strcspn(p, "#\"'" WHITESPACE) + 1,
-+                                                                              sizeof(sockstr)));
++                                      /* find end of value (not including any ending quote/comment!) */
++                                      q = p;
++                                      while (*q &&
++                                                 !(isspace((unsigned char) *q) ||
++                                                       *q == '\'' || *q == '"' || *q == '#'))
++                                              q++;
++                                      /* and save the argument value */
++                                      strlcpy(sockstr, p, Min((q - p) + 1, sizeof(sockstr)));
++                                      /* keep looking, maybe there is another */
 +                              }
-                               /* keep looking, maybe there is another */
                        }
                }
-@@ -473,6 +490,12 @@
-       /* We need to set a connect timeout otherwise on Windows the SCM will probably timeout first */
-       snprintf(connstr, sizeof(connstr), "dbname=postgres port=%s connect_timeout=5", portstr);
+       }
+@@ -510,7 +544,8 @@
+        * probably timeout first
+        */
+       snprintf(connstr, sizeof(connstr),
+-                       "dbname=postgres port=%s connect_timeout=5", portstr);
++                       "dbname=postgres port=%s connect_timeout=5%s%s", portstr,
++                       (*sockstr ? " host=" : ""), sockstr);
  
-+      /* path to directory containing the unix socket */
-+      if (*sockstr) {
-+              strncat(connstr, " host=", sizeof(connstr) - strlen(connstr));
-+              strncat(connstr, sockstr,  sizeof(connstr) - strlen(connstr));
-+      }
-+
        for (i = 0; i < wait_seconds; i++)
        {
-               if ((conn = PQconnectdb(connstr)) != NULL &&
This page took 0.095229 seconds and 4 git commands to generate.