blob: 5ee73a308d52153a03ad09b758e2989e09fe870d [file] [log] [blame]
Tim Duesterhusd371e992021-04-15 21:45:58 +02001varnishtest "normalize-uri tests"
2#REQUIRE_VERSION=2.4
3
4# This reg-test tests the http-request normalize-uri action.
5
6feature ignore_unknown_macro
7
8server s1 {
9 rxreq
10 txresp
Tim Duesterhus9982fc22021-04-15 21:45:59 +020011} -repeat 21 -start
Tim Duesterhusd371e992021-04-15 21:45:58 +020012
13haproxy h1 -conf {
14 defaults
15 mode http
16 timeout connect 1s
17 timeout client 1s
18 timeout server 1s
19
20 frontend fe_merge_slashes
21 bind "fd@${fe_merge_slashes}"
22
23 http-request set-var(txn.before) url
24 http-request normalize-uri merge-slashes
25 http-request set-var(txn.after) url
26
27 http-response add-header before %[var(txn.before)]
28 http-response add-header after %[var(txn.after)]
29
30 default_backend be
31
Tim Duesterhus9982fc22021-04-15 21:45:59 +020032 frontend fe_dotdot
33 bind "fd@${fe_dotdot}"
34
35 http-request set-var(txn.before) url
36 http-request normalize-uri dotdot
37 http-request set-var(txn.after) url
38
Tim Duesterhus560e1a62021-04-15 21:46:00 +020039 http-request set-uri %[var(txn.before)]
40 http-request normalize-uri dotdot full
41 http-request set-var(txn.after_full) url
42
Tim Duesterhus9982fc22021-04-15 21:45:59 +020043 http-response add-header before %[var(txn.before)]
44 http-response add-header after %[var(txn.after)]
Tim Duesterhus560e1a62021-04-15 21:46:00 +020045 http-response add-header after-full %[var(txn.after_full)]
Tim Duesterhus9982fc22021-04-15 21:45:59 +020046
47 default_backend be
48
Tim Duesterhusd371e992021-04-15 21:45:58 +020049 backend be
50 server s1 ${s1_addr}:${s1_port}
51
52} -start
53
54client c1 -connect ${h1_fe_merge_slashes_sock} {
55 txreq -url "/foo/bar"
56 rxresp
57 expect resp.http.before == "/foo/bar"
58 expect resp.http.after == "/foo/bar"
59
60 txreq -url "/foo//bar"
61 rxresp
62 expect resp.http.before == "/foo//bar"
63 expect resp.http.after == "/foo/bar"
64
65 txreq -url "/foo///bar"
66 rxresp
67 expect resp.http.before == "/foo///bar"
68 expect resp.http.after == "/foo/bar"
69
70 txreq -url "///foo///bar"
71 rxresp
72 expect resp.http.before == "///foo///bar"
73 expect resp.http.after == "/foo/bar"
74
75 txreq -url "///foo/bar"
76 rxresp
77 expect resp.http.before == "///foo/bar"
78 expect resp.http.after == "/foo/bar"
79
80 txreq -url "///foo///bar///"
81 rxresp
82 expect resp.http.before == "///foo///bar///"
83 expect resp.http.after == "/foo/bar/"
84
85 txreq -url "///"
86 rxresp
87 expect resp.http.before == "///"
88 expect resp.http.after == "/"
89
90 txreq -url "/foo?bar=///"
91 rxresp
92 expect resp.http.before == "/foo?bar=///"
93 expect resp.http.after == "/foo?bar=///"
94
95 txreq -url "//foo?bar=///"
96 rxresp
97 expect resp.http.before == "//foo?bar=///"
98 expect resp.http.after == "/foo?bar=///"
99
100 txreq -req OPTIONS -url "*"
101 rxresp
102 expect resp.http.before == "*"
103 expect resp.http.after == "*"
104} -run
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200105
106client c2 -connect ${h1_fe_dotdot_sock} {
107 txreq -url "/foo/bar"
108 rxresp
109 expect resp.http.before == "/foo/bar"
110 expect resp.http.after == "/foo/bar"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200111 expect resp.http.after-full == "/foo/bar"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200112
113 txreq -url "/foo/.."
114 rxresp
115 expect resp.http.before == "/foo/.."
116 expect resp.http.after == "/"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200117 expect resp.http.after-full == "/"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200118
119 txreq -url "/foo/../"
120 rxresp
121 expect resp.http.before == "/foo/../"
122 expect resp.http.after == "/"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200123 expect resp.http.after-full == "/"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200124
125 txreq -url "/foo/bar/../"
126 rxresp
127 expect resp.http.before == "/foo/bar/../"
128 expect resp.http.after == "/foo/"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200129 expect resp.http.after-full == "/foo/"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200130
131 txreq -url "/foo/../bar"
132 rxresp
133 expect resp.http.before == "/foo/../bar"
134 expect resp.http.after == "/bar"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200135 expect resp.http.after-full == "/bar"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200136
137 txreq -url "/foo/../bar/"
138 rxresp
139 expect resp.http.before == "/foo/../bar/"
140 expect resp.http.after == "/bar/"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200141 expect resp.http.after-full == "/bar/"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200142
143 txreq -url "/foo/../../bar/"
144 rxresp
145 expect resp.http.before == "/foo/../../bar/"
146 expect resp.http.after == "/../bar/"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200147 expect resp.http.after-full == "/bar/"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200148
149 txreq -url "/foo//../../bar/"
150 rxresp
151 expect resp.http.before == "/foo//../../bar/"
152 expect resp.http.after == "/bar/"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200153 expect resp.http.after-full == "/bar/"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200154
155 txreq -url "/foo/?bar=/foo/../"
156 rxresp
157 expect resp.http.before == "/foo/?bar=/foo/../"
158 expect resp.http.after == "/foo/?bar=/foo/../"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200159 expect resp.http.after-full == "/foo/?bar=/foo/../"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200160
161 txreq -url "/foo/../?bar=/foo/../"
162 rxresp
163 expect resp.http.before == "/foo/../?bar=/foo/../"
164 expect resp.http.after == "/?bar=/foo/../"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200165 expect resp.http.after-full == "/?bar=/foo/../"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200166
167 txreq -req OPTIONS -url "*"
168 rxresp
169 expect resp.http.before == "*"
170 expect resp.http.after == "*"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200171 expect resp.http.after-full == "*"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200172} -run