X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=rsh.c;h=04cbdf7a67e9f26d024da1117bf5a5a03596dd1b;hb=78938b0d8a95b09d94af214fdb6b5f053a5edb98;hp=8eea1d0233164a5d0d4977593538289dd93f722d;hpb=001d4a27dbfaaa59c25dc35dafc69bd9b9bc21d3;p=git.git diff --git a/rsh.c b/rsh.c index 8eea1d02..04cbdf7a 100644 --- a/rsh.c +++ b/rsh.c @@ -31,15 +31,17 @@ int setup_connection(int *fd_in, int *fd_out, const char *remote_prog, } else { host = url; path = strchr(host, ':'); + if (path) + *(path++) = '\0'; } if (!path) { return error("Bad URL: %s", url); } - *(path++) = '\0'; - /* ssh 'cd /; stdio-pull ' */ + /* ssh 'cd ; stdio-pull ' */ snprintf(command, COMMAND_SIZE, - "%s='/%s' %s", + "%s='%s' %s", GIT_DIR_ENVIRONMENT, path, remote_prog); + *path = '\0'; posn = command + strlen(command); for (i = 0; i < rmt_argc; i++) { *(posn++) = ' '; @@ -54,10 +56,18 @@ int setup_connection(int *fd_in, int *fd_out, const char *remote_prog, return error("Couldn't create socket"); } if (!fork()) { + const char *ssh, *ssh_basename; + ssh = getenv("GIT_SSH"); + if (!ssh) ssh = "ssh"; + 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];