The `header_unique_id` member of `struct proxy` now is a `struct ist`.
---
include/types/proxy.h | 2 +-
src/cfgparse-listen.c | 23 +++++++++++++++++++----
src/http_ana.c | 5 ++---
3 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/include/types/proxy.h b/include/types/proxy.h
index f3b0e6bef..b64d448af 100644
--- a/include/types/proxy.h
+++ b/include/types/proxy.h
@@ -405,7 +405,7 @@ struct proxy {
struct list logformat; /* log_format linked list */
struct list logformat_sd; /* log_format linked list for
the RFC5424 structured-data part */
struct buffer log_tag; /* override default syslog tag
*/
- char *header_unique_id; /* unique-id header */
+ struct ist header_unique_id; /* unique-id header */
struct list format_unique_id; /* unique-id format */
int to_log; /* things to be logged (LW_*) */
int stop_time; /* date to stop listening, when
stopping != 0 (int ticks) */
diff --git a/src/cfgparse-listen.c b/src/cfgparse-listen.c
index bd2275238..8f1d7ef63 100644
--- a/src/cfgparse-listen.c
+++ b/src/cfgparse-listen.c
@@ -429,8 +429,15 @@ int cfg_parse_listen(const char *file, int linenum, char
**args, int kwm)
}
/* copy default header unique id */
- if (defproxy.header_unique_id)
- curproxy->header_unique_id =
strdup(defproxy.header_unique_id);
+ if (defproxy.header_unique_id.ptr) {
+ const struct ist copy =
istdup(defproxy.header_unique_id);
+ if (copy.ptr == NULL) {
+ ha_alert("parsing [%s:%d] : failed to allocate
memory for unique-id-header\n", file, linenum);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
+ }
+ curproxy->header_unique_id = copy;
+ }
/* default compression options */
if (defproxy.comp != NULL) {
@@ -3484,13 +3491,21 @@ stats_error_parsing:
}
else if (strcmp(args[0], "unique-id-header") == 0) {
+ char *copy;
if (!*(args[1])) {
ha_alert("parsing [%s:%d] : %s expects an argument.\n",
file, linenum, args[0]);
err_code |= ERR_ALERT | ERR_FATAL;
goto out;
}
- free(curproxy->header_unique_id);
- curproxy->header_unique_id = strdup(args[1]);
+ copy = strdup(args[1]);
+ if (copy == NULL) {
+ ha_alert("parsing [%s:%d] : failed to allocate memory
for unique-id-header\n", file, linenum);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
+ }
+
+ free(curproxy->header_unique_id.ptr);
+ curproxy->header_unique_id = ist(copy);
}
else if (strcmp(args[0], "log-format") == 0) {
diff --git a/src/http_ana.c b/src/http_ana.c
index 094208d63..549d61090 100644
--- a/src/http_ana.c
+++ b/src/http_ana.c
@@ -802,12 +802,11 @@ int http_process_request(struct stream *s, struct channel
*req, int an_bit)
}
/* send unique ID if a "unique-id-header" is defined */
- if (sess->fe->header_unique_id) {
+ if (sess->fe->header_unique_id.ptr) {
struct ist n, v;
- n = ist2(sess->fe->header_unique_id,
strlen(sess->fe->header_unique_id));
v = ist2(s->unique_id, length);
- if (unlikely(!http_add_header(htx, n, v)))
+ if (unlikely(!http_add_header(htx,
sess->fe->header_unique_id, v)))
goto return_int_err;
}
}
--
2.25.1