When using a forced-command, OpenSSH sets the SSH_ORIGINAL_COMMAND variable to what would otherwise be passed to $SHELL -c. When this variable is set, we use it instead of the contents of argv. Signed-off-by: Mike Hommey <mh@xxxxxxxxxxxx> --- I was unsure whether I needed to give more information about forced-commands in the commit message itself, anyways, just in case you don't know what it is: http://oreilly.com/catalog/sshtdg/chapter/ch08.html#22858 I'm not sure if it's worth adding a check for SSH2_ORIGINAL_COMMAND. Are people using the commercial SSH2 ? shell.c | 29 +++++++++++++++++------------ 1 files changed, 17 insertions(+), 12 deletions(-) diff --git a/shell.c b/shell.c index e339369..14ff266 100644 --- a/shell.c +++ b/shell.c @@ -62,20 +62,25 @@ int main(int argc, char **argv) die("opening /dev/null failed (%s)", strerror(errno)); close (devnull_fd); - /* - * Special hack to pretend to be a CVS server - */ - if (argc == 2 && !strcmp(argv[1], "cvs server")) - argv--; + /* Use original command if we were run from a ssh forced-command */ + prog = getenv("SSH_ORIGINAL_COMMAND"); + if (!prog) { + /* + * Special hack to pretend to be a CVS server + */ + if (argc == 2 && !strcmp(argv[1], "cvs server")) + argv--; - /* - * We do not accept anything but "-c" followed by "cmd arg", - * where "cmd" is a very limited subset of git commands. - */ - else if (argc != 3 || strcmp(argv[1], "-c")) - die("What do you think I am? A shell?"); + /* + * We do not accept anything but "-c" followed by "cmd arg", + * where "cmd" is a very limited subset of git commands. + */ + else if (argc != 3 || strcmp(argv[1], "-c")) + die("What do you think I am? A shell?"); + + prog = argv[2]; + } - prog = argv[2]; if (!strncmp(prog, "git", 3) && isspace(prog[3])) /* Accept "git foo" as if the caller said "git-foo". */ prog[3] = '-'; -- 1.6.3.rc0.1.g8bd72.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html