• Brandon Williams's avatar
    daemon: recognize hidden request arguments · dfe422d0
    Brandon Williams authored
    A normal request to git-daemon is structured as
    "command path/to/repo\0host=..\0" and due to a bug introduced in
    49ba83fb (Add virtualization support to git-daemon, 2006-09-19) we
    aren't able to place any extra arguments (separated by NULs) besides the
    host otherwise the parsing of those arguments would enter an infinite
    loop.  This bug was fixed in 73bb33a9 (daemon: Strictly parse the
    "extra arg" part of the command, 2009-06-04) but a check was put in
    place to disallow extra arguments so that new clients wouldn't trigger
    this bug in older servers.
    
    In order to get around this limitation teach git-daemon to recognize
    additional request arguments hidden behind a second NUL byte.  Requests
    can then be structured like:
    "command path/to/repo\0host=..\0\0version=1\0key=value\0".  git-daemon
    can then parse out the extra arguments and set 'GIT_PROTOCOL'
    accordingly.
    
    By placing these extra arguments behind a second NUL byte we can skirt
    around both the infinite loop bug in 49ba83fb (Add virtualization
    support to git-daemon, 2006-09-19) as well as the explicit disallowing
    of extra arguments introduced in 73bb33a9 (daemon: Strictly parse the
    "extra arg" part of the command, 2009-06-04) because both of these
    versions of git-daemon check for a single NUL byte after the host
    argument before terminating the argument parsing.
    Signed-off-by: default avatarBrandon Williams <bmwill@google.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    dfe422d0
daemon.c 33.7 KB