From: Jan Wielemaker <wielemak@science.uva.nl>
To: Git Mailing List <git@vger.kernel.org>
Subject: [PATCH] git-shell and git-cvsserver
Date: Fri, 5 Oct 2007 14:53:47 +0200 [thread overview]
Message-ID: <200710051453.47622.wielemak@science.uva.nl> (raw)
Hi,
I know, I shouldn't be using git-cvsserver :-( Anyway, I patched
git-shell to start git-cvsserver if it is started interactively and the
one and only line given to it is "cvs server".
The patch to shell.c is below. The trick with the EXEC_PATH is needed
because git-cvsserver doesn't appear to be working if you do not include
the git bindir in $PATH. I think that should be fixed in git-cvsserver
and otherwise we should at least make the value come from the prefix
make variable. With this patch I was able to use both Unix and Windows
cvs clients using git-shell as login shell.
Note that you must provide ~/.gitconfig with user and email in the
restricted environment.
Enjoy --- Jan
--- shell.c.org 2007-10-05 13:08:47.000000000 +0200
+++ shell.c 2007-10-05 14:24:11.000000000 +0200
@@ -18,27 +18,80 @@
return execv_git_cmd(my_argv);
}
+#define EXEC_PATH "/usr/local/bin"
+
+static int do_cvs_cmd(const char *me, char *arg)
+{
+ const char *my_argv[4];
+ const char *oldpath;
+
+ if ( !arg )
+ die("no argument");
+ if ( strcmp(arg, "server") )
+ die("only allows git-cvsserver server: %s", arg);
+
+ my_argv[0] = "cvsserver";
+ my_argv[1] = "server";
+ my_argv[2] = NULL;
+
+ if ( (oldpath=getenv("PATH")) ) {
+ char *newpath = malloc(strlen(oldpath)+strlen(EXEC_PATH)+5+1+1);
+
+ sprintf(newpath, "PATH=%s:%s", EXEC_PATH, oldpath);
+ putenv(newpath);
+ } else {
+ char *newpath = malloc(strlen(EXEC_PATH)+5+1);
+
+ sprintf(newpath, "PATH=%s", EXEC_PATH);
+ putenv(newpath);
+ }
+
+ return execv_git_cmd(my_argv);
+}
+
+
static struct commands {
const char *name;
int (*exec)(const char *me, char *arg);
} cmd_list[] = {
{ "git-receive-pack", do_generic_cmd },
{ "git-upload-pack", do_generic_cmd },
+ { "cvs", do_cvs_cmd },
{ NULL },
};
int main(int argc, char **argv)
{
char *prog;
+ char buf[256];
struct commands *cmd;
/* We want to see "-c cmd args", and nothing else */
- if (argc != 3 || strcmp(argv[1], "-c"))
- die("What do you think I am? A shell?");
+ if (argc == 1) {
+ if (fgets(buf, sizeof(buf)-1, stdin)) {
+ char *end;
+
+ if ( (end=strchr(buf, '\n')) )
+ { while(end>buf && end[-1] <= ' ')
+ end--;
+ *end = '\0';
+ } else {
+ die("Bad command");
+ }
+
+ prog = buf;
+ } else {
+ die("No command");
+ }
+ } else {
+ if (argc != 3 || strcmp(argv[1], "-c"))
+ die("What do you think I am? A shell?");
+
+ prog = argv[2];
+ argv += 2;
+ argc -= 2;
+ }
- prog = argv[2];
- argv += 2;
- argc -= 2;
for (cmd = cmd_list ; cmd->name ; cmd++) {
int len = strlen(cmd->name);
char *arg;
next reply other threads:[~2007-10-05 12:59 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-05 12:53 Jan Wielemaker [this message]
2007-10-05 14:31 ` [PATCH] git-shell and git-cvsserver Miklos Vajna
2007-10-05 15:07 ` Frank Lichtenheld
2007-10-08 4:51 ` Johannes Schindelin
2007-10-08 14:22 ` Jan Wielemaker
2007-10-09 11:51 ` Johannes Schindelin
2007-10-09 14:33 ` [PATCH] Support cvs via git-shell Johannes Schindelin
2007-10-09 22:35 ` Frank Lichtenheld
2007-10-10 13:29 ` Johannes Schindelin
2007-10-10 19:10 ` Frank Lichtenheld
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200710051453.47622.wielemak@science.uva.nl \
--to=wielemak@science.uva.nl \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).