MINOR: checks: Keep the Host header and the request uri synchronized

Because in HTTP, the host header and the request authority, if any, must be
identical, we keep both synchornized. It means the right flags are set on the
HTX statrt-line calling http_update_host(). There is no header when it happens,
but it is not an issue. Then, if a Host header is inserted,
http_update_authority() is called.

Note that for now, the host header is not automatically added when required.
This commit is contained in:
Christopher Faulet 2020-04-29 13:21:37 +02:00
parent 7d765dbe9a
commit 39959a75e9

View File

@ -1930,6 +1930,8 @@ static enum tcpcheck_eval_ret tcpcheck_eval_send(struct check *check, struct tcp
if (!sl)
goto error_htx;
sl->info.req.meth = send->http.meth.meth;
if (!http_update_host(htx, sl, uri))
goto error_htx;
body = send->http.body; // TODO: handle body_fmt
clen = ist((!istlen(body) ? "0" : ultoa(istlen(body))));
@ -1940,14 +1942,20 @@ static enum tcpcheck_eval_ret tcpcheck_eval_send(struct check *check, struct tcp
if (!LIST_ISEMPTY(&send->http.hdrs)) {
struct tcpcheck_http_hdr *hdr;
struct ist hdr_value;
list_for_each_entry(hdr, &send->http.hdrs, list) {
chunk_reset(tmp);
tmp->data = sess_build_logline(check->sess, NULL, b_orig(tmp), b_size(tmp), &hdr->value);
if (!b_data(tmp))
continue;
if (!htx_add_header(htx, hdr->name, ist2(b_orig(tmp), b_data(tmp))))
hdr_value = ist2(b_orig(tmp), b_data(tmp));
if (!htx_add_header(htx, hdr->name, hdr_value))
goto error_htx;
if ((sl->flags & HTX_SL_F_HAS_AUTHORITY) && isteqi(hdr->name, ist("host"))) {
if (!http_update_authority(htx, sl, hdr_value))
goto error_htx;
}
}
}