summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Whitley2001-03-27 20:17:58 +0000
committerMark Whitley2001-03-27 20:17:58 +0000
commitbff6b18bf9056793caa80db7cd664b514068f7ee (patch)
treeb87b6daf4d03359c488d6a094bcce187080ebc99
parent2b549c3be0cadb5617dc1bb2984cb26c0e085147 (diff)
downloadbusybox-bff6b18bf9056793caa80db7cd664b514068f7ee.zip
busybox-bff6b18bf9056793caa80db7cd664b514068f7ee.tar.gz
Applied patch from Gennady Feldman to fix a single-threaded syslogd bug that
turned up. This code needs to be tested on an embedded system, since that's where the bug turned up in the first place.
-rw-r--r--sysklogd/syslogd.c19
-rw-r--r--syslogd.c19
2 files changed, 22 insertions, 16 deletions
diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c
index e5ddd3b..cc42c29 100644
--- a/sysklogd/syslogd.c
+++ b/sysklogd/syslogd.c
@@ -393,7 +393,9 @@ static int serveConnection (int conn)
RESERVE_BB_BUFFER(tmpbuf, BUFSIZE + 1);
int n_read;
- while ((n_read = read (conn, tmpbuf, BUFSIZE )) > 0) {
+ n_read = read (conn, tmpbuf, BUFSIZE );
+
+ if (n_read > 0) {
int pri = (LOG_USER | LOG_NOTICE);
char line[ BUFSIZE + 1 ];
@@ -427,7 +429,7 @@ static int serveConnection (int conn)
/* Now log it */
logMessage (pri, line);
}
- return (0);
+ return n_read;
}
@@ -439,7 +441,7 @@ static void init_RemoteLog (void){
int len = sizeof(remoteaddr);
bzero(&remoteaddr, len);
-
+
remotefd = socket(AF_INET, SOCK_DGRAM, 0);
if (remotefd < 0) {
@@ -548,11 +550,12 @@ static void doSyslogd (void)
FD_SET(conn, &fds);
//printf("conn: %i, set_size: %i\n",conn,FD_SETSIZE);
- } else {
+ } else {
//printf("Serving connection: %i\n",fd);
- serveConnection (fd);
- close (fd);
- FD_CLR(fd, &fds);
+ if ( serveConnection(fd) <= 0 ) {
+ close (fd);
+ FD_CLR(fd, &fds);
+ }
} /* fd == sock_fd */
}/* FD_ISSET() */
}/* for */
@@ -593,7 +596,7 @@ extern int syslogd_main(int argc, char **argv)
if ( (p = strchr(RemoteHost, ':'))){
RemotePort = atoi(p+1);
*p = '\0';
- }
+ }
doRemoteLog = TRUE;
break;
case 'L':
diff --git a/syslogd.c b/syslogd.c
index e5ddd3b..cc42c29 100644
--- a/syslogd.c
+++ b/syslogd.c
@@ -393,7 +393,9 @@ static int serveConnection (int conn)
RESERVE_BB_BUFFER(tmpbuf, BUFSIZE + 1);
int n_read;
- while ((n_read = read (conn, tmpbuf, BUFSIZE )) > 0) {
+ n_read = read (conn, tmpbuf, BUFSIZE );
+
+ if (n_read > 0) {
int pri = (LOG_USER | LOG_NOTICE);
char line[ BUFSIZE + 1 ];
@@ -427,7 +429,7 @@ static int serveConnection (int conn)
/* Now log it */
logMessage (pri, line);
}
- return (0);
+ return n_read;
}
@@ -439,7 +441,7 @@ static void init_RemoteLog (void){
int len = sizeof(remoteaddr);
bzero(&remoteaddr, len);
-
+
remotefd = socket(AF_INET, SOCK_DGRAM, 0);
if (remotefd < 0) {
@@ -548,11 +550,12 @@ static void doSyslogd (void)
FD_SET(conn, &fds);
//printf("conn: %i, set_size: %i\n",conn,FD_SETSIZE);
- } else {
+ } else {
//printf("Serving connection: %i\n",fd);
- serveConnection (fd);
- close (fd);
- FD_CLR(fd, &fds);
+ if ( serveConnection(fd) <= 0 ) {
+ close (fd);
+ FD_CLR(fd, &fds);
+ }
} /* fd == sock_fd */
}/* FD_ISSET() */
}/* for */
@@ -593,7 +596,7 @@ extern int syslogd_main(int argc, char **argv)
if ( (p = strchr(RemoteHost, ':'))){
RemotePort = atoi(p+1);
*p = '\0';
- }
+ }
doRemoteLog = TRUE;
break;
case 'L':