asterisk: add logger patch

Add a patch from Philip that got upstreamed. This is in reference to
issue #737.

Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
This commit is contained in:
Sebastian Kemper 2022-04-15 17:17:07 +02:00
parent c1cb4fd1a4
commit 23925c22f8

View file

@ -0,0 +1,76 @@
From 140c19c2067a5e2dcedfbb4dfa08c57758b822cb Mon Sep 17 00:00:00 2001
From: Philip Prindeville <philipp@redfish-solutions.com>
Date: Mon, 21 Feb 2022 18:05:49 -0700
Subject: [PATCH] logger: workaround woefully small BUFSIZ in MUSL
MUSL defines BUFSIZ as 1024 which is not reasonable for log messages.
More broadly, BUFSIZ is the amount of buffering stdio.h does, which
is arbitrary and largely orthogonal to what logging should accept
as the maximum message size.
ASTERISK-29928
Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
Change-Id: Iaa49fbbab029c64ae3d95e4b18270e0442cce170
---
main/logger.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
--- a/main/logger.c
+++ b/main/logger.c
@@ -97,6 +97,11 @@ static int logger_queue_limit = 1000;
static int logger_messages_discarded;
static unsigned int high_water_alert;
+/* On some platforms, like those with MUSL as the runtime, BUFSIZ is
+ * unreasonably small (1024). Use a larger value in those environments.
+ */
+#define LOGMSG_SIZE MAX(BUFSIZ, 8192)
+
static enum rotatestrategy {
NONE = 0, /* Do not rotate log files at all, instead rely on external mechanisms */
SEQUENTIAL = 1 << 0, /* Original method - create a new file, in order */
@@ -1665,7 +1670,7 @@ static struct sigaction handle_SIGXFSZ =
static void logger_print_normal(struct logmsg *logmsg)
{
struct logchannel *chan = NULL;
- char buf[BUFSIZ];
+ char buf[LOGMSG_SIZE];
int level = 0;
AST_RWLIST_RDLOCK(&logchannels);
@@ -1698,13 +1703,13 @@ static void logger_print_normal(struct l
/* Don't use LOG_MAKEPRI because it's broken in glibc<2.17 */
syslog_level = chan->facility | syslog_level; /* LOG_MAKEPRI(chan->facility, syslog_level); */
- if (!chan->formatter.format_log(chan, logmsg, buf, BUFSIZ)) {
+ if (!chan->formatter.format_log(chan, logmsg, buf, sizeof(buf))) {
syslog(syslog_level, "%s", buf);
}
}
break;
case LOGTYPE_CONSOLE:
- if (!chan->formatter.format_log(chan, logmsg, buf, BUFSIZ)) {
+ if (!chan->formatter.format_log(chan, logmsg, buf, sizeof(buf))) {
ast_console_puts_mutable_full(buf, logmsg->level, logmsg->sublevel);
}
break;
@@ -1716,7 +1721,7 @@ static void logger_print_normal(struct l
continue;
}
- if (chan->formatter.format_log(chan, logmsg, buf, BUFSIZ)) {
+ if (chan->formatter.format_log(chan, logmsg, buf, sizeof(buf))) {
continue;
}
@@ -1780,7 +1785,7 @@ static struct logmsg * __attribute__((fo
}
/* Build string */
- res = ast_str_set_va(&buf, BUFSIZ, fmt, ap);
+ res = ast_str_set_va(&buf, LOGMSG_SIZE, fmt, ap);
/* If the build failed, then abort and free this structure */
if (res == AST_DYNSTR_BUILD_FAILED) {