From a54bfde742ac9387dec5e20bf54fa78ec11126ce Mon Sep 17 00:00:00 2001 From: Karol Lewandowski Date: Fri, 17 May 2019 11:53:46 +0200 Subject: [PATCH] Redirect command's output to not pollute standard output This alters default redirections of following commands: - zip - all descriptors redirected to /dev/null - minicoredumper, dump_systemstate - standard output redirected to stderr Change-Id: I723ddb78baca6d58decbc1b1219f7cd5b8d5c9ae --- src/crash-manager/crash-manager.c | 9 ++++++--- src/log_dump/log_dump.c | 6 ++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/crash-manager/crash-manager.c b/src/crash-manager/crash-manager.c index 5eb8d6b..de63b5d 100644 --- a/src/crash-manager/crash-manager.c +++ b/src/crash-manager/crash-manager.c @@ -463,7 +463,8 @@ static void launch_crash_popup(struct crash_info *cinfo) static bool dump_system_state(const struct crash_info *cinfo, pid_t *pid) { char *av[] = {"/usr/bin/dump_systemstate", "-d", "-k", "-j", "-p", "-e", "-f", cinfo->log_path, NULL}; - return spawn(av, NULL, NULL, pid, NULL); + spawn_param_s param = { .fn = spawn_setstdout, .u.int_val = STDERR_FILENO }; + return spawn(av, NULL, ¶m, pid, NULL); } static void save_so_info(const struct crash_info *cinfo) @@ -586,7 +587,8 @@ static bool execute_minicoredump(struct crash_info *cinfo, int *exit_code) NULL }; - is_ok = spawn_wait(args, NULL, NULL, MINICOREDUMPER_TIMEOUT_MS, exit_code); + spawn_param_s param = { .fn = spawn_setstdout, .u.int_val = STDERR_FILENO }; + is_ok = spawn_wait(args, NULL, ¶m, MINICOREDUMPER_TIMEOUT_MS, exit_code); /* Minicoredumper must be executed to dump at least PRSTATUS for other tools, coredump, however, might have been disabled. */ @@ -914,7 +916,8 @@ static void compress(struct crash_info *cinfo) } char *args[] = {"/bin/zip", "-qyr", zip_path, cinfo->name, NULL}; - spawn_param_s param0 = { .fn = spawn_chdir, .u.char_ptr = cinfo->temp_dir }; + spawn_param_s param1 = { .fn = spawn_nullstdfds }; + spawn_param_s param0 = { .fn = spawn_chdir, .u.char_ptr = cinfo->temp_dir, .next = ¶m1 }; (void)spawn_wait(args, NULL, ¶m0, ZIP_TIMEOUT_MS, NULL); if ((lock_fd = lock_dumpdir()) < 0) diff --git a/src/log_dump/log_dump.c b/src/log_dump/log_dump.c index f50bf14..bc06957 100644 --- a/src/log_dump/log_dump.c +++ b/src/log_dump/log_dump.c @@ -205,7 +205,8 @@ static bool dump_systemstate(const char *const destdir, const char *const timest } char *av[] = {"/usr/bin/dump_systemstate", "-k", "-d", "-j", "-e", "-f", dump_path, NULL}; - bool is_ok = spawn_wait(av, NULL, NULL, 0, exit_code); + spawn_param_s param = { .fn = spawn_setstdout, .u.int_val = STDERR_FILENO }; + bool is_ok = spawn_wait(av, NULL, ¶m, 0, exit_code); free(dump_path); @@ -223,7 +224,8 @@ static bool compress(char *const destdir, char *const tempdir, char *const versi _D("compress tempdir is %s", tempdir); char *av[] = {"/bin/zip", "-qyr", archive_path, ".", NULL}; - spawn_param_s param0 = { .fn = spawn_chdir, .u.char_ptr = tempdir }; + spawn_param_s param1 = { .fn = spawn_nullstdfds }; + spawn_param_s param0 = { .fn = spawn_chdir, .u.char_ptr = tempdir, .next = ¶m1 }; bool is_ok = spawn_wait(av, NULL, ¶m0, 0, exit_code); _I("Storing report at %s", archive_path); -- 2.7.4