提交 68186857 编写于 作者: J Junio C Hamano

Merge branch 'il/maint-colon-address'

* il/maint-colon-address:
  Allow use of []-wrapped addresses in git://
  Support addresses with ':' in git-daemon
......@@ -502,12 +502,18 @@ struct child_process *git_connect(int fd[2], const char *url_orig,
c = ':';
}
/*
* Don't do destructive transforms with git:// as that
* protocol code does '[]' dewrapping of its own.
*/
if (host[0] == '[') {
end = strchr(host + 1, ']');
if (end) {
*end = 0;
if (protocol != PROTO_GIT) {
*end = 0;
host++;
}
end++;
host++;
} else
end = host;
} else
......
......@@ -399,6 +399,33 @@ static char *xstrdup_tolower(const char *str)
return dup;
}
static void parse_host_and_port(char *hostport, char **host,
char **port)
{
if (*hostport == '[') {
char *end;
end = strchr(hostport, ']');
if (!end)
die("Invalid reqeuest ('[' without ']')");
*end = '\0';
*host = hostport + 1;
if (!end[1])
*port = NULL;
else if (end[1] == ':')
*port = end + 2;
else
die("Garbage after end of host part");
} else {
*host = hostport;
*port = strrchr(hostport, ':');
if (*port) {
*port = '\0';
++*port;
}
}
}
/*
* Read the host as supplied by the client connection.
*/
......@@ -415,11 +442,10 @@ static void parse_host_arg(char *extra_args, int buflen)
vallen = strlen(val) + 1;
if (*val) {
/* Split <host>:<port> at colon. */
char *host = val;
char *port = strrchr(host, ':');
char *host;
char *port;
parse_host_and_port(val, &host, &port);
if (port) {
*port = 0;
port++;
free(tcp_port);
tcp_port = xstrdup(port);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册