From 4c4aa502d4a65b90a86de6c1af868984565f1fe2 Mon Sep 17 00:00:00 2001
From: Matt Johnston <matt@ucc.asn.au>
Date: Fri, 18 Dec 2015 21:20:46 +0800
Subject: [PATCH] use exec for proxycommand

---
 cli-main.c | 9 ++++++++-
 dbclient.1 | 3 ++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/cli-main.c b/cli-main.c
index c2fd729b..787d770b 100644
--- a/cli-main.c
+++ b/cli-main.c
@@ -152,12 +152,19 @@ static void exec_proxy_cmd(void *user_data_cmd) {
 
 #ifdef ENABLE_CLI_PROXYCMD
 static void cli_proxy_cmd(int *sock_in, int *sock_out, pid_t *pid_out) {
+	char * ex_cmd = NULL;
+	size_t ex_cmdlen;
 	int ret;
 
 	fill_passwd(cli_opts.own_user);
 
-	ret = spawn_command(exec_proxy_cmd, cli_opts.proxycmd,
+	ex_cmdlen = strlen(cli_opts.proxycmd) + 6; /* "exec " + command + '\0' */
+	ex_cmd = m_malloc(ex_cmdlen);
+	snprintf(ex_cmd, ex_cmdlen, "exec %s", cli_opts.proxycmd);
+
+	ret = spawn_command(exec_proxy_cmd, ex_cmd,
 			sock_out, sock_in, NULL, pid_out);
+	m_free(ex_cmd);
 	if (ret == DROPBEAR_FAILURE) {
 		dropbear_exit("Failed running proxy command");
 		*sock_in = *sock_out = -1;
diff --git a/dbclient.1 b/dbclient.1
index e521af6c..fee23c68 100644
--- a/dbclient.1
+++ b/dbclient.1
@@ -114,7 +114,8 @@ Disconnect the session if no traffic is transmitted or received for \fIidle_time
 .B \-J \fIproxy_command
 Use the standard input/output of the program \fIproxy_command\fR rather than using
 a normal TCP connection. A hostname should be still be provided, as this is used for
-comparing saved hostkeys.
+comparing saved hostkeys. This command will be executed as "exec proxy_command ..." with the
+default shell.
 .TP
 .B \-B \fIendhost:endport
 "Netcat-alike" mode, where Dropbear will connect to the given host, then create a
-- 
GitLab