diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2005-10-10 06:58:35 +0000 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2005-10-10 06:58:35 +0000 |
commit | 41cb6dd1b967debb984761a69921e2adbadeb1ed (patch) | |
tree | 84d5c8729056eaa1c8892c4a1797e54a9439cda9 /syslogd.c | |
parent | 3aea4c6fcc6a4fc2e15a687b8aff35ae3d6b96d6 (diff) | |
download | rsyslog-41cb6dd1b967debb984761a69921e2adbadeb1ed.tar.gz rsyslog-41cb6dd1b967debb984761a69921e2adbadeb1ed.tar.xz rsyslog-41cb6dd1b967debb984761a69921e2adbadeb1ed.zip |
additional hardening for file gt 2gb; fixed a bug in unix domain socket
processing
Diffstat (limited to 'syslogd.c')
-rw-r--r-- | syslogd.c | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -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 |