Module Name: src Committed By: roy Date: Sun Nov 4 20:23:08 UTC 2018
Modified Files: src/usr.sbin/syslogd: syslogd.8 syslogd.c Log Message: syslogd: allow the receiving buffer size to be set. This allows the admin to try and avoid buffer overflow when a log of logging appears in bursts. To generate a diff of this commit: cvs rdiff -u -r1.55 -r1.56 src/usr.sbin/syslogd/syslogd.8 cvs rdiff -u -r1.125 -r1.126 src/usr.sbin/syslogd/syslogd.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/syslogd/syslogd.8 diff -u src/usr.sbin/syslogd/syslogd.8:1.55 src/usr.sbin/syslogd/syslogd.8:1.56 --- src/usr.sbin/syslogd/syslogd.8:1.55 Mon Jul 3 21:35:32 2017 +++ src/usr.sbin/syslogd/syslogd.8 Sun Nov 4 20:23:08 2018 @@ -1,4 +1,4 @@ -.\" $NetBSD: syslogd.8,v 1.55 2017/07/03 21:35:32 wiz Exp $ +.\" $NetBSD: syslogd.8,v 1.56 2018/11/04 20:23:08 roy Exp $ .\" .\" Copyright (c) 1983, 1986, 1991, 1993 .\" The Regents of the University of California. All rights reserved. @@ -29,7 +29,7 @@ .\" .\" from: @(#)syslogd.8 8.1 (Berkeley) 6/6/93 .\" -.Dd March 28, 2012 +.Dd November 4, 2018 .Dt SYSLOGD 8 .Os .Sh NAME @@ -39,6 +39,7 @@ .Nm .Op Fl dnrSsTUv .Op Fl b Ar bind_address +.Op Fl B Ar buffer_length .Op Fl f Ar config_file .Op Fl g Ar group .Op Fl m Ar mark_interval @@ -60,6 +61,10 @@ The options are as follows: Specify one specific IP address or hostname to bind to. If a hostname is specified, the IPv4 or IPv6 address which corresponds to it is used. +.It Fl B Ar buffer_length +Sets the receiving buffer length. +The default is 16384 bytes. +If syslogd reports buffer overflow, this needs increasing. .It Fl d Enable debugging to the standard output, and do not disassociate from the controlling terminal. Index: src/usr.sbin/syslogd/syslogd.c diff -u src/usr.sbin/syslogd/syslogd.c:1.125 src/usr.sbin/syslogd/syslogd.c:1.126 --- src/usr.sbin/syslogd/syslogd.c:1.125 Sun May 6 19:16:36 2018 +++ src/usr.sbin/syslogd/syslogd.c Sun Nov 4 20:23:08 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: syslogd.c,v 1.125 2018/05/06 19:16:36 christos Exp $ */ +/* $NetBSD: syslogd.c,v 1.126 2018/11/04 20:23:08 roy Exp $ */ /* * Copyright (c) 1983, 1988, 1993, 1994 @@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1983, 19 #if 0 static char sccsid[] = "@(#)syslogd.c 8.3 (Berkeley) 4/4/94"; #else -__RCSID("$NetBSD: syslogd.c,v 1.125 2018/05/06 19:16:36 christos Exp $"); +__RCSID("$NetBSD: syslogd.c,v 1.126 2018/11/04 20:23:08 roy Exp $"); #endif #endif /* not lint */ @@ -114,6 +114,7 @@ typedef struct deadq_entry { #define DQ_TIMO_INIT 2 #define RCVBUFLEN 16384 +int buflen = RCVBUFLEN; /* * Intervals at which we flush out "message repeated" messages, * in seconds after previous message is logged. After each flush, @@ -315,11 +316,16 @@ main(int argc, char *argv[]) /* should we set LC_TIME="C" to ensure correct timestamps&parsing? */ (void)setlocale(LC_ALL, ""); - while ((ch = getopt(argc, argv, "b:dnsSf:m:o:p:P:ru:g:t:TUv")) != -1) + while ((ch = getopt(argc, argv, "b:B:dnsSf:m:o:p:P:ru:g:t:TUv")) != -1) switch(ch) { case 'b': bindhostname = optarg; break; + case 'B': + buflen = atoi(optarg); + if (buflen < RCVBUFLEN) + buflen = RCVBUFLEN; + break; case 'd': /* debug */ Debug = D_DEFAULT; /* is there a way to read the integer value @@ -657,7 +663,8 @@ usage(void) { (void)fprintf(stderr, - "usage: %s [-dnrSsTUv] [-b bind_address] [-f config_file] [-g group]\n" + "usage: %s [-dnrSsTUv] [-b bind_address] [-B buffer_length]\n" + "\t[-f config_file] [-g group]\n" "\t[-m mark_interval] [-P file_list] [-p log_socket\n" "\t[-p log_socket2 ...]] [-t chroot_dir] [-u user]\n", getprogname()); @@ -667,15 +674,15 @@ usage(void) static void setsockbuf(int fd, const char *name) { - int buflen; + int curbuflen; socklen_t socklen = sizeof(buflen); - if (getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &buflen, &socklen) == -1) { + + if (getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &curbuflen, &socklen) == -1) { logerror("getsockopt: SO_RCVBUF: `%s'", name); return; } - if (buflen >= RCVBUFLEN) + if (curbuflen >= buflen) return; - buflen = RCVBUFLEN; if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &buflen, socklen) == -1) { logerror("setsockopt: SO_RCVBUF: `%s'", name); return;