From 0ab233cd4cb837dd9e28d7249991722cf8979e76 Mon Sep 17 00:00:00 2001 From: Roman Tsisyk <roman@tarantool.org> Date: Fri, 12 Jan 2018 09:13:28 +0300 Subject: [PATCH] Don't discard environment variables in pipe logger Before this patch `box.cfg { log = "|wrapper" }` started `wrapper` by invoking /bin/sh -c 'wrapper' with empty environment. This patch makes /bin/sh -c 'wrapper' invocation to inherit parent's environment. Closes #3041 --- src/say.c | 3 +-- test/app-tap/logger_pipe.result | 1 + test/app-tap/logger_pipe.test.lua | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 test/app-tap/logger_pipe.result create mode 100755 test/app-tap/logger_pipe.test.lua diff --git a/src/say.c b/src/say.c index 325696549c..bb6ed1311b 100644 --- a/src/say.c +++ b/src/say.c @@ -294,7 +294,6 @@ log_pipe_init(struct log *log, const char *init_str) char cmd[] = { "/bin/sh" }; char args[] = { "-c" }; char *argv[] = { cmd, args, (char *) init_str, NULL }; - char *envp[] = { NULL }; sigset_t mask; sigemptyset(&mask); sigaddset(&mask, SIGCHLD); @@ -331,7 +330,7 @@ log_pipe_init(struct log *log, const char *init_str) * dies, we get SIGPIPE and terminate. */ setpgid(0, 0); - execve(argv[0], argv, envp); /* does not return */ + execv(argv[0], argv); /* does not return */ diag_set(SystemError, "can't start logger: %s", init_str); return -1; } diff --git a/test/app-tap/logger_pipe.result b/test/app-tap/logger_pipe.result new file mode 100644 index 0000000000..21e72e8ac3 --- /dev/null +++ b/test/app-tap/logger_pipe.result @@ -0,0 +1 @@ +48 diff --git a/test/app-tap/logger_pipe.test.lua b/test/app-tap/logger_pipe.test.lua new file mode 100755 index 0000000000..c427e8f9f9 --- /dev/null +++ b/test/app-tap/logger_pipe.test.lua @@ -0,0 +1,5 @@ +#!/usr/bin/env tarantool + +os.setenv('TEST_VAR', '48') +box.cfg { log = '|echo $TEST_VAR' } +os.exit(0) -- GitLab