summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Sivak <mars@nomi.cz>2005-08-03 17:15:42 +0200
committerJunio C Hamano <junkio@cox.net>2005-08-09 22:28:20 -0700
commit4852f7232b7a83fbd1b745520181bd67bf95911b (patch)
treec7e28f6698417a9bb3df7e3c123354a13ea9de8f
parent763e287a3525ca36fb5b75d91a825833fb11d43a (diff)
downloadgit-4852f7232b7a83fbd1b745520181bd67bf95911b.tar.gz
Use GIT_SSH environment to specify alternate ssh binary.
[jc: I ended up rewriting Martin's patch due to whitespace breakage, but the credit goes to Martin for doing the initial patch to identify what needs to be changed.] Signed-off-by: Martin Sivak <mars@nomi.cz> Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--connect.c11
-rw-r--r--rsh.c8
2 files changed, 16 insertions, 3 deletions
diff --git a/connect.c b/connect.c
index 8f4d99aef2..a6657b1384 100644
--- a/connect.c
+++ b/connect.c
@@ -382,8 +382,15 @@ int git_connect(int fd[2], char *url, const char *prog)
close(pipefd[0][1]);
close(pipefd[1][0]);
close(pipefd[1][1]);
- if (protocol == PROTO_SSH)
- execlp("ssh", "ssh", host, command, NULL);
+ if (protocol == PROTO_SSH) {
+ const char *ssh = getenv("GIT_SSH") ? : "ssh";
+ const char *ssh_basename = strrchr(ssh, '/');
+ if (!ssh_basename)
+ ssh_basename = ssh;
+ else
+ ssh_basename++;
+ execlp(ssh, ssh_basename, host, command, NULL);
+ }
else
execlp("sh", "sh", "-c", command, NULL);
die("exec failed");
diff --git a/rsh.c b/rsh.c
index fe87e581d2..bcb1c80d84 100644
--- a/rsh.c
+++ b/rsh.c
@@ -56,10 +56,16 @@ int setup_connection(int *fd_in, int *fd_out, const char *remote_prog,
return error("Couldn't create socket");
}
if (!fork()) {
+ const char *ssh = getenv("GIT_SSH") ? : "ssh";
+ const char *ssh_basename = strrchr(ssh, '/');
+ if (!ssh_basename)
+ ssh_basename = ssh;
+ else
+ ssh_basename++;
close(sv[1]);
dup2(sv[0], 0);
dup2(sv[0], 1);
- execlp("ssh", "ssh", host, command, NULL);
+ execlp(ssh, ssh_basename, host, command, NULL);
}
close(sv[0]);
*fd_in = sv[1];