aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/gen/syslog.c15
1 files changed, 14 insertions, 1 deletions
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);