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