Date: Sat, 26 Oct 2002 22:46:46 +0800 From: Eugene Grosbein <eugen@grosbein.pp.ru> To: freebsd-stable@FreeBSD.ORG Subject: Re: increasing MAXLINE for syslog Message-ID: <20021026224646.A362@grosbein.pp.ru> In-Reply-To: <200210261120.g9QBKOXL025814@lurza.secnetix.de>; from olli@secnetix.de on Sat, Oct 26, 2002 at 01:20:24PM %2B0200 References: <3DBA4189.2629E3DC@grosbein.pp.ru> <200210261120.g9QBKOXL025814@lurza.secnetix.de>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Oct 26, 2002 at 01:20:24PM +0200, Oliver Fromme wrote:
> > > > I've rebuilt and reinstalled libc, syslogd and logger using 10Kb as limit,
^^^^
> > > > then killed and restarted syslogd. logger still cannot log a message
> > > > longer than 1Kb. What else should be done?
> > > Did you also resize the 1K buffer in logger.c?
> > Yes, I did.
>
> Did you inrease the sizes of fmt_cpy[] _and_ tbuf[]
> in src/lib/libc/gen/syslog.c:vsyslog() accordingly?
Yes, I did that too. I see it's time to show my patches.
Against libc:
--- Makefile.inc.orig Sun Sep 15 08:30:45 2002
+++ Makefile.inc Fri Oct 25 22:14:47 2002
@@ -4,6 +4,10 @@
# machine-independent gen sources
.PATH: ${.CURDIR}/../libc/${MACHINE_ARCH}/gen ${.CURDIR}/../libc/gen
+.if defined(SYSLOG_MAXLINE)
+CFLAGS+=-DMAXLINE=${SYSLOG_MAXLINE}
+.endif
+
SRCS+= _rand48.c _spinlock_stub.c alarm.c arc4random.c assert.c \
basename.c \
clock.c closedir.c confstr.c \
--- syslog.c.orig Thu Apr 11 05:35:50 2002
+++ syslog.c Fri Oct 25 22:15:46 2002
@@ -131,6 +131,10 @@
va_end(ap);
}
+#ifndef MAXLINE
+#define MAXLINE 2048
+#endif
+
void
vsyslog(pri, fmt, ap)
int pri;
@@ -141,7 +145,7 @@
register char ch, *p;
time_t now;
int fd, saved_errno;
- char *stdp, tbuf[2048], fmt_cpy[1024], timbuf[26];
+ char *stdp, tbuf[MAXLINE], fmt_cpy[MAXLINE], timbuf[26];
FILE *fp, *fmt_fp;
struct bufcookie tbuf_cookie;
struct bufcookie fmt_cookie;
Against syslogd:
--- Makefile.orig Fri Oct 25 22:07:27 2002
+++ Makefile Fri Oct 25 22:08:16 2002
@@ -10,4 +10,8 @@
CFLAGS+=-DINET6 -I${.CURDIR}/../../usr.bin/wall
WARNS?= 1
+.if defined(SYSLOG_MAXLINE)
+CFLAGS+=-DMAXLINE=${SYSLOG_MAXLINE}
+.endif
+
.include <bsd.prog.mk>
--- syslogd.c.orig Fri Oct 25 22:07:19 2002
+++ syslogd.c Fri Oct 25 22:08:38 2002
@@ -71,7 +71,10 @@
* Priority comparison code by Harlan Stenn.
*/
+#ifndef MAXLINE
#define MAXLINE 1024 /* maximum line length */
+#endif
+
#define MAXSVLINE 120 /* maximum saved line length */
#define DEFUPRI (LOG_USER|LOG_NOTICE)
#define DEFSPRI (LOG_KERN|LOG_CRIT)
And against logger:
--- Makefile.orig Sat Oct 26 11:23:32 2002
+++ Makefile Sat Oct 26 11:24:11 2002
@@ -4,4 +4,8 @@
PROG= logger
CFLAGS+=-DINET6
+.ifdef SYSLOG_MAXLINE
+CFLAGS+=-DMAXLINE=${SYSLOG_MAXLINE}
+.endif
+
.include <bsd.prog.mk>
--- logger.c.orig Sat Oct 26 11:20:58 2002
+++ logger.c Sat Oct 26 11:22:10 2002
@@ -78,6 +78,9 @@
#endif
int send_to_all = 0; /* send message to all IPv4/IPv6 addresses */
+#ifndef MAXLINE
+#define MAXLINE 1024
+#endif
/*
* logger -- read and log utility
*
@@ -90,7 +93,7 @@
char *argv[];
{
int ch, logflags, pri;
- char *tag, *host, buf[1024];
+ char *tag, *host, buf[MAXLINE];
tag = NULL;
host = NULL;
I've put SYSLOG_MAXLINE=10240 into my /etc/make.conf and saw -DMAXLINE=10240
was here while rebuilding libc, syslogd and logger. I still cannot get
more than 1K written to the log. Here is my test script:
#!/bin/sh
#
# write line of dashes, length is passed as $1
#
perl -e "print '-' x $1;" | logger -t logger
#
# See what's written actually
sed -E -e '/logger:/!d' -e 's/^.*logger: -(.*)$/\1/' /var/log/messages | \
tail -1
#EOF
I run ./test.sh number | wc -c to see. It shows it can write upto 996 dashes,
with date and prefix it gives upto 1Kb. No more. What's a trick?
Eugene Grosbein
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021026224646.A362>
