[
https://issues.apache.org/jira/browse/TS-3956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14942955#comment-14942955
]
Brian Geffon edited comment on TS-3956 at 10/5/15 6:09 AM:
-----------------------------------------------------------
I have a proposed patch incoming it maintains backwards compatability while
being a little more flexible with whitespace, for example the following config
will parse as:
{code}
cond %{READ_REQUEST_HDR_HOOK}
cond %{CLIENT-HEADER:Host} /^localhost$/ [AND]
cond %{CLIENT-HEADER:Host} =a
# COMMENT!
# COMMENT
cond %{Client-HEADER:Foo} =b
cond %{Client-HEADER:Blah} = x
cond %{CLIENT-HEADER:non_existent_header} = "shouldnt_ exist _anyway"
[AND]
cond %{CLIENT-HEADER:non_existent_header} = "shouldnt_ = _anyway"
[AND]
cond %{CLIENT-HEADER:non_existent_header} ="=" [AND]
cond %{CLIENT-HEADER:non_existent_header} ="" [AND]
add-header X-HeaderRewriteApplied true
{code}
{code}
$1 = std::vector of length 2, capacity 2 = {"cond", "%{READ_REQUEST_HDR_HOOK}"}
$2 = std::vector of length 4, capacity 4 = {"cond", "%{CLIENT-HEADER:Host}",
"/^localhost$/", "[AND]"}
$3 = std::vector of length 4, capacity 4 = {"cond", "%{CLIENT-HEADER:Host}",
"=", "a"}
$4 = std::vector of length 4, capacity 4 = {"cond", "%{Client-HEADER:Foo}",
"=", "b"}
$5 = std::vector of length 4, capacity 4 = {"cond", "%{Client-HEADER:Blah}",
"=", "x"}
$6 = std::vector of length 5, capacity 8 = {"cond",
"%{CLIENT-HEADER:non_existent_header}", "=", "shouldnt_ exist _anyway",
"[AND]"}
$8 = std::vector of length 5, capacity 8 = {"cond",
"%{CLIENT-HEADER:non_existent_header}", "=", "=", "[AND]"}
$9 = std::vector of length 5, capacity 8 = {"cond",
"%{CLIENT-HEADER:non_existent_header}", "=", "", "[AND]"}
$10 = std::vector of length 3, capacity 4 = {"add-header",
"X-HeaderRewriteApplied", "true"}
{code}
was (Author: briang):
I have a proposed patch incoming it maintains backwards compatability while
being a little more flexible with whitespace, for example the following config
will parse as:
{code}
cond %{READ_REQUEST_HDR_HOOK}
cond %{CLIENT-HEADER:Host} /^localhost$/ [AND]
cond %{CLIENT-HEADER:Host} =a
# COMMENT!
# COMMENT
cond %{Client-HEADER:Foo} =b
cond %{Client-HEADER:Blah} = x
cond %{CLIENT-HEADER:non_existent_header} = "shouldnt_ exist _anyway"
[AND]
add-header X-HeaderRewriteApplied true
{code}
{code}
$1 = std::vector of length 2, capacity 2 = {"cond", "%{READ_REQUEST_HDR_HOOK}"}
$2 = std::vector of length 4, capacity 4 = {"cond", "%{CLIENT-HEADER:Host}",
"/^localhost$/", "[AND]"}
$3 = std::vector of length 4, capacity 4 = {"cond", "%{CLIENT-HEADER:Host}",
"=", "a"}
$4 = std::vector of length 4, capacity 4 = {"cond", "%{Client-HEADER:Foo}",
"=", "b"}
$5 = std::vector of length 4, capacity 4 = {"cond", "%{Client-HEADER:Blah}",
"=", "x"}
$6 = std::vector of length 5, capacity 8 = {"cond",
"%{CLIENT-HEADER:non_existent_header}", "=", "shouldnt_ exist _anyway",
"[AND]"}
$7 = std::vector of length 3, capacity 4 = {"add-header",
"X-HeaderRewriteApplied", "true"}
{code}
> Header_rewrite applies strange logic with = operator and whitespace
> -------------------------------------------------------------------
>
> Key: TS-3956
> URL: https://issues.apache.org/jira/browse/TS-3956
> Project: Traffic Server
> Issue Type: Bug
> Components: Plugins
> Reporter: Brian Geffon
> Assignee: Brian Geffon
>
> It appears that whitespace causes weird behavior with header_rewrite, for
> example:
> If you remove the white space before the = and the quotes it appears to
> behave correctly. This whitespace issue is likely to cause strange bugs and
> needs to be fixed.
> {code}
> cond %{READ_REQUEST_HDR_HOOK}
> cond %{CLIENT-HEADER:Host} /^localhost$/ [AND]
> cond %{CLIENT-HEADER:non_existent_header} = "shouldnt_exist_anyway" [AND]
> add-header X-HeaderRewriteApplied true
> {code}
> With the following request:
> {code}
> curl -v localhost/
> {code}
> Header_rewrite will incorrectly apply the rule:
> {code}
> [Oct 4 20:56:49.245] Server {0x7ffff61b5700} DIAG: (header_rewrite) Building
> resources, hook=TS_HTTP_READ_REQUEST_HDR_HOOK
> [Oct 4 20:56:49.245] Server {0x7ffff61b5700} DIAG: (header_rewrite) Adding
> TXN client request header buffers
> [Oct 4 20:56:49.245] Server {0x7ffff61b5700} DIAG: (header_rewrite) Getting
> Header: Host, field_loc: 0x7fffd02070d0
> [Oct 4 20:56:49.245] Server {0x7ffff61b5700} DIAG: (header_rewrite)
> Appending HEADER(Host) to evaluation value -> localhost
> [Oct 4 20:56:49.245] Server {0x7ffff61b5700} DIAG: (header_rewrite) Test
> regular expression ^localhost$ : localhost
> [Oct 4 20:56:49.245] Server {0x7ffff61b5700} DIAG: (header_rewrite)
> Successfully found regular expression match
> [Oct 4 20:56:49.245] Server {0x7ffff61b5700} DIAG: (header_rewrite)
> Evaluating HEADER(): localhost - rval: 1
> [Oct 4 20:56:49.245] Server {0x7ffff61b5700} DIAG: (header_rewrite) Getting
> Header: non_existent_header, field_loc: (nil)
> [Oct 4 20:56:49.245] Server {0x7ffff61b5700} DIAG: (header_rewrite)
> Evaluating HEADER(): - rval: 1
> [Oct 4 20:56:49.245] Server {0x7ffff61b5700} DIAG: (header_rewrite)
> OperatorAddHeader::exec() invoked on header X-HeaderRewriteApplied: true
> [Oct 4 20:56:49.245] Server {0x7ffff61b5700} DIAG: (header_rewrite)
> Adding header X-HeaderRewriteApplied
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)