Re: git daemon directory munging?
- From
Linus Torvalds <torvalds@osdl.org>
- Date
- Jun 4, 2006, 00:42 UTC
- Message-ID
- <Pine.LNX.4.64.0606031722340.5498@g5.osdl.org>
- In-Reply-To
- <E1FmgFV-0001i6-Kc@jdl.com>
On Sat, 3 Jun 2006, Jon Loeliger wrote:
> > <jdl> Thus, I'd use something like: > --map-base=www.foo.com/pub/scm:/pub/foo/scm > --map-base=www.bar.com/pub/scm=/pub/bar/scm
The bigger problem is that nothing actually passes in the hostname to git-daemon in the first place. By the time the git-daemon is contacted, the hostname is long gone ;(
Now, you can just extend the git protocol to just pass in the host too.
You can in fact do this in a backwards-compatible manner (old git-daemons will just ignore it, and new git daemons will automatically notice new clients) with something evil like the appended.
Not tested (and this actualyl doesn't make the daemon _use_ the data, it just adds a comment - the rest "is left as an exercise for the reader")
Linus
---
diff --git a/connect.c b/connect.c index 54f7bf7..36c5d04 100644 --- a/connect.c +++ b/connect.c @@ -374,7 +374,7 @@ static int git_tcp_connect(int fd[2], co fd[0] = sockfd; fd[1] = sockfd; - packet_write(sockfd, "%s %s\n", prog, path); + packet_write(sockfd, "%s %s%c%s%c%s\n", prog, path, 0, host, 0, port); return 0; } diff --git a/daemon.c b/daemon.c index 776749e..61e0af9 100644 --- a/daemon.c +++ b/daemon.c @@ -267,7 +267,7 @@ static int upload(char *dir) static int execute(void) { static char line[1000]; - int len; + int len, n; alarm(init_timeout ? init_timeout : timeout); len = packet_read_line(0, line, sizeof(line)); @@ -276,6 +276,14 @@ static int execute(void) if (len && line[len-1] == '\n') line[--len] = 0; + n = strlen(line); + if (n != len) { + /* Cool, we have hidden info at the end */ + /* Parse the hostname and the port, and */ + /* leave some room for expansion for */ + /* the future .. */ + } + if (!strncmp("git-upload-pack ", line, 16)) return upload(line+16);