X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=rsh.c;h=bcb1c80d84b77e04bf843c2b38592284760ae165;hb=3e386508f87278610d1892aaaa08cd17907f71c5;hp=5d1cb9d578a8e679fc190a9d7d2c842ad811223f;hpb=d19938ab6053e3dad75a68a60ef8cad1f378b0e5;p=git.git diff --git a/rsh.c b/rsh.c index 5d1cb9d5..bcb1c80d 100644 --- a/rsh.c +++ b/rsh.c @@ -8,7 +8,7 @@ #define COMMAND_SIZE 4096 -int setup_connection(int *fd_in, int *fd_out, char *remote_prog, +int setup_connection(int *fd_in, int *fd_out, const char *remote_prog, char *url, int rmt_argc, char **rmt_argv) { char *host; @@ -25,19 +25,23 @@ int setup_connection(int *fd_in, int *fd_out, char *remote_prog, } host = strstr(url, "//"); - if (!host) { - return error("Bad URL: %s", url); + if (host) { + host += 2; + path = strchr(host, '/'); + } else { + host = url; + path = strchr(host, ':'); + if (path) + *(path++) = '\0'; } - host += 2; - path = strchr(host, '/'); if (!path) { return error("Bad URL: %s", url); } - *(path++) = '\0'; - /* ssh 'cd /; stdio-pull ' */ + /* ssh 'cd ; stdio-pull ' */ snprintf(command, COMMAND_SIZE, - "cd /%s; %s=objects %s", - path, DB_ENVIRONMENT, remote_prog); + "%s='%s' %s", + GIT_DIR_ENVIRONMENT, path, remote_prog); + *path = '\0'; posn = command + strlen(command); for (i = 0; i < rmt_argc; i++) { *(posn++) = ' '; @@ -52,10 +56,16 @@ int setup_connection(int *fd_in, int *fd_out, 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];