Re: [PATCH v2 4/9] daemon: recognize hidden request arguments
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Sep 27, 2017, 05:20 UTC
- Message-ID
- <xmqqzi9g67kl.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <20170926235627.79606-5-bmwill@google.com>
Brandon Williams <bmwill@google.com> writes:
Show 5 quoted lines
> A normal request to git-daemon is structured as > "command path/to/repo\0host=..\0" and due to a bug in an old version of > git-daemon 73bb33a94 (daemon: Strictly parse the "extra arg" part of the > command, 2009-06-04) we aren't able to place any extra args (separated > by NULs) besides the host.
It's a bit unclear if that commit _introduced_ a bug, or just noticed an old bug and documented it in its log message. How does that commit impact the versons of Git that the updated code is capable of interracting with?
Show 34 quoted lines
> +static void parse_extra_args(struct hostinfo *hi, struct argv_array *env,
> + char *extra_args, int buflen)
> +{
> + const char *end = extra_args + buflen;
> + struct strbuf git_protocol = STRBUF_INIT;
> +
> + /* First look for the host argument */
> + extra_args = parse_host_arg(hi, extra_args, buflen);
> +
> + /* Look for additional arguments places after a second NUL byte */
> + for (; extra_args < end; extra_args += strlen(extra_args) + 1) {
> + const char *arg = extra_args;
> +
> + /*
> + * Parse the extra arguments, adding most to 'git_protocol'
> + * which will be used to set the 'GIT_PROTOCOL' envvar in the
> + * service that will be run.
> + *
> + * If there ends up being a particular arg in the future that
> + * git-daemon needs to parse specificly (like the 'host' arg)
> + * then it can be parsed here and not added to 'git_protocol'.
> + */
> + if (*arg) {
> + if (git_protocol.len > 0)
> + strbuf_addch(&git_protocol, ':');
> + strbuf_addstr(&git_protocol, arg);
> + }
> + }
> +
> + if (git_protocol.len > 0)
> + argv_array_pushf(env, GIT_PROTOCOL_ENVIRONMENT "=%s",
> + git_protocol.buf);
> + strbuf_release(&git_protocol);
> }