aboutsummaryrefslogtreecommitdiff
path: root/sysklogd/syslogd.c
diff options
context:
space:
mode:
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2006-08-20 17:35:13 +0000
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2006-08-20 17:35:13 +0000
commitd591a360d39f9bca3479b913fe4c5773965d18cf (patch)
tree994b43e608bc4640dff7d1bd333938229b874d82 /sysklogd/syslogd.c
parent13068a4fdbe558daea85820fec663db3536aacff (diff)
downloadbusybox-w32-d591a360d39f9bca3479b913fe4c5773965d18cf.tar.gz
busybox-w32-d591a360d39f9bca3479b913fe4c5773965d18cf.tar.bz2
busybox-w32-d591a360d39f9bca3479b913fe4c5773965d18cf.zip
- merge -r15463:15564 from busybox_scratch branch through these changesets:
------------------------------------------------------------------------ r15465 | aldot | 2006-06-21 20:48:06 +0200 (Wed, 21 Jun 2006) | 3 lines - use CONFIG_BUSYBOX_EXEC_PATH as before it one was broken by a recent revert. - use xchdir() since all is invain if it fails there anyways, supposedly ------------------------------------------------------------------------ r15466 | aldot | 2006-06-21 20:55:16 +0200 (Wed, 21 Jun 2006) | 2 lines - adjust docs to take CONFIG_BUSYBOX_EXEC_PATH into account. ------------------------------------------------------------------------ r15467 | aldot | 2006-06-21 21:31:24 +0200 (Wed, 21 Jun 2006) | 18 lines - partial fallout of my TREE_USED touchup against gcc-4.2: rip unused vars, save s 144 bytes text data bss dec hex filename 862434 10156 645924 1518514 172bb2 busybox.old 862322 10156 645892 1518370 172b22 busybox function old new delta z_len 4 - -4 textend 4 - -4 part_nb 4 - -4 insize 4 - -4 ifile_size 4 - -4 do_link 4 - -4 new_text 70 60 -10 ipaddr_list_link 33 23 -10 gzip_main 898 822 -76 ------------------------------------------------------------------------------ (add/remove: 0/6 grow/shrink: 0/3 up/down: 0/-120) Total: -120 bytes ------------------------------------------------------------------------ r15468 | aldot | 2006-06-21 21:43:05 +0200 (Wed, 21 Jun 2006) | 19 lines - remove useless global exports function old new delta rpm_main 940 1601 +661 rpm_getstring 107 112 +5 rpm_getint 148 153 +5 loop_through_files 103 106 +3 fileaction_dobackup 115 113 -2 fileaction_list 5 - -5 rpm_getcount 42 - -42 extract_cpio_gz 161 - -161 rpm_gettags 504 - -504 ------------------------------------------------------------------------------ (add/remove: 0/4 grow/shrink: 4/1 up/down: 674/-714) Total: -40 bytes text data bss dec hex filename 862322 10156 645892 1518370 172b22 busybox.old 862290 10156 645892 1518338 172b02 busybox ------------------------------------------------------------------------ r15555 | aldot | 2006-06-30 14:10:11 +0200 (Fri, 30 Jun 2006) | 22 lines - shrink syslog a little bit, move a big buffer (for 'line') off the bss, fold s emaphore stuff into single caller manually. stats: function old new delta logMessage 395 427 +32 message 1245 1257 +12 opts - 4 +4 small 1 - -1 local_logging 4 - -4 doRemoteLog 4 - -4 circular_logging 4 - -4 syslogd_main 1299 1285 -14 static.res 36 16 -20 .rodata 186650 186586 -64 static.line 1025 - -1025 ------------------------------------------------------------------------------ (add/remove: 1/5 grow/shrink: 2/3 up/down: 48/-1136) Total: -1088 bytes cow@s37:~/src/busybox_scratch$ size sysklogd/syslogd.o{.orig,} text data bss dec hex filename 3723 348 5242 9313 2461 sysklogd/syslogd.o.orig 3697 348 4188 8233 2029 sysklogd/syslogd.o ============================================================================== Overall bloatcheck for the changeset mentioned above: function old new delta rpm_main 953 1608 +655 logMessage 395 427 +32 message 1245 1257 +12 opts - 4 +4 rpm_getstring 107 110 +3 rpm_getint 148 151 +3 loop_through_files 103 104 +1 small 1 - -1 fileaction_dobackup 115 113 -2 z_len 4 - -4 textend 4 - -4 part_nb 4 - -4 local_logging 4 - -4 insize 4 - -4 ifile_size 4 - -4 do_link 4 - -4 doRemoteLog 4 - -4 circular_logging 4 - -4 fileaction_list 5 - -5 new_text 70 60 -10 ipaddr_list_link 33 23 -10 clear_bufs 31 21 -10 syslogd_main 1287 1273 -14 builtin_help 190 176 -14 static.res 36 16 -20 builtin_source 229 199 -30 rpm_getcount 42 - -42 gzip_main 842 786 -56 .rodata 227176 227112 -64 lash_main 609 527 -82 busy_loop 3883 3739 -144 extract_cpio_gz 155 - -155 rpm_gettags 501 - -501 static.line 1025 - -1025 ------------------------------------------------------------------------------ (add/remove: 1/15 grow/shrink: 6/12 up/down: 710/-2221) Total: -1511 bytes
Diffstat (limited to 'sysklogd/syslogd.c')
-rw-r--r--sysklogd/syslogd.c98
1 files changed, 36 insertions, 62 deletions
diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c
index 87313af43..fc3845606 100644
--- a/sysklogd/syslogd.c
+++ b/sysklogd/syslogd.c
@@ -57,14 +57,14 @@ static char *RemoteHost;
57/* what port to log to? */ 57/* what port to log to? */
58static int RemotePort = 514; 58static int RemotePort = 514;
59 59
60/* To remote log or not to remote log, that is the question. */
61static int doRemoteLog = FALSE;
62static int local_logging = FALSE;
63#endif 60#endif
64 61
65/* Make loging output smaller. */ 62/* options */
66static bool small = false; 63static unsigned opts;
67 64#define SYSLOG_OPT_small (1)
65#define SYSLOG_OPT_remotelog (2)
66#define SYSLOG_OPT_locallog (4)
67#define SYSLOG_OPT_circularlog (8)
68 68
69#define MAXLINE 1024 /* maximum line length */ 69#define MAXLINE 1024 /* maximum line length */
70 70
@@ -98,28 +98,6 @@ static struct sembuf SMwdn[3] = { {0, 0}, {1, 0}, {1, +1} }; // set SMwdn
98static int shmid = -1; // ipc shared memory id 98static int shmid = -1; // ipc shared memory id
99static int s_semid = -1; // ipc semaphore id 99static int s_semid = -1; // ipc semaphore id
100static int shm_size = ((CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE)*1024); // default shm size 100static int shm_size = ((CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE)*1024); // default shm size
101static int circular_logging = FALSE;
102
103/*
104 * sem_up - up()'s a semaphore.
105 */
106static inline void sem_up(int semid)
107{
108 if (semop(semid, SMwup, 1) == -1) {
109 bb_perror_msg_and_die("semop[SMwup]");
110 }
111}
112
113/*
114 * sem_down - down()'s a semaphore
115 */
116static inline void sem_down(int semid)
117{
118 if (semop(semid, SMwdn, 3) == -1) {
119 bb_perror_msg_and_die("semop[SMwdn]");
120 }
121}
122
123 101
124static void ipcsyslog_cleanup(void) 102static void ipcsyslog_cleanup(void)
125{ 103{
@@ -169,8 +147,11 @@ static void ipcsyslog_init(void)
169static void circ_message(const char *msg) 147static void circ_message(const char *msg)
170{ 148{
171 int l = strlen(msg) + 1; /* count the whole message w/ '\0' included */ 149 int l = strlen(msg) + 1; /* count the whole message w/ '\0' included */
150 const char * const fail_msg = "Can't find the terminator token%s?\n";
172 151
173 sem_down(s_semid); 152 if (semop(s_semid, SMwdn, 3) == -1) {
153 bb_perror_msg_and_die("SMwdn");
154 }
174 155
175 /* 156 /*
176 * Circular Buffer Algorithm: 157 * Circular Buffer Algorithm:
@@ -220,7 +201,7 @@ static void circ_message(const char *msg)
220 /* Note: HEAD is only used to "retrieve" messages, it's not used 201 /* Note: HEAD is only used to "retrieve" messages, it's not used
221 when writing messages into our buffer */ 202 when writing messages into our buffer */
222 } else { /* show an error message to know we messed up? */ 203 } else { /* show an error message to know we messed up? */
223 printf("Weird! Can't find the terminator token?\n"); 204 printf(fail_msg,"");
224 buf->head = 0; 205 buf->head = 0;
225 } 206 }
226 } 207 }
@@ -256,13 +237,15 @@ static void circ_message(const char *msg)
256 /* we need to place the TAIL at the end of the message */ 237 /* we need to place the TAIL at the end of the message */
257 buf->tail = k + 1; 238 buf->tail = k + 1;
258 } else { 239 } else {
259 printf 240 printf(fail_msg, " from the beginning");
260 ("Weird! Can't find the terminator token from the beginning?\n");
261 buf->head = buf->tail = 0; /* reset buffer, since it's probably corrupted */ 241 buf->head = buf->tail = 0; /* reset buffer, since it's probably corrupted */
262 } 242 }
263 243
264 } 244 }
265 sem_up(s_semid); 245 if (semop(s_semid, SMwup, 1) == -1) {
246 bb_perror_msg_and_die("SMwup");
247 }
248
266} 249}
267#endif /* CONFIG_FEATURE_IPC_SYSLOG */ 250#endif /* CONFIG_FEATURE_IPC_SYSLOG */
268 251
@@ -280,7 +263,7 @@ static void message(char *fmt, ...)
280 fl.l_len = 1; 263 fl.l_len = 1;
281 264
282#ifdef CONFIG_FEATURE_IPC_SYSLOG 265#ifdef CONFIG_FEATURE_IPC_SYSLOG
283 if ((circular_logging == TRUE) && (buf != NULL)) { 266 if ((opts & SYSLOG_OPT_circularlog) && (buf != NULL)) {
284 char b[1024]; 267 char b[1024];
285 268
286 va_start(arguments, fmt); 269 va_start(arguments, fmt);
@@ -295,8 +278,8 @@ static void message(char *fmt, ...)
295 O_NONBLOCK)) >= 0) { 278 O_NONBLOCK)) >= 0) {
296 fl.l_type = F_WRLCK; 279 fl.l_type = F_WRLCK;
297 fcntl(fd, F_SETLKW, &fl); 280 fcntl(fd, F_SETLKW, &fl);
298#ifdef CONFIG_FEATURE_ROTATE_LOGFILE 281
299 if ( logFileSize > 0 ) { 282 if (ENABLE_FEATURE_ROTATE_LOGFILE && logFileSize > 0 ) {
300 struct stat statf; 283 struct stat statf;
301 int r = fstat(fd, &statf); 284 int r = fstat(fd, &statf);
302 if( !r && (statf.st_mode & S_IFREG) 285 if( !r && (statf.st_mode & S_IFREG)
@@ -324,7 +307,7 @@ static void message(char *fmt, ...)
324 } 307 }
325 } 308 }
326 } 309 }
327#endif 310
328 va_start(arguments, fmt); 311 va_start(arguments, fmt);
329 vdprintf(fd, fmt, arguments); 312 vdprintf(fd, fmt, arguments);
330 va_end(arguments); 313 va_end(arguments);
@@ -364,10 +347,7 @@ static void logMessage(int pri, char *msg)
364{ 347{
365 time_t now; 348 time_t now;
366 char *timestamp; 349 char *timestamp;
367 static char res[20]; 350 char res[20];
368#ifdef CONFIG_FEATURE_REMOTE_LOG
369 static char line[MAXLINE + 1];
370#endif
371 CODE *c_pri, *c_fac; 351 CODE *c_pri, *c_fac;
372 352
373 if (pri != 0) { 353 if (pri != 0) {
@@ -396,7 +376,8 @@ static void logMessage(int pri, char *msg)
396 /* todo: supress duplicates */ 376 /* todo: supress duplicates */
397 377
398#ifdef CONFIG_FEATURE_REMOTE_LOG 378#ifdef CONFIG_FEATURE_REMOTE_LOG
399 if (doRemoteLog == TRUE) { 379 if (opts & SYSLOG_OPT_remotelog) {
380 char line[MAXLINE + 1];
400 /* trying connect the socket */ 381 /* trying connect the socket */
401 if (-1 == remotefd) { 382 if (-1 == remotefd) {
402 init_RemoteLog(); 383 init_RemoteLog();
@@ -407,7 +388,7 @@ static void logMessage(int pri, char *msg)
407 now = 1; 388 now = 1;
408 snprintf(line, sizeof(line), "<%d>%s", pri, msg); 389 snprintf(line, sizeof(line), "<%d>%s", pri, msg);
409 390
410 retry: 391retry:
411 /* send message to remote logger */ 392 /* send message to remote logger */
412 if(( -1 == sendto(remotefd, line, strlen(line), 0, 393 if(( -1 == sendto(remotefd, line, strlen(line), 0,
413 (struct sockaddr *) &remoteaddr, 394 (struct sockaddr *) &remoteaddr,
@@ -420,11 +401,11 @@ static void logMessage(int pri, char *msg)
420 } 401 }
421 } 402 }
422 403
423 if (local_logging == TRUE) 404 if (opts & SYSLOG_OPT_locallog)
424#endif 405#endif
425 { 406 {
426 /* now spew out the message to wherever it is supposed to go */ 407 /* now spew out the message to wherever it is supposed to go */
427 if (small) 408 if (opts & SYSLOG_OPT_small)
428 message("%s %s\n", timestamp, msg); 409 message("%s %s\n", timestamp, msg);
429 else 410 else
430 message("%s %s %s %s\n", timestamp, LocalHostName, res, msg); 411 message("%s %s %s %s\n", timestamp, LocalHostName, res, msg);
@@ -435,9 +416,8 @@ static void quit_signal(int sig)
435{ 416{
436 logMessage(LOG_SYSLOG | LOG_INFO, "System log daemon exiting."); 417 logMessage(LOG_SYSLOG | LOG_INFO, "System log daemon exiting.");
437 unlink(lfile); 418 unlink(lfile);
438#ifdef CONFIG_FEATURE_IPC_SYSLOG 419 if (ENABLE_FEATURE_IPC_SYSLOG)
439 ipcsyslog_cleanup(); 420 ipcsyslog_cleanup();
440#endif
441 421
442 exit(TRUE); 422 exit(TRUE);
443} 423}
@@ -531,17 +511,13 @@ static void doSyslogd(void)
531 if (chmod(lfile, 0666) < 0) { 511 if (chmod(lfile, 0666) < 0) {
532 bb_perror_msg_and_die("Could not set permission on " _PATH_LOG); 512 bb_perror_msg_and_die("Could not set permission on " _PATH_LOG);
533 } 513 }
534#ifdef CONFIG_FEATURE_IPC_SYSLOG 514 if (ENABLE_FEATURE_IPC_SYSLOG && opts & SYSLOG_OPT_circularlog) {
535 if (circular_logging == TRUE) {
536 ipcsyslog_init(); 515 ipcsyslog_init();
537 } 516 }
538#endif
539 517
540#ifdef CONFIG_FEATURE_REMOTE_LOG 518 if (ENABLE_FEATURE_REMOTE_LOG && opts & SYSLOG_OPT_remotelog) {
541 if (doRemoteLog == TRUE) {
542 init_RemoteLog(); 519 init_RemoteLog();
543 } 520 }
544#endif
545 521
546 logMessage(LOG_SYSLOG | LOG_INFO, "syslogd started: " "BusyBox v" BB_VER ); 522 logMessage(LOG_SYSLOG | LOG_INFO, "syslogd started: " "BusyBox v" BB_VER );
547 523
@@ -613,10 +589,10 @@ int syslogd_main(int argc, char **argv)
613 RemotePort = atoi(p + 1); 589 RemotePort = atoi(p + 1);
614 *p = '\0'; 590 *p = '\0';
615 } 591 }
616 doRemoteLog = TRUE; 592 opts |= SYSLOG_OPT_remotelog;
617 break; 593 break;
618 case 'L': 594 case 'L':
619 local_logging = TRUE; 595 opts |= SYSLOG_OPT_locallog;
620 break; 596 break;
621#endif 597#endif
622#ifdef CONFIG_FEATURE_IPC_SYSLOG 598#ifdef CONFIG_FEATURE_IPC_SYSLOG
@@ -627,22 +603,20 @@ int syslogd_main(int argc, char **argv)
627 shm_size = buf_size * 1024; 603 shm_size = buf_size * 1024;
628 } 604 }
629 } 605 }
630 circular_logging = TRUE; 606 opts |= SYSLOG_OPT_circularlog;
631 break; 607 break;
632#endif 608#endif
633 case 'S': 609 case 'S':
634 small = true; 610 opts |= SYSLOG_OPT_small;
635 break; 611 break;
636 default: 612 default:
637 bb_show_usage(); 613 bb_show_usage();
638 } 614 }
639 } 615 }
640 616
641#ifdef CONFIG_FEATURE_REMOTE_LOG
642 /* If they have not specified remote logging, then log locally */ 617 /* If they have not specified remote logging, then log locally */
643 if (doRemoteLog == FALSE) 618 if (ENABLE_FEATURE_REMOTE_LOG && !(opts & SYSLOG_OPT_remotelog))
644 local_logging = TRUE; 619 opts |= SYSLOG_OPT_locallog;
645#endif
646 620
647 621
648 /* Store away localhost's name before the fork */ 622 /* Store away localhost's name before the fork */