Selaa lähdekoodia

busybox: Fixed remote logging bug in which starting syslog before the network (and hence the remote host being available) results in failure to do any remote logging

SVN-Revision: 21961
Daniel Dickinson 15 vuotta sitten
vanhempi
sitoutus
b86c99feb1
1 muutettua tiedostoa jossa 40 lisäystä ja 0 poistoa
  1. 40 0
      package/busybox/patches/610-syslog-remote-retry-connection.patch

+ 40 - 0
package/busybox/patches/610-syslog-remote-retry-connection.patch

@@ -0,0 +1,40 @@
+Index: busybox-1.16.1/sysklogd/syslogd.c
+===================================================================
+--- busybox-1.16.1.orig/sysklogd/syslogd.c	2010-03-28 13:44:04.000000000 -0400
++++ busybox-1.16.1/sysklogd/syslogd.c	2010-06-17 21:48:11.000000000 -0400
+@@ -555,6 +555,7 @@
+ static void do_syslogd(void)
+ {
+ 	int sock_fd;
++	int send_err = 0;
+ #if ENABLE_FEATURE_SYSLOGD_DUP
+ 	int last_sz = -1;
+ 	char *last_buf;
+@@ -632,10 +633,23 @@
+ 			 * over network, mimic that */
+ 			recvbuf[sz] = '\n';
+ 			/* send message to remote logger, ignore possible error */
+-			/* TODO: on some errors, close and set G.remoteFD to -1
+-			 * so that DNS resolution and connect is retried? */
+-			sendto(G.remoteFD, recvbuf, sz+1, MSG_DONTWAIT,
+-				    &G.remoteAddr->u.sa, G.remoteAddr->len);
++			if ( sendto(G.remoteFD, recvbuf, sz+1, MSG_DONTWAIT,
++				    &G.remoteAddr->u.sa, G.remoteAddr->len)  == -1 ) {
++				send_err = errno;
++		    }
++
++			/* On some errors, close and set G.remoteFD to -1
++			 * so that DNS resolution and connect is retried */
++		    switch (send_err) {
++			case ECONNRESET:
++			case EDESTADDRREQ:
++			case EISCONN:
++			case ENOTCONN:
++			case EPIPE:
++					close(G.remoteFD);
++					G.remoteFD = -1;
++					break;
++		    }
+  no_luck: ;
+ 		}
+ #endif