Skip to content
  • Jeff King's avatar
    http: respect protocol.*.allow=user for http-alternates · abcbdc03
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    The http-walker may fetch the http-alternates (or
    alternates) file from a remote in order to find more
    objects. This should count as a "not from the user" use of
    the protocol. But because we implement the redirection
    ourselves and feed the new URL to curl, it will use the
    CURLOPT_PROTOCOLS rules, not the more restrictive
    CURLOPT_REDIR_PROTOCOLS.
    
    The ideal solution would be for each curl request we make to
    know whether or not is directly from the user or part of an
    alternates redirect, and then set CURLOPT_PROTOCOLS as
    appropriate. However, that would require plumbing that
    information through all of the various layers of the http
    code.
    
    Instead, let's check the protocol at the source: when we are
    parsing the remote http-alternates file. The only downside
    is that if there's any mismatch between what protocol we
    think it is versus what curl thinks it is, it could violate
    the policy.
    
    To address this, we'll make the parsing err on the picky
    side, and only allow protocols that it can parse
    definitively. So for example, you can't elude the "http"
    policy by asking for "HTTP://", even though curl might
    handle it; we would reject it as unknown. The only unsafe
    case would be if you have a URL that starts with "http://"
    but curl interprets as another protocol. That seems like an
    unlikely failure mode (and we are still protected by our
    base CURLOPT_PROTOCOL setting, so the worst you could do is
    trigger one of https, ftp, or ftps).
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarBrandon Williams <bmwill@google.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    abcbdc03