|
6 | 6 | * Portions Copyright (c) 1994, Regents of the University of California |
7 | 7 | * |
8 | 8 | * |
9 | | - * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.9 2002/10/18 22:05:36 petere Exp $ |
| 9 | + * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.10 2002/11/22 03:09:43 tgl Exp $ |
10 | 10 | * |
11 | 11 | *------------------------------------------------------------------------- |
12 | 12 | */ |
@@ -589,17 +589,31 @@ static int |
589 | 589 | runPgDump(const char *dbname) |
590 | 590 | { |
591 | 591 | PQExpBuffer cmd = createPQExpBuffer(); |
| 592 | + const char *p; |
592 | 593 | int ret; |
593 | 594 |
|
594 | | - appendPQExpBuffer(cmd, "%s %s -X use-set-session-authorization -Fp %s", |
595 | | - pgdumploc, pgdumpopts->data, dbname); |
| 595 | + appendPQExpBuffer(cmd, "%s %s -X use-set-session-authorization -Fp '", |
| 596 | + pgdumploc, pgdumpopts->data); |
| 597 | + |
| 598 | + /* Shell quoting is not quite like SQL quoting, so can't use fmtId */ |
| 599 | + for (p = dbname; *p; p++) |
| 600 | + { |
| 601 | + if (*p == '\'') |
| 602 | + appendPQExpBuffer(cmd, "'\"'\"'"); |
| 603 | + else |
| 604 | + appendPQExpBufferChar(cmd, *p); |
| 605 | + } |
| 606 | + |
| 607 | + appendPQExpBufferChar(cmd, '\''); |
| 608 | + |
596 | 609 | if (verbose) |
597 | 610 | fprintf(stderr, _("%s: running %s\n"), progname, cmd->data); |
598 | 611 |
|
599 | 612 | fflush(stdout); |
600 | 613 | fflush(stderr); |
601 | 614 |
|
602 | 615 | ret = system(cmd->data); |
| 616 | + |
603 | 617 | destroyPQExpBuffer(cmd); |
604 | 618 |
|
605 | 619 | return ret; |
|
0 commit comments