Quote database name properly when invoking pg_dump. Per report from
authorTom Lane <[email protected]>
Fri, 22 Nov 2002 03:09:59 +0000 (03:09 +0000)
committerTom Lane <[email protected]>
Fri, 22 Nov 2002 03:09:59 +0000 (03:09 +0000)
Christopher Kings-Lynne.

src/bin/pg_dump/pg_dumpall.c

index b3c7bcf0a0a7b2a1940e88ac2b441630bf8dc562..145a8f332e8142bb6377d3f8931ddfa5b21d5e9f 100644 (file)
@@ -589,10 +589,23 @@ static int
 runPgDump(const char *dbname)
 {
        PQExpBuffer cmd = createPQExpBuffer();
+       const char *p;
        int                     ret;
 
-       appendPQExpBuffer(cmd, "%s %s -X use-set-session-authorization -Fp %s",
-                                         pgdumploc, pgdumpopts->data, dbname);
+       appendPQExpBuffer(cmd, "%s %s -X use-set-session-authorization -Fp '",
+                                         pgdumploc, pgdumpopts->data);
+
+       /* Shell quoting is not quite like SQL quoting, so can't use fmtId */
+       for (p = dbname; *p; p++)
+       {
+               if (*p == '\'')
+                       appendPQExpBuffer(cmd, "'\"'\"'");
+               else
+                       appendPQExpBufferChar(cmd, *p);
+       }
+
+       appendPQExpBufferChar(cmd, '\'');
+
        if (verbose)
                fprintf(stderr, _("%s: running %s\n"), progname, cmd->data);
 
@@ -600,6 +613,7 @@ runPgDump(const char *dbname)
        fflush(stderr);
 
        ret = system(cmd->data);
+
        destroyPQExpBuffer(cmd);
 
        return ret;