[PATCH 2/2] connect: improve check for plink to reduce false positives
- From
brian m. carlson <sandals@crustytoothpaste.net>
- Date
- Apr 23, 2015, 00:06 UTC
- Message-ID
- <1429747595-298095-2-git-send-email-sandals@crustytoothpaste.net>
- In-Reply-To
- <1429747595-298095-1-git-send-email-sandals@crustytoothpaste.net>
The git_connect function has code to handle plink and tortoiseplink specially, as they require different command line arguments from OpenSSH. However, the match was done by checking for "plink" case-insensitively in the string, which led to false positives when GIT_SSH contained "uplink". Improve the check by looking for "plink" or "tortoiseplink" only at the beginning of the string or immediately after a directory separator.
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> --- This is essentially just a deindentation.
connect.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/connect.c b/connect.c index 749a07b..bae76a2 100644 --- a/connect.c +++ b/connect.c @@ -724,7 +724,7 @@ struct child_process *git_connect(int fd[2], const char *url, conn->in = conn->out = -1; if (protocol == PROTO_SSH) { const char *ssh; - int putty; + int putty, tortoiseplink = 0; char *ssh_host = hostandport; const char *port = NULL; get_host_and_port(&ssh_host, &port); @@ -750,14 +750,23 @@ struct child_process *git_connect(int fd[2], const char *url, conn->use_shell = 1; putty = 0; } else { + char *plink, *tplink; + ssh = getenv("GIT_SSH"); if (!ssh) ssh = "ssh"; - putty = !!strcasestr(ssh, "plink"); + + plink = strcasestr(ssh, "plink"); + tplink = strcasestr(ssh, "tortoiseplink"); + + tortoiseplink = tplink == ssh || + (tplink && is_dir_sep(tplink[-1])); + putty = tortoiseplink || plink == ssh || + (plink && is_dir_sep(plink[-1])); } argv_array_push(&conn->args, ssh); - if (putty && !strcasestr(ssh, "tortoiseplink")) + if (tortoiseplink) argv_array_push(&conn->args, "-batch"); if (port) { /* P is for PuTTY, p is for OpenSSH */
-- 2.3.5