diff options
| author | Heikki Linnakangas | 2014-05-05 13:07:40 +0000 |
|---|---|---|
| committer | Heikki Linnakangas | 2014-05-05 13:07:40 +0000 |
| commit | a692ee5870f0f442565b4c4bff367094599e9bdf (patch) | |
| tree | f682a4b38ca62109bc9be80642708637ab17ed15 /src/bin | |
| parent | d69ffd6f035fe24483247bf9b2335d7474eaf31a (diff) | |
Replace SYSTEMQUOTEs with Windows-specific wrapper functions.
It's easy to forget using SYSTEMQUOTEs when constructing command strings
for system() or popen(). Even if we fix all the places missing it now, it is
bound to be forgotten again in the future. Introduce wrapper functions that
do the the extra quoting for you, and get rid of SYSTEMQUOTEs in all the
callers.
We previosly used SYSTEMQUOTEs in all the hard-coded command strings, and
this doesn't change the behavior of those. But user-supplied commands, like
archive_command, restore_command, COPY TO/FROM PROGRAM calls, as well as
pgbench's \shell, will now gain an extra pair of quotes. That is desirable,
but if you have existing scripts or config files that include an extra
pair of quotes, those might need to be adjusted.
Reviewed by Amit Kapila and Tom Lane
Diffstat (limited to 'src/bin')
| -rw-r--r-- | src/bin/initdb/initdb.c | 40 | ||||
| -rw-r--r-- | src/bin/pg_ctl/pg_ctl.c | 14 | ||||
| -rw-r--r-- | src/bin/pg_dump/pg_dumpall.c | 4 | ||||
| -rw-r--r-- | src/bin/psql/command.c | 6 |
4 files changed, 31 insertions, 33 deletions
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index b53fa8bd088..83b7f6e24d8 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -1130,11 +1130,11 @@ test_config_settings(void) test_buffs = MIN_BUFS_FOR_CONNS(test_conns); snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" --boot -x0 %s " + "\"%s\" --boot -x0 %s " "-c max_connections=%d " "-c shared_buffers=%d " "-c dynamic_shared_memory_type=none " - "< \"%s\" > \"%s\" 2>&1" SYSTEMQUOTE, + "< \"%s\" > \"%s\" 2>&1", backend_exec, boot_options, test_conns, test_buffs, DEVNULL, DEVNULL); @@ -1165,11 +1165,11 @@ test_config_settings(void) } snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" --boot -x0 %s " + "\"%s\" --boot -x0 %s " "-c max_connections=%d " "-c shared_buffers=%d " "-c dynamic_shared_memory_type=none " - "< \"%s\" > \"%s\" 2>&1" SYSTEMQUOTE, + "< \"%s\" > \"%s\" 2>&1", backend_exec, boot_options, n_connections, test_buffs, DEVNULL, DEVNULL); @@ -1503,7 +1503,7 @@ bootstrap_template1(void) unsetenv("PGCLIENTENCODING"); snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" --boot -x1 %s %s %s" SYSTEMQUOTE, + "\"%s\" --boot -x1 %s %s %s", backend_exec, data_checksums ? "-k" : "", boot_options, talkargs); @@ -1544,7 +1544,7 @@ setup_auth(void) fflush(stdout); snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s template1 >%s" SYSTEMQUOTE, + "\"%s\" %s template1 >%s", backend_exec, backend_options, DEVNULL); @@ -1622,7 +1622,7 @@ get_set_pwd(void) fflush(stdout); snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s template1 >%s" SYSTEMQUOTE, + "\"%s\" %s template1 >%s", backend_exec, backend_options, DEVNULL); @@ -1722,7 +1722,7 @@ setup_depend(void) fflush(stdout); snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s template1 >%s" SYSTEMQUOTE, + "\"%s\" %s template1 >%s", backend_exec, backend_options, DEVNULL); @@ -1755,7 +1755,7 @@ setup_sysviews(void) * We use -j here to avoid backslashing stuff in system_views.sql */ snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s -j template1 >%s" SYSTEMQUOTE, + "\"%s\" %s -j template1 >%s", backend_exec, backend_options, DEVNULL); @@ -1786,7 +1786,7 @@ setup_description(void) fflush(stdout); snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s template1 >%s" SYSTEMQUOTE, + "\"%s\" %s template1 >%s", backend_exec, backend_options, DEVNULL); @@ -1893,7 +1893,7 @@ setup_collation(void) #if defined(HAVE_LOCALE_T) && !defined(WIN32) snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s template1 >%s" SYSTEMQUOTE, + "\"%s\" %s template1 >%s", backend_exec, backend_options, DEVNULL); @@ -2038,7 +2038,7 @@ setup_conversion(void) fflush(stdout); snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s template1 >%s" SYSTEMQUOTE, + "\"%s\" %s template1 >%s", backend_exec, backend_options, DEVNULL); @@ -2076,7 +2076,7 @@ setup_dictionary(void) * We use -j here to avoid backslashing stuff */ snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s -j template1 >%s" SYSTEMQUOTE, + "\"%s\" %s -j template1 >%s", backend_exec, backend_options, DEVNULL); @@ -2127,7 +2127,7 @@ setup_privileges(void) fflush(stdout); snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s template1 >%s" SYSTEMQUOTE, + "\"%s\" %s template1 >%s", backend_exec, backend_options, DEVNULL); @@ -2190,7 +2190,7 @@ setup_schema(void) * We use -j here to avoid backslashing stuff in information_schema.sql */ snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s -j template1 >%s" SYSTEMQUOTE, + "\"%s\" %s -j template1 >%s", backend_exec, backend_options, DEVNULL); @@ -2207,7 +2207,7 @@ setup_schema(void) PG_CMD_CLOSE; snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s template1 >%s" SYSTEMQUOTE, + "\"%s\" %s template1 >%s", backend_exec, backend_options, DEVNULL); @@ -2241,7 +2241,7 @@ load_plpgsql(void) fflush(stdout); snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s template1 >%s" SYSTEMQUOTE, + "\"%s\" %s template1 >%s", backend_exec, backend_options, DEVNULL); @@ -2266,7 +2266,7 @@ vacuum_db(void) fflush(stdout); snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s template1 >%s" SYSTEMQUOTE, + "\"%s\" %s template1 >%s", backend_exec, backend_options, DEVNULL); @@ -2322,7 +2322,7 @@ make_template0(void) fflush(stdout); snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s template1 >%s" SYSTEMQUOTE, + "\"%s\" %s template1 >%s", backend_exec, backend_options, DEVNULL); @@ -2354,7 +2354,7 @@ make_postgres(void) fflush(stdout); snprintf(cmd, sizeof(cmd), - SYSTEMQUOTE "\"%s\" %s template1 >%s" SYSTEMQUOTE, + "\"%s\" %s template1 >%s", backend_exec, backend_options, DEVNULL); diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c index fc87e7d76ed..473d6534064 100644 --- a/src/bin/pg_ctl/pg_ctl.c +++ b/src/bin/pg_ctl/pg_ctl.c @@ -435,11 +435,11 @@ start_postmaster(void) * the PID without having to rely on reading it back from the pidfile. */ if (log_file != NULL) - snprintf(cmd, MAXPGPATH, SYSTEMQUOTE "\"%s\" %s%s < \"%s\" >> \"%s\" 2>&1 &" SYSTEMQUOTE, + snprintf(cmd, MAXPGPATH, "\"%s\" %s%s < \"%s\" >> \"%s\" 2>&1 &", exec_path, pgdata_opt, post_opts, DEVNULL, log_file); else - snprintf(cmd, MAXPGPATH, SYSTEMQUOTE "\"%s\" %s%s < \"%s\" 2>&1 &" SYSTEMQUOTE, + snprintf(cmd, MAXPGPATH, "\"%s\" %s%s < \"%s\" 2>&1 &", exec_path, pgdata_opt, post_opts, DEVNULL); return system(cmd); @@ -453,10 +453,10 @@ start_postmaster(void) PROCESS_INFORMATION pi; if (log_file != NULL) - snprintf(cmd, MAXPGPATH, "CMD /C " SYSTEMQUOTE "\"%s\" %s%s < \"%s\" >> \"%s\" 2>&1" SYSTEMQUOTE, + snprintf(cmd, MAXPGPATH, "CMD /C \"\"%s\" %s%s < \"%s\" >> \"%s\" 2>&1\"", exec_path, pgdata_opt, post_opts, DEVNULL, log_file); else - snprintf(cmd, MAXPGPATH, "CMD /C " SYSTEMQUOTE "\"%s\" %s%s < \"%s\" 2>&1" SYSTEMQUOTE, + snprintf(cmd, MAXPGPATH, "CMD /C \"\"%s\" %s%s < \"%s\" 2>&1\"", exec_path, pgdata_opt, post_opts, DEVNULL); if (!CreateRestrictedProcess(cmd, &pi, false)) @@ -814,10 +814,10 @@ do_init(void) post_opts = ""; if (!silent_mode) - snprintf(cmd, MAXPGPATH, SYSTEMQUOTE "\"%s\" %s%s" SYSTEMQUOTE, + snprintf(cmd, MAXPGPATH, "\"%s\" %s%s", exec_path, pgdata_opt, post_opts); else - snprintf(cmd, MAXPGPATH, SYSTEMQUOTE "\"%s\" %s%s > \"%s\"" SYSTEMQUOTE, + snprintf(cmd, MAXPGPATH, "\"%s\" %s%s > \"%s\"", exec_path, pgdata_opt, post_opts, DEVNULL); if (system(cmd) != 0) @@ -2035,7 +2035,7 @@ adjust_data_dir(void) my_exec_path = pg_strdup(exec_path); /* it's important for -C to be the first option, see main.c */ - snprintf(cmd, MAXPGPATH, SYSTEMQUOTE "\"%s\" -C data_directory %s%s" SYSTEMQUOTE, + snprintf(cmd, MAXPGPATH, "\"%s\" -C data_directory %s%s", my_exec_path, pgdata_opt ? pgdata_opt : "", post_opts ? post_opts : ""); diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c index 47fe6ccc07f..208e49bbcd0 100644 --- a/src/bin/pg_dump/pg_dumpall.c +++ b/src/bin/pg_dump/pg_dumpall.c @@ -1666,7 +1666,7 @@ runPgDump(const char *dbname) PQExpBuffer cmd = createPQExpBuffer(); int ret; - appendPQExpBuffer(cmd, SYSTEMQUOTE "\"%s\" %s", pg_dump_bin, + appendPQExpBuffer(cmd, "\"%s\" %s", pg_dump_bin, pgdumpopts->data); /* @@ -1687,8 +1687,6 @@ runPgDump(const char *dbname) doShellQuoting(cmd, connstrbuf->data); - appendPQExpBufferStr(cmd, SYSTEMQUOTE); - if (verbose) fprintf(stderr, _("%s: running \"%s\"\n"), progname, cmd->data); diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index fd64ba824f1..dabcd680fff 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -1936,10 +1936,10 @@ editFile(const char *fname, int lineno) editorName, fname); #else if (lineno > 0) - sys = psprintf(SYSTEMQUOTE "\"%s\" %s%d \"%s\"" SYSTEMQUOTE, + sys = psprintf("\"%s\" %s%d \"%s\"", editorName, editor_lineno_arg, lineno, fname); else - sys = psprintf(SYSTEMQUOTE "\"%s\" \"%s\"" SYSTEMQUOTE, + sys = psprintf("\"%s\" \"%s\"", editorName, fname); #endif result = system(sys); @@ -2643,7 +2643,7 @@ do_shell(const char *command) #ifndef WIN32 sys = psprintf("exec %s", shellName); #else - sys = psprintf(SYSTEMQUOTE "\"%s\"" SYSTEMQUOTE, shellName); + sys = psprintf("\"%s\"", shellName); #endif result = system(sys); free(sys); |
