From 41cb6dd1b967debb984761a69921e2adbadeb1ed Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Mon, 10 Oct 2005 06:58:35 +0000 Subject: additional hardening for file gt 2gb; fixed a bug in unix domain socket processing --- syslogd.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'syslogd.c') diff --git a/syslogd.c b/syslogd.c index 27bee376..02fb021e 100644 --- a/syslogd.c +++ b/syslogd.c @@ -2403,6 +2403,7 @@ int main(argc, argv) (void) signal(SIGALRM, domark); (void) signal(SIGUSR1, Debug ? debug_switch : SIG_IGN); (void) signal(SIGPIPE, SIG_IGN); + (void) signal(SIGXFSZ, SIG_IGN); /* do not abort if 2gig file limit is hit */ (void) alarm(TIMERINTVL); /* Create a partial message table for all file descriptors. */ @@ -2604,19 +2605,20 @@ int main(argc, argv) #ifdef SYSLOG_UNIXAF for (i = 0; i < nfunix; i++) { if ((fd = funix[i]) != -1 && FD_ISSET(fd, &readfds)) { + int iRcvd; memset(line, '\0', sizeof(line)); - i = recv(fd, line, MAXLINE - 2, 0); + iRcvd = recv(fd, line, MAXLINE - 2, 0); dprintf("Message from UNIX socket: #%d\n", fd); - if (i > 0) { - line[i] = line[i+1] = '\0'; - printchopped(LocalHostName, line, i + 2, fd, SOURCE_UNIXAF); - } else if (i < 0 && errno != EINTR) { + if (iRcvd > 0) { + line[iRcvd] = line[iRcvd+1] = '\0'; + printchopped(LocalHostName, line, iRcvd + 2, fd, SOURCE_UNIXAF); + } else if (iRcvd < 0 && errno != EINTR) { dprintf("UNIX socket error: %d = %s.\n", \ errno, strerror(errno)); logerror("recvfrom UNIX"); - } } - } + } + } #endif #ifdef SYSLOG_INET -- cgit