Merge branch 'maint'
* maint: Documentation: refer to gitworkflows(7) from tutorial and git(1) daemon: Strictly parse the "extra arg" part of the commandmaint
commit
3ff7e178dc
|
@ -232,6 +232,8 @@ The link:user-manual.html#git-concepts[git concepts chapter of the
|
||||||
user-manual] and linkgit:gitcore-tutorial[7] both provide
|
user-manual] and linkgit:gitcore-tutorial[7] both provide
|
||||||
introductions to the underlying git architecture.
|
introductions to the underlying git architecture.
|
||||||
|
|
||||||
|
See linkgit:gitworkflows[7] for an overview of recommended workflows.
|
||||||
|
|
||||||
See also the link:howto-index.html[howto] documents for some useful
|
See also the link:howto-index.html[howto] documents for some useful
|
||||||
examples.
|
examples.
|
||||||
|
|
||||||
|
@ -649,7 +651,8 @@ SEE ALSO
|
||||||
linkgit:gittutorial[7], linkgit:gittutorial-2[7],
|
linkgit:gittutorial[7], linkgit:gittutorial-2[7],
|
||||||
link:everyday.html[Everyday Git], linkgit:gitcvs-migration[7],
|
link:everyday.html[Everyday Git], linkgit:gitcvs-migration[7],
|
||||||
linkgit:gitglossary[7], linkgit:gitcore-tutorial[7],
|
linkgit:gitglossary[7], linkgit:gitcore-tutorial[7],
|
||||||
linkgit:gitcli[7], link:user-manual.html[The Git User's Manual]
|
linkgit:gitcli[7], link:user-manual.html[The Git User's Manual],
|
||||||
|
linkgit:gitworkflows[7]
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
---
|
---
|
||||||
|
|
|
@ -650,6 +650,9 @@ digressions that may be interesting at this point are:
|
||||||
smart enough to perform a close-to-optimal search even in the
|
smart enough to perform a close-to-optimal search even in the
|
||||||
case of complex non-linear history with lots of merged branches.
|
case of complex non-linear history with lots of merged branches.
|
||||||
|
|
||||||
|
* linkgit:gitworkflows[7]: Gives an overview of recommended
|
||||||
|
workflows.
|
||||||
|
|
||||||
* link:everyday.html[Everyday GIT with 20 Commands Or So]
|
* link:everyday.html[Everyday GIT with 20 Commands Or So]
|
||||||
|
|
||||||
* linkgit:gitcvs-migration[7]: Git for CVS users.
|
* linkgit:gitcvs-migration[7]: Git for CVS users.
|
||||||
|
@ -661,6 +664,7 @@ linkgit:gitcvs-migration[7],
|
||||||
linkgit:gitcore-tutorial[7],
|
linkgit:gitcore-tutorial[7],
|
||||||
linkgit:gitglossary[7],
|
linkgit:gitglossary[7],
|
||||||
linkgit:git-help[1],
|
linkgit:git-help[1],
|
||||||
|
linkgit:gitworkflows[7],
|
||||||
link:everyday.html[Everyday git],
|
link:everyday.html[Everyday git],
|
||||||
link:user-manual.html[The Git User's Manual]
|
link:user-manual.html[The Git User's Manual]
|
||||||
|
|
||||||
|
|
|
@ -579,7 +579,10 @@ struct child_process *git_connect(int fd[2], const char *url_orig,
|
||||||
git_tcp_connect(fd, host, flags);
|
git_tcp_connect(fd, host, flags);
|
||||||
/*
|
/*
|
||||||
* Separate original protocol components prog and path
|
* Separate original protocol components prog and path
|
||||||
* from extended components with a NUL byte.
|
* from extended host header with a NUL byte.
|
||||||
|
*
|
||||||
|
* Note: Do not add any other headers here! Doing so
|
||||||
|
* will cause older git-daemon servers to crash.
|
||||||
*/
|
*/
|
||||||
packet_write(fd[1],
|
packet_write(fd[1],
|
||||||
"%s %s%chost=%s%c",
|
"%s %s%chost=%s%c",
|
||||||
|
|
10
daemon.c
10
daemon.c
|
@ -406,15 +406,15 @@ static char *xstrdup_tolower(const char *str)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Separate the "extra args" information as supplied by the client connection.
|
* Read the host as supplied by the client connection.
|
||||||
*/
|
*/
|
||||||
static void parse_extra_args(char *extra_args, int buflen)
|
static void parse_host_arg(char *extra_args, int buflen)
|
||||||
{
|
{
|
||||||
char *val;
|
char *val;
|
||||||
int vallen;
|
int vallen;
|
||||||
char *end = extra_args + buflen;
|
char *end = extra_args + buflen;
|
||||||
|
|
||||||
while (extra_args < end && *extra_args) {
|
if (extra_args < end && *extra_args) {
|
||||||
saw_extended_args = 1;
|
saw_extended_args = 1;
|
||||||
if (strncasecmp("host=", extra_args, 5) == 0) {
|
if (strncasecmp("host=", extra_args, 5) == 0) {
|
||||||
val = extra_args + 5;
|
val = extra_args + 5;
|
||||||
|
@ -436,6 +436,8 @@ static void parse_extra_args(char *extra_args, int buflen)
|
||||||
/* On to the next one */
|
/* On to the next one */
|
||||||
extra_args = val + vallen;
|
extra_args = val + vallen;
|
||||||
}
|
}
|
||||||
|
if (extra_args < end && *extra_args)
|
||||||
|
die("Invalid request");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -545,7 +547,7 @@ static int execute(struct sockaddr *addr)
|
||||||
hostname = canon_hostname = ip_address = tcp_port = NULL;
|
hostname = canon_hostname = ip_address = tcp_port = NULL;
|
||||||
|
|
||||||
if (len != pktlen)
|
if (len != pktlen)
|
||||||
parse_extra_args(line + len + 1, pktlen - len - 1);
|
parse_host_arg(line + len + 1, pktlen - len - 1);
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(daemon_service); i++) {
|
for (i = 0; i < ARRAY_SIZE(daemon_service); i++) {
|
||||||
struct daemon_service *s = &(daemon_service[i]);
|
struct daemon_service *s = &(daemon_service[i]);
|
||||||
|
|
Loading…
Reference in New Issue