Skip to content

Commit

Permalink
Use GIT_SSH environment to specify alternate ssh binary.
Browse files Browse the repository at this point in the history
[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>
  • Loading branch information
Martin Sivak authored and Junio C Hamano committed Aug 10, 2005
1 parent 763e287 commit 4852f72
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
11 changes: 9 additions & 2 deletions connect.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
8 changes: 7 additions & 1 deletion rsh.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down

0 comments on commit 4852f72

Please sign in to comment.