The orgto_hdr_name is already processed as an ist in `http_process_request`,
lets also just store it as such.

see 0643b0e7e ("MINOR: proxy: Make `header_unique_id` a `struct ist`") for a
very similar past commit.
---
 include/haproxy/proxy-t.h |  3 +--
 src/cfgparse-listen.c     | 14 ++++++--------
 src/http_ana.c            |  3 +--
 src/proxy.c               |  8 +++-----
 4 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/include/haproxy/proxy-t.h b/include/haproxy/proxy-t.h
index 8277c098e..805e1b452 100644
--- a/include/haproxy/proxy-t.h
+++ b/include/haproxy/proxy-t.h
@@ -353,8 +353,7 @@ struct proxy {
        struct net_addr except_xff_net;         /* don't x-forward-for for this 
address. */
        struct net_addr except_xot_net;         /* don't x-original-to for this 
address. */
        struct ist fwdfor_hdr_name;                     /* header to use - 
default: "x-forwarded-for" */
-       char *orgto_hdr_name;                   /* header to use - default: 
"x-original-to" */
-       int orgto_hdr_len;                      /* length of "x-original-to" 
header */
+       struct ist orgto_hdr_name;                      /* header to use - 
default: "x-original-to" */
        char *server_id_hdr_name;                   /* the header to use to 
send the server id (name) */
        int server_id_hdr_len;                      /* the length of the id 
(name) header... name */
        int conn_retries;                       /* maximum number of connect 
retries */
diff --git a/src/cfgparse-listen.c b/src/cfgparse-listen.c
index d858c3446..121f1deac 100644
--- a/src/cfgparse-listen.c
+++ b/src/cfgparse-listen.c
@@ -2399,11 +2399,10 @@ int cfg_parse_listen(const char *file, int linenum, 
char **args, int kwm)
 
                        curproxy->options |= PR_O_ORGTO;
 
-                       free(curproxy->orgto_hdr_name);
-                       curproxy->orgto_hdr_name = strdup(DEF_XORIGINALTO_HDR);
-                       if (!curproxy->orgto_hdr_name)
+                       istfree(&curproxy->orgto_hdr_name);
+                       curproxy->orgto_hdr_name = 
istdup(ist(DEF_XORIGINALTO_HDR));
+                       if (!isttest(curproxy->orgto_hdr_name))
                                goto alloc_error;
-                       curproxy->orgto_hdr_len  = strlen(DEF_XORIGINALTO_HDR);
                        curproxy->except_xot_net.family = AF_UNSPEC;
 
                        /* loop to go through arguments - start at 2, since 0+1 
= "option" "originalto" */
@@ -2441,11 +2440,10 @@ int cfg_parse_listen(const char *file, int linenum, 
char **args, int kwm)
                                                err_code |= ERR_ALERT | 
ERR_FATAL;
                                                goto out;
                                        }
-                                       free(curproxy->orgto_hdr_name);
-                                       curproxy->orgto_hdr_name = 
strdup(args[cur_arg+1]);
-                                       if (!curproxy->orgto_hdr_name)
+                                       istfree(&curproxy->orgto_hdr_name);
+                                       curproxy->orgto_hdr_name = 
istdup(ist(args[cur_arg+1]));
+                                       if (!isttest(curproxy->orgto_hdr_name))
                                                goto alloc_error;
-                                       curproxy->orgto_hdr_len  = 
strlen(curproxy->orgto_hdr_name);
                                        cur_arg += 2;
                                } else {
                                        /* unknown suboption - catchall */
diff --git a/src/http_ana.c b/src/http_ana.c
index f02b8446b..83711482f 100644
--- a/src/http_ana.c
+++ b/src/http_ana.c
@@ -711,8 +711,7 @@ int http_process_request(struct stream *s, struct channel 
*req, int an_bit)
         */
        if ((sess->fe->options | s->be->options) & PR_O_ORGTO) {
                const struct sockaddr_storage *dst = si_dst(cs_si(s->csf));
-               struct ist hdr = ist2(s->be->orgto_hdr_len ? 
s->be->orgto_hdr_name : sess->fe->orgto_hdr_name,
-                                     s->be->orgto_hdr_len ? 
s->be->orgto_hdr_len  : sess->fe->orgto_hdr_len);
+               struct ist hdr = isttest(s->be->orgto_hdr_name) ? 
s->be->orgto_hdr_name : sess->fe->orgto_hdr_name;
 
                if (dst && dst->ss_family == AF_INET) {
                        /* Add an X-Original-To header unless the destination 
IP is
diff --git a/src/proxy.c b/src/proxy.c
index 53ca5db29..f051768ac 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -1436,7 +1436,7 @@ void proxy_free_defaults(struct proxy *defproxy)
        ha_free(&defproxy->defbe.name);
        ha_free(&defproxy->conn_src.iface_name);
        istfree(&defproxy->fwdfor_hdr_name);
-       ha_free(&defproxy->orgto_hdr_name); defproxy->orgto_hdr_len = 0;
+       istfree(&defproxy->orgto_hdr_name);
        ha_free(&defproxy->server_id_hdr_name); defproxy->server_id_hdr_len = 0;
 
        list_for_each_entry_safe(acl, aclb, &defproxy->acl, list) {
@@ -1600,10 +1600,8 @@ static int proxy_defproxy_cpy(struct proxy *curproxy, 
const struct proxy *defpro
        if (isttest(defproxy->fwdfor_hdr_name))
                curproxy->fwdfor_hdr_name = istdup(defproxy->fwdfor_hdr_name);
 
-       if (defproxy->orgto_hdr_len) {
-               curproxy->orgto_hdr_len  = defproxy->orgto_hdr_len;
-               curproxy->orgto_hdr_name = strdup(defproxy->orgto_hdr_name);
-       }
+       if (isttest(defproxy->orgto_hdr_name))
+               curproxy->orgto_hdr_name = istdup(defproxy->orgto_hdr_name);
 
        if (defproxy->server_id_hdr_len) {
                curproxy->server_id_hdr_len  = defproxy->server_id_hdr_len;
-- 
2.35.1


Reply via email to