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.
This commit is contained in:
		| @@ -79,7 +79,6 @@ static char LocalHostName[64]; | |||||||
| /* udp socket for logging to remote host */ | /* udp socket for logging to remote host */ | ||||||
| static int remotefd = -1; | static int remotefd = -1; | ||||||
| static struct sockaddr_in remoteaddr; | static struct sockaddr_in remoteaddr; | ||||||
| static int remoteaddrlen; |  | ||||||
|  |  | ||||||
| /* where do we log? */ | /* where do we log? */ | ||||||
| static char *RemoteHost; | 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) | static void logMessage(int pri, char *msg) | ||||||
| { | { | ||||||
| 	time_t now; | 	time_t now; | ||||||
| 	char *timestamp; | 	char *timestamp; | ||||||
| 	static char res[20] = ""; | 	static char res[20] = ""; | ||||||
| #ifdef CONFIG_FEATURE_REMOTE_LOG	 | #ifdef CONFIG_FEATURE_REMOTE_LOG	 | ||||||
| 	static char line[512]; | 	static char line[MAXLINE + 1]; | ||||||
| #endif | #endif | ||||||
| 	CODE *c_pri, *c_fac; | 	CODE *c_pri, *c_fac; | ||||||
|  |  | ||||||
| @@ -418,15 +433,20 @@ static void logMessage(int pri, char *msg) | |||||||
|  |  | ||||||
| #ifdef CONFIG_FEATURE_REMOTE_LOG | #ifdef CONFIG_FEATURE_REMOTE_LOG | ||||||
| 	/* send message to remote logger */ | 	/* send message to remote logger */ | ||||||
| 	if (-1 != remotefd) { | 	if (-1 == remotefd) { | ||||||
|  | 		init_RemoteLog(); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 		memset(&line, 0, sizeof(line)); | 	if (-1 != remotefd) { | ||||||
| 		snprintf(line, sizeof(line), "<%d> <%s>", pri, msg); | 		now = 1; | ||||||
|  | 		snprintf(line, sizeof(line), "<%d> %s", pri, msg); | ||||||
|  |  | ||||||
| 	retry: | 	retry: | ||||||
|     	if(( -1 == sendto(remotefd, line, strlen(line), 0,  |     	if(( -1 == sendto(remotefd, line, strlen(line), 0,  | ||||||
| 						(struct sockaddr *) &remoteaddr,  | 						(struct sockaddr *) &remoteaddr,  | ||||||
| 						remoteaddrlen)) && (errno == EINTR)) { | 						sizeof(remoteaddr))) && (errno == EINTR)) { | ||||||
|  | 			sleep(now); | ||||||
|  | 			now *= 2; | ||||||
| 			goto retry; | 			goto retry; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -503,29 +523,6 @@ static int serveConnection(char *tmpbuf, int n_read) | |||||||
| 	return 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) __attribute__ ((noreturn)); | ||||||
| static void doSyslogd(void) | static void doSyslogd(void) | ||||||
| { | { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user