]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix pg_resetxlog to use correct path to postmaster.pid.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 22 Nov 2012 16:23:33 +0000 (11:23 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 22 Nov 2012 16:24:58 +0000 (11:24 -0500)
Since we've already chdir'd into the data directory, the file should
be referenced as just "postmaster.pid", without prefixing the directory
path.  This is harmless in the normal case where an absolute PGDATA path
is used, but quite dangerous if a relative path is specified, since the
program might then fail to notice an active postmaster.

Reported by Hari Babu.  This got broken in my commit
eb5949d190e80360386113fde0f05854f0c9824d, so patch all active versions.

src/bin/pg_resetxlog/pg_resetxlog.c

index 1e1412d29db40f9b110b7c3780529319e5da62dd..54cc5b03024bcf3cc2c36d1824ef1e51747c7662 100644 (file)
@@ -95,7 +95,6 @@ main(int argc, char *argv[])
        char       *endptr3;
        char       *DataDir;
        int                     fd;
-       char            path[MAXPGPATH];
 
        set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_resetxlog"));
 
@@ -270,13 +269,12 @@ main(int argc, char *argv[])
         * Check for a postmaster lock file --- if there is one, refuse to
         * proceed, on grounds we might be interfering with a live installation.
         */
-       snprintf(path, MAXPGPATH, "%s/postmaster.pid", DataDir);
-
-       if ((fd = open(path, O_RDONLY, 0)) < 0)
+       if ((fd = open("postmaster.pid", O_RDONLY, 0)) < 0)
        {
                if (errno != ENOENT)
                {
-                       fprintf(stderr, _("%s: could not open file \"%s\" for reading: %s\n"), progname, path, strerror(errno));
+                       fprintf(stderr, _("%s: could not open file \"%s\" for reading: %s\n"),
+                                       progname, "postmaster.pid", strerror(errno));
                        exit(1);
                }
        }
@@ -284,7 +282,7 @@ main(int argc, char *argv[])
        {
                fprintf(stderr, _("%s: lock file \"%s\" exists\n"
                                                  "Is a server running?  If not, delete the lock file and try again.\n"),
-                               progname, path);
+                               progname, "postmaster.pid");
                exit(1);
        }