aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2010-08-13 14:38:04 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2010-08-13 14:38:04 +0000
commite4155c8483084e2a8d5779002e3b07854c85baf8 (patch)
tree7a5d3d589df1a1b298f8c7edb413fc18117d6b51
parent9b0a86861a5d5cfe35fe8c876289402891022d4a (diff)
downloadpostgresql-e4155c8483084e2a8d5779002e3b07854c85baf8.tar.gz
postgresql-e4155c8483084e2a8d5779002e3b07854c85baf8.zip
Fix pg_restore to complain if any arguments remain after parsing the switches
and input file name, per bug #5617 from Leo Shklovskii. Rearrange the corresponding code in pg_dump and pg_dumpall so that all three programs handle this in a consistent, straightforward fashion. Back-patch to 9.0, but no further. Although this is certainly a bug, it's possible that people have scripts that will be broken by the added error check, so it seems better not to change the behavior in stable branches.
-rw-r--r--src/bin/pg_dump/pg_dump.c15
-rw-r--r--src/bin/pg_dump/pg_dumpall.c39
-rw-r--r--src/bin/pg_dump/pg_restore.c15
3 files changed, 41 insertions, 28 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 1fd43b55e17..b137c387283 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -25,7 +25,7 @@
* http://archives.postgresql.org/pgsql-bugs/2010-02/msg00187.php
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.584 2010/08/03 19:24:04 tgl Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.585 2010/08/13 14:38:03 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -480,19 +480,20 @@ main(int argc, char **argv)
}
}
- if (optind < (argc - 1))
+ /* Get database name from command line */
+ if (optind < argc)
+ dbname = argv[optind++];
+
+ /* Complain if any arguments remain */
+ if (optind < argc)
{
fprintf(stderr, _("%s: too many command-line arguments (first is \"%s\")\n"),
- progname, argv[optind + 1]);
+ progname, argv[optind]);
fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
progname);
exit(1);
}
- /* Get database name from command line */
- if (optind < argc)
- dbname = argv[optind];
-
/* --column-inserts implies --inserts */
if (column_inserts)
dump_inserts = 1;
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index c9cbc8e73f8..3c15fe68c96 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
*
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.137 2010/08/03 19:24:05 tgl Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.138 2010/08/13 14:38:04 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -316,24 +316,7 @@ main(int argc, char *argv[])
}
}
- /* Add long options to the pg_dump argument list */
- if (binary_upgrade)
- appendPQExpBuffer(pgdumpopts, " --binary-upgrade");
- if (column_inserts)
- appendPQExpBuffer(pgdumpopts, " --column-inserts");
- if (disable_dollar_quoting)
- appendPQExpBuffer(pgdumpopts, " --disable-dollar-quoting");
- if (disable_triggers)
- appendPQExpBuffer(pgdumpopts, " --disable-triggers");
- if (inserts)
- appendPQExpBuffer(pgdumpopts, " --inserts");
- if (no_tablespaces)
- appendPQExpBuffer(pgdumpopts, " --no-tablespaces");
- if (quote_all_identifiers)
- appendPQExpBuffer(pgdumpopts, " --quote-all-identifiers");
- if (use_setsessauth)
- appendPQExpBuffer(pgdumpopts, " --use-set-session-authorization");
-
+ /* Complain if any arguments remain */
if (optind < argc)
{
fprintf(stderr, _("%s: too many command-line arguments (first is \"%s\")\n"),
@@ -371,6 +354,24 @@ main(int argc, char *argv[])
exit(1);
}
+ /* Add long options to the pg_dump argument list */
+ if (binary_upgrade)
+ appendPQExpBuffer(pgdumpopts, " --binary-upgrade");
+ if (column_inserts)
+ appendPQExpBuffer(pgdumpopts, " --column-inserts");
+ if (disable_dollar_quoting)
+ appendPQExpBuffer(pgdumpopts, " --disable-dollar-quoting");
+ if (disable_triggers)
+ appendPQExpBuffer(pgdumpopts, " --disable-triggers");
+ if (inserts)
+ appendPQExpBuffer(pgdumpopts, " --inserts");
+ if (no_tablespaces)
+ appendPQExpBuffer(pgdumpopts, " --no-tablespaces");
+ if (quote_all_identifiers)
+ appendPQExpBuffer(pgdumpopts, " --quote-all-identifiers");
+ if (use_setsessauth)
+ appendPQExpBuffer(pgdumpopts, " --use-set-session-authorization");
+
/*
* If there was a database specified on the command line, use that,
* otherwise try to connect to database "postgres", and failing that
diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c
index 4927471dce4..67a24b6e62c 100644
--- a/src/bin/pg_dump/pg_restore.c
+++ b/src/bin/pg_dump/pg_restore.c
@@ -34,7 +34,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_restore.c,v 1.102 2010/05/15 21:41:16 tgl Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_restore.c,v 1.103 2010/08/13 14:38:04 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -295,11 +295,22 @@ main(int argc, char **argv)
}
}
+ /* Get file name from command line */
if (optind < argc)
- inputFileSpec = argv[optind];
+ inputFileSpec = argv[optind++];
else
inputFileSpec = NULL;
+ /* Complain if any arguments remain */
+ if (optind < argc)
+ {
+ fprintf(stderr, _("%s: too many command-line arguments (first is \"%s\")\n"),
+ progname, argv[optind]);
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
+ progname);
+ exit(1);
+ }
+
/* Should get at most one of -d and -f, else user is confused */
if (opts->dbname)
{