git: 881059955a5d - main - libc: Some enhancements to syslog(3)
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 31 Dec 2021 18:09:19 UTC
The branch main has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=881059955a5d83fc173f40f266d93ddd91255291
commit 881059955a5d83fc173f40f266d93ddd91255291
Author: Dmitry Wagin <dmitry.wagin@ya.ru>
AuthorDate: 2021-03-23 16:01:15 +0000
Commit: Mark Johnston <markj@FreeBSD.org>
CommitDate: 2021-12-31 17:57:01 +0000
libc: Some enhancements to syslog(3)
This is a re-application of commit
2d82b47a5b4ef18550565dd55628d51f54d0af2e, which was reverted since it
broke with syslog daemons that don't adjust the /dev/log recv buffer
size. Now that the default is large enough to accomodate 8KB messages,
restore support for large messages.
PR: 260126
---
lib/libc/gen/syslog.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/lib/libc/gen/syslog.c b/lib/libc/gen/syslog.c
index 19d44db0075a..797c7389d1a2 100644
--- a/lib/libc/gen/syslog.c
+++ b/lib/libc/gen/syslog.c
@@ -57,6 +57,9 @@ __FBSDID("$FreeBSD$");
#include "libc_private.h"
+/* Maximum number of characters of syslog message */
+#define MAXLINE 8192
+
static int LogFile = -1; /* fd for log */
static int status; /* connection status */
static int opened; /* have done openlog() */
@@ -141,7 +144,7 @@ vsyslog1(int pri, const char *fmt, va_list ap)
char ch, *p;
long tz_offset;
int cnt, fd, saved_errno;
- char hostname[MAXHOSTNAMELEN], *stdp, tbuf[2048], fmt_cpy[1024],
+ char hostname[MAXHOSTNAMELEN], *stdp, tbuf[MAXLINE], fmt_cpy[MAXLINE],
errstr[64], tz_sign;
FILE *fp, *fmt_fp;
struct bufcookie tbuf_cookie;
@@ -396,9 +399,19 @@ connectlog(void)
struct sockaddr_un SyslogAddr; /* AF_UNIX address of local logger */
if (LogFile == -1) {
+ socklen_t len;
+
if ((LogFile = _socket(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC,
0)) == -1)
return;
+ if (_getsockopt(LogFile, SOL_SOCKET, SO_SNDBUF, &len,
+ &(socklen_t){sizeof(len)}) == 0) {
+ if (len < MAXLINE) {
+ len = MAXLINE;
+ (void)_setsockopt(LogFile, SOL_SOCKET, SO_SNDBUF,
+ &len, sizeof(len));
+ }
+ }
}
if (LogFile != -1 && status == NOCONN) {
SyslogAddr.sun_len = sizeof(SyslogAddr);