[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox-cvs
Subject:    [BusyBox-cvs] CVS update of busybox/sysklogd (syslogd.c)
From:       andersen () codepoet ! org (Erik Andersen)
Date:       2004-09-08 4:56:09
Message-ID: 20040908105607.61D01B4012 () codepoet ! org
[Download RAW message or body]

    Date: Wednesday, September 8, 2004 @ 04:56:07
  Author: andersen
    Path: /var/cvs/busybox/sysklogd

Modified: syslogd.c (1.115 -> 1.116)

Felipe Kellermann writes:

The Togg's sysklogd patch to use sendto() on remote logging is formatting
strangely (using `<' and '>' surrounding the `msg' string message).  This
is OK, but this is not the standard way of formatting this message.

So this patch does the following:

o Fix the formatting to the standard way.
o Uses `MAXLINE' when needed;
o Don't loop sending messages without a "sleeping time",
  I'm now doing `now = 1', `now <<= 1';
o Don't die on `init_RemoteLog' when starting up (feature!)
  We're now trying to connect every time we have an invalid fd;
o Removes one static uneeded variable.
o Removes two automatic uneeded variables.


Index: busybox/sysklogd/syslogd.c
diff -u busybox/sysklogd/syslogd.c:1.115 busybox/sysklogd/syslogd.c:1.116
--- busybox/sysklogd/syslogd.c:1.115	Thu Sep  2 16:22:17 2004
+++ busybox/sysklogd/syslogd.c	Wed Sep  8 04:56:06 2004
@@ -79,7 +79,6 @@
 /* udp socket for logging to remote host */
 static int remotefd = -1;
 static struct sockaddr_in remoteaddr;
-static int remoteaddrlen;
 
 /* where do we log? */
 static char *RemoteHost;
@@ -381,13 +380,29 @@
 	}
 }
 
+#ifdef CONFIG_FEATURE_REMOTE_LOG
+static void init_RemoteLog(void)
+{
+	memset(&remoteaddr, 0, sizeof(remoteaddr));
+	remotefd = socket(AF_INET, SOCK_DGRAM, 0);
+
+	if (remotefd < 0) {
+		bb_error_msg("cannot create socket");
+	}
+
+	remoteaddr.sin_family = AF_INET;
+	remoteaddr.sin_addr = *(struct in_addr *) *(xgethostbyname(RemoteHost))->h_addr_list;
+	remoteaddr.sin_port = htons(RemotePort);
+}
+#endif
+
 static void logMessage(int pri, char *msg)
 {
 	time_t now;
 	char *timestamp;
 	static char res[20] = "";
 #ifdef CONFIG_FEATURE_REMOTE_LOG	
-	static char line[512];
+	static char line[MAXLINE + 1];
 #endif
 	CODE *c_pri, *c_fac;
 
@@ -418,15 +433,20 @@
 
 #ifdef CONFIG_FEATURE_REMOTE_LOG
 	/* send message to remote logger */
-	if (-1 != remotefd) {
+	if (-1 == remotefd) {
+		init_RemoteLog();
+	}
 
-		memset(&line, 0, sizeof(line));
-		snprintf(line, sizeof(line), "<%d> <%s>", pri, msg);
+	if (-1 != remotefd) {
+		now = 1;
+		snprintf(line, sizeof(line), "<%d> %s", pri, msg);
 
 	retry:
     	if(( -1 == sendto(remotefd, line, strlen(line), 0, 
 						(struct sockaddr *) &remoteaddr, 
-						remoteaddrlen)) && (errno == EINTR)) {
+						sizeof(remoteaddr))) && (errno == EINTR)) {
+			sleep(now);
+			now *= 2;
 			goto retry;
 		}
 	}
@@ -503,29 +523,6 @@
 	return n_read;
 }
 
-
-#ifdef CONFIG_FEATURE_REMOTE_LOG
-static void init_RemoteLog(void)
-{
-	struct hostent *hostinfo;
-	remoteaddrlen = sizeof(remoteaddr);
-
-	memset(&remoteaddr, 0, remoteaddrlen);
-
-	remotefd = socket(AF_INET, SOCK_DGRAM, 0);
-
-	if (remotefd < 0) {
-		bb_error_msg_and_die("cannot create socket");
-	}
-
-	hostinfo = xgethostbyname(RemoteHost);
-
-	remoteaddr.sin_family = AF_INET;
-	remoteaddr.sin_addr = *(struct in_addr *) *hostinfo->h_addr_list;
-	remoteaddr.sin_port = htons(RemotePort);
-}
-#endif
-
 static void doSyslogd(void) __attribute__ ((noreturn));
 static void doSyslogd(void)
 {

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic