[ 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:36 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]"} $7 = std::vector of length 5, capacity 8 = {"cond", "%{CLIENT-HEADER:non_existent_header}", "=", "shouldnt_ = _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] 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} > 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)