mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-04-19 13:35:47 +00:00
MINOR: http-htx: Add an option to eval query-string when the path is replaced
The http_replace_req_path() function now takes a third argument to evaluate the query-string as part of the path or to preserve it. If <with_qs> is set, the query-string is replaced with the path. Otherwise, only the path is replaced. This patch is mandatory to fix issue #829. The next commit depends on it. So be carefull during backports.
This commit is contained in:
parent
7d518454bb
commit
b8ce505c6f
@ -45,7 +45,7 @@ int http_add_header(struct htx *htx, const struct ist n, const struct ist v);
|
|||||||
int http_replace_stline(struct htx *htx, const struct ist p1, const struct ist p2, const struct ist p3);
|
int http_replace_stline(struct htx *htx, const struct ist p1, const struct ist p2, const struct ist p3);
|
||||||
int http_replace_req_meth(struct htx *htx, const struct ist meth);
|
int http_replace_req_meth(struct htx *htx, const struct ist meth);
|
||||||
int http_replace_req_uri(struct htx *htx, const struct ist uri);
|
int http_replace_req_uri(struct htx *htx, const struct ist uri);
|
||||||
int http_replace_req_path(struct htx *htx, const struct ist path);
|
int http_replace_req_path(struct htx *htx, const struct ist path, int with_qs);
|
||||||
int http_replace_req_query(struct htx *htx, const struct ist query);
|
int http_replace_req_query(struct htx *htx, const struct ist query);
|
||||||
int http_replace_res_status(struct htx *htx, const struct ist status);
|
int http_replace_res_status(struct htx *htx, const struct ist status);
|
||||||
int http_replace_res_reason(struct htx *htx, const struct ist reason);
|
int http_replace_res_reason(struct htx *htx, const struct ist reason);
|
||||||
|
@ -2771,7 +2771,7 @@ int http_req_replace_stline(int action, const char *replace, int len,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: // path
|
case 1: // path
|
||||||
if (!http_replace_req_path(htx, ist2(replace, len)))
|
if (!http_replace_req_path(htx, ist2(replace, len), 0))
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -396,10 +396,12 @@ int http_replace_req_uri(struct htx *htx, const struct ist uri)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Replace the request path in the HTX message <htx> by <path>. The host part
|
/* Replace the request path in the HTX message <htx> by <path>. The host part is
|
||||||
* and the query string are preserved. It returns 1 on success, otherwise 0.
|
* preserverd. if <with_qs> is set, the query string is evaluated as part of the
|
||||||
|
* path and replaced. Otherwise, it is preserved too. It returns 1 on success,
|
||||||
|
* otherwise 0.
|
||||||
*/
|
*/
|
||||||
int http_replace_req_path(struct htx *htx, const struct ist path)
|
int http_replace_req_path(struct htx *htx, const struct ist path, int with_qs)
|
||||||
{
|
{
|
||||||
struct buffer *temp = get_trash_chunk();
|
struct buffer *temp = get_trash_chunk();
|
||||||
struct htx_sl *sl = http_get_stline(htx);
|
struct htx_sl *sl = http_get_stline(htx);
|
||||||
@ -413,8 +415,12 @@ int http_replace_req_path(struct htx *htx, const struct ist path)
|
|||||||
p = http_get_path(uri);
|
p = http_get_path(uri);
|
||||||
if (!isttest(p))
|
if (!isttest(p))
|
||||||
p = uri;
|
p = uri;
|
||||||
while (plen < p.len && *(p.ptr + plen) != '?')
|
if (with_qs)
|
||||||
plen++;
|
plen = p.len;
|
||||||
|
else {
|
||||||
|
while (plen < p.len && *(p.ptr + plen) != '?')
|
||||||
|
plen++;
|
||||||
|
}
|
||||||
|
|
||||||
/* Start by copying old method and version and create the new uri */
|
/* Start by copying old method and version and create the new uri */
|
||||||
chunk_memcat(temp, HTX_SL_REQ_MPTR(sl), HTX_SL_REQ_MLEN(sl)); /* meth */
|
chunk_memcat(temp, HTX_SL_REQ_MPTR(sl), HTX_SL_REQ_MLEN(sl)); /* meth */
|
||||||
|
Loading…
Reference in New Issue
Block a user