1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-10-19 02:29:40 +00:00

libc: Some enhancements to syslog(3)

This is a re-application of commit
2d82b47a5b, 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
This commit is contained in:
Dmitry Wagin 2021-03-23 12:01:15 -04:00 committed by Mark Johnston
parent 963f5dc7a3
commit 881059955a

View File

@ -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);