You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafficserver.apache.org by "Ron Barber (JIRA)" <ji...@apache.org> on 2013/11/18 19:23:22 UTC

[jira] [Created] (TS-2366) Default remap occurs if first remap plugin does NOT remap

Ron Barber created TS-2366:
------------------------------

             Summary: Default remap occurs if first remap plugin does NOT remap
                 Key: TS-2366
                 URL: https://issues.apache.org/jira/browse/TS-2366
             Project: Traffic Server
          Issue Type: Bug
          Components: Core
            Reporter: Ron Barber


When you have multiple remap plugins, if the first remap plugin does NOT return that it remapped, then the core 'forces' the default remapping to occur.  If the subsequent plugin parses the client request it will see the default remapped value rather than the client's original request.

To duplicate:
FILE remap.config:
map http://a.com/ http://b.com/b/  @plugin=conf_remap.so @pparam=pristine_host_hdr_disabled.config @plugin=regex_remap.so  @pparam=regex.map  

FILE pristine_host_hdr_disabled.config:
CONFIG proxy.config.url_remap.pristine_host_hdr INT 0

FILE regex.map:
^/?$            http://c.com/c/index.html

Request:
curl -IH 'Host: a.com' http://127.0.0.1:8080/

Result:
The request will be mapped to b.com when it should be mapped to c.com.  If you reverse the order of the remap plugins (have regex_remap run first) then it works.

The code below is the issue...the XXX comment is the correct solution which needs to be implemented:

>From RemapPlugins.cc

  if (TSREMAP_NO_REMAP == plugin_retcode || TSREMAP_NO_REMAP_STOP == plugin_retcode) {
    // After running the first plugin, rewrite the request URL. This is doing the default rewrite rule
    // to handle the case where no plugin ever rewrites.
    //
    // XXX we could probably optimize this a bit more by keeping a flag and only rewriting the request URL
    // if no plugin has rewritten it already.
    if (_cur == 1) {
      Debug("url_rewrite", "plugin did not change host, port or path, copying from mapping rule");
      url_rewrite_remap_request(_s->url_map, _request_url);
    }
  }



--
This message was sent by Atlassian JIRA
(v6.1#6144)