Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 31 Dec 2021 18:09:19 GMT
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 881059955a5d - main - libc: Some enhancements to syslog(3)
Message-ID:  <202112311809.1BVI9Jjt035153@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202112311809.1BVI9Jjt035153>