diff --git a/include/proto/log.h b/include/proto/log.h index 2d4ca84f1..72ff744fb 100644 --- a/include/proto/log.h +++ b/include/proto/log.h @@ -53,6 +53,11 @@ extern char *logline_rfc5424; */ void init_log(); + +/* Initialize/Deinitialize log buffers used for syslog messages */ +int init_log_buffers(); +void deinit_log_buffers(); + /* * Builds a log line. */ diff --git a/src/cfgparse.c b/src/cfgparse.c index c2115e6a2..d49156056 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -1420,10 +1420,11 @@ int cfg_parse_global(const char *file, int linenum, char **args, int kwm) if (logsrv->maxlen > global.max_syslog_len) { global.max_syslog_len = logsrv->maxlen; - logheader = my_realloc2(logheader, global.max_syslog_len + 1); - logheader_rfc5424 = my_realloc2(logheader_rfc5424, global.max_syslog_len + 1); - logline = my_realloc2(logline, global.max_syslog_len + 1); - logline_rfc5424 = my_realloc2(logline_rfc5424, global.max_syslog_len + 1); + if (!init_log_buffers()) { + Alert("parsing [%s:%d] : failed to initialize log buffers.\n", file, linenum); + err_code |= ERR_ALERT | ERR_FATAL; + goto out; + } } /* after the length, a format may be specified */ @@ -6082,10 +6083,11 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm) if (logsrv->maxlen > global.max_syslog_len) { global.max_syslog_len = logsrv->maxlen; - logheader = my_realloc2(logheader, global.max_syslog_len + 1); - logheader_rfc5424 = my_realloc2(logheader_rfc5424, global.max_syslog_len + 1); - logline = my_realloc2(logline, global.max_syslog_len + 1); - logline_rfc5424 = my_realloc2(logline_rfc5424, global.max_syslog_len + 1); + if (!init_log_buffers()) { + Alert("parsing [%s:%d] : failed to initialize log buffers.\n", file, linenum); + err_code |= ERR_ALERT | ERR_FATAL; + goto out; + } } /* after the length, a format may be specified */ diff --git a/src/haproxy.c b/src/haproxy.c index efc4da552..7c925eaea 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -2107,6 +2107,7 @@ void deinit(void) cfg_unregister_sections(); + deinit_log_buffers(); deinit_trash_buffers(); protocol_unbind_all(); diff --git a/src/log.c b/src/log.c index e9a8a7d7c..5c42f6b2a 100644 --- a/src/log.c +++ b/src/log.c @@ -1322,6 +1322,31 @@ void init_log() } } +/* Initialize log buffers used for syslog messages */ +int init_log_buffers() +{ + logheader = my_realloc2(logheader, global.max_syslog_len + 1); + logheader_rfc5424 = my_realloc2(logheader_rfc5424, global.max_syslog_len + 1); + logline = my_realloc2(logline, global.max_syslog_len + 1); + logline_rfc5424 = my_realloc2(logline_rfc5424, global.max_syslog_len + 1); + if (!logheader || !logline_rfc5424 || !logline || !logline_rfc5424) + return 0; + return 1; +} + +/* Deinitialize log buffers used for syslog messages */ +void deinit_log_buffers() +{ + free(logheader); + free(logheader_rfc5424); + free(logline); + free(logline_rfc5424); + logheader = NULL; + logheader_rfc5424 = NULL; + logline = NULL; + logline_rfc5424 = NULL; +} + /* Builds a log line in based on , and stops before reaching * characters. Returns the size of the output string in characters, * not counting the trailing zero which is always added if the resulting size