BUG/MINOR: httpclient: wrongly named httpproxy flag

The HC_F_HTTPPROXY flag was wrongly named and does not use the correct
value, indeed this flag was meant to be used for the httpclient API, not
the httpclient CLI.

This patch fixes the problem by introducing HTTPCLIENT_FO_HTTPPROXY
which has must be set in hc->flags.

Also add a member 'options' in the httpclient structure, because the
member flags is reinitialized when starting.

Must be backported as far as 3.0.
This commit is contained in:
William Lallemand 2025-01-24 17:53:04 +01:00
parent 747a812066
commit 519abefb57
3 changed files with 8 additions and 4 deletions

View File

@ -32,6 +32,7 @@ struct httpclient {
int timeout_server; /* server timeout in ms */ int timeout_server; /* server timeout in ms */
void *caller; /* ptr of the caller */ void *caller; /* ptr of the caller */
unsigned int flags; /* other flags */ unsigned int flags; /* other flags */
unsigned int options; /* options */
struct proxy *px; /* proxy for special cases */ struct proxy *px; /* proxy for special cases */
struct server *srv_raw; /* server for clear connections */ struct server *srv_raw; /* server for clear connections */
#ifdef USE_OPENSSL #ifdef USE_OPENSSL
@ -47,6 +48,9 @@ struct httpclient {
#define HTTPCLIENT_FS_STARTED 0x00010000 /* the httpclient was started */ #define HTTPCLIENT_FS_STARTED 0x00010000 /* the httpclient was started */
#define HTTPCLIENT_FS_ENDED 0x00020000 /* the httpclient is stopped */ #define HTTPCLIENT_FS_ENDED 0x00020000 /* the httpclient is stopped */
/* options */
#define HTTPCLIENT_O_HTTPPROXY 0x00000001 /* the request must be use an absolute URI */
/* States of the HTTP Client Appctx */ /* States of the HTTP Client Appctx */
enum { enum {
HTTPCLIENT_S_REQ = 0, HTTPCLIENT_S_REQ = 0,
@ -59,12 +63,12 @@ enum {
#define HTTPCLIENT_USERAGENT "HAProxy" #define HTTPCLIENT_USERAGENT "HAProxy"
/* What kind of data we need to read */ /* What kind of data we need to read */
/* flags meant for the httpclient CLI API */
#define HC_F_RES_STLINE 0x01 #define HC_F_RES_STLINE 0x01
#define HC_F_RES_HDR 0x02 #define HC_F_RES_HDR 0x02
#define HC_F_RES_BODY 0x04 #define HC_F_RES_BODY 0x04
#define HC_F_RES_END 0x08 #define HC_F_RES_END 0x08
#define HC_F_HTTPPROXY 0x10
#endif /* ! _HAPROXY_HTTCLIENT__T_H */ #endif /* ! _HAPROXY_HTTCLIENT__T_H */

View File

@ -281,7 +281,7 @@ int httpclient_req_gen(struct httpclient *hc, const struct ist url, enum http_me
int i; int i;
int foundhost = 0, foundaccept = 0, foundua = 0; int foundhost = 0, foundaccept = 0, foundua = 0;
if (!(hc->flags & HC_F_HTTPPROXY)) if (!(hc->options & HTTPCLIENT_O_HTTPPROXY))
flags |= HTX_SL_F_NORMALIZED_URI; flags |= HTX_SL_F_NORMALIZED_URI;
if (!b_alloc(&hc->req.buf, DB_CHANNEL)) if (!b_alloc(&hc->req.buf, DB_CHANNEL))

View File

@ -1373,7 +1373,7 @@ static struct task *ssl_ocsp_update_responses(struct task *task, void *context,
/* if the ocsp_update.http_proxy option was set */ /* if the ocsp_update.http_proxy option was set */
if (ocsp_update_dst) { if (ocsp_update_dst) {
hc->flags |= HC_F_HTTPPROXY; hc->options |= HTTPCLIENT_O_HTTPPROXY;
if (!sockaddr_alloc(&hc->dst, ocsp_update_dst, sizeof(*ocsp_update_dst))) { if (!sockaddr_alloc(&hc->dst, ocsp_update_dst, sizeof(*ocsp_update_dst))) {
ha_alert("ocsp-update: Failed to allocate sockaddr in %s:%d.\n", __FUNCTION__, __LINE__); ha_alert("ocsp-update: Failed to allocate sockaddr in %s:%d.\n", __FUNCTION__, __LINE__);
goto leave; goto leave;