On Mon, 30 Aug 2010 19:33:39 -0600, Alex Rousskov
<[email protected]> wrote:
> Compliance: handle HTTP OPTIONS and TRACE requests with asterisk URIs.
> 
> Handle '*' URIs in urlParse(). This allows Squid properly respond to 
> OPTIONS and TRACE requests with '*' URIs and Max-Forwards value of zero.

> Forwarding similar requests with positive Max-Forwards value is out of 
> this change scope and still does not work, because the upstream host and

> port are not set.
> 
> Co-Advisor test cases:
>      test_case/rfc2616/options-bodyless-asterisk
>      test_case/rfc2616/maxForwardsZero-OPTIONS-asterisk
>      test_case/rfc2616/maxForwardsZero-TRACE-asterisk


* The purpose of urlCheckRequest(request) is to determine if the request
is servicable and should be updated to contain the condition:

  if ((method == METHOD_TRACE || method == METHOD_OPTIONS) &&
      (request->max_forwards == 0 && request->urlpath == "*"))
    return 1;

this removes the need all changes to client_side.cc.


url.cc:

* Please do the parser method check before the check for "urn:" unless the
request:  "OPTIONS urn:*" is valid and to be rejected. Which I don't think
it is.

* Please copy the request setup from the end of the function and return
immediately from the parser after finding "*". There is no need to run
through (or change) any of the validation code in this special case.

ie:
...
  } else if ((method == METHOD_OPTIONS || method == METHOD_TRACE) &&
strcmp(url, "*") == 0) {
    if (NULL == request)
      request = new HttpRequest(method, protocol, url);
    else
      request->initHTTP(method, protocol, url);
    return request;
  } else if (!strncmp(url, "urn:", 4)) {
...

Amos

Reply via email to