Re: Request for detailed documentation of git pack protocol
- From
Jakub Narebski <jnareb@gmail.com>
- Date
- Jun 3, 2009, 15:39 UTC
- Message-ID
- <200906031739.49682.jnareb@gmail.com>
- In-Reply-To
- <20090603150746.GF3355@spearce.org>
On Wed, 3 Jun 2009, Shawn O. Pearce wrote:
> "Shawn O. Pearce" <spearce@spearce.org> wrote: > > Jakub Narebski <jnareb@gmail.com> wrote:
Show 7 quoted lines
> > > What options besides (required?) "host=<server>[:<port>]" are supported? > > > > Currently only host is supported. And yea, it takes the :<port> if > > the client included the port number in the URL (git://foo:8813/path). > > Ok, I'm wrong. It *doesn't* send the port. The reason is obtuse, > but git_tcp_connect() clobbers the port number out of the host
What about git_proxy_connect()? Does it clobber port number either?
> name string, so that later when git_connect() sends this "host=%s", > only the host name is transmitted.
Hmmm... so does that mean that in the following fragment of deamon.c on branch is dead in practice?
if (strncasecmp("host=", extra_args, 5) == 0) {
val = extra_args + 5;
vallen = strlen(val) + 1;
if (*val) {
/* Split <host>:<port> at colon. */
char *host = val;
char *port = strrchr(host, ':');
if (port) {
*port = 0;
port++;
free(tcp_port);
tcp_port = xstrdup(port);
}
free(hostname);
hostname = xstrdup_tolower(host);
} /* On to the next one */
extra_args = val + vallen;
}> > Actually, I just realized JGit isn't compliant here. It doesn't > > send the :<port> like C Git would. > > So, actually JGit is compliant here.
Well, we can take the stance that C Git isn't compliant either ;-)
Show 18 quoted lines
> > > > Do I understand correctly that "host=<host>" information is required > > > for core.gitProxy to work, isn't it? > > If core.gitProxy or GIT_PROXY_COMMAND are set, you can lie to the > remote git daemon about the host. E.g.: > > $ cat proxy.sh > #!/bin/sh > exec nc git.kernel.org 9418 > > GIT_PROXY_COMMAND=proxy.sh git ls-remote git://github.com/foo.git > > During that kernel.org receives "\0host=github.com\0" host header, > which is not the name you connected to it as. :-) > > In practice I doubt anyone would do that, but, you can confuse > yourself. I guess about equally as well as url.insteadof. :-)
A question: do compliant implementation MUST not fail on receiving arguments it doesn't understand, e.g.:
003bgit-upload-pack /project.git\0host=myserver.com\0user=me\0
or can it go hang the client, or silently fail?
-- Jakub Narebski Poland