From 39959a75e91e4b702c5bcc31eaad81d40b9f61ac Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Wed, 29 Apr 2020 13:21:37 +0200 Subject: [PATCH] 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. --- src/checks.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/checks.c b/src/checks.c index 3b22adabf..7c75a1d84 100644 --- a/src/checks.c +++ b/src/checks.c @@ -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; + } } }