aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2004-09-08 10:56:06 +0000
committerEric Andersen <andersen@codepoet.org>2004-09-08 10:56:06 +0000
commitf91b9282a3290c6e46d0ab532d7003f58d755cc5 (patch)
treebe0f83e3412bfc3b41310c2011d9b17f6a7cb132
parent4a79c0e9e149fa16e97aea6841d7efd71c775b50 (diff)
downloadbusybox-f91b9282a3290c6e46d0ab532d7003f58d755cc5.tar.gz
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.
-rw-r--r--sysklogd/syslogd.c55
1 files changed, 26 insertions, 29 deletions
diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c
index 6e7652c00..ef9cf2162 100644
--- a/sysklogd/syslogd.c
+++ b/sysklogd/syslogd.c
@@ -79,7 +79,6 @@ static char LocalHostName[64];
/* 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 @@ static void message(char *fmt, ...)
}
}
+#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 @@ static void logMessage(int pri, char *msg)
#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 @@ static int serveConnection(char *tmpbuf, int n_read)
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)
{