/*
* Mini logger implementation for busybox
*
- * Copyright (C) 1999,2000 by Lineo, inc.
- * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
+ * Copyright (C) 1999-2003 by Erik Andersen <andersen@codepoet.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
*/
-#include "busybox.h"
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
-#if !defined BB_SYSLOGD
+#include "busybox.h"
+#if !defined CONFIG_SYSLOGD
#define SYSLOG_NAMES
#include <sys/syslog.h>
#else
-/* We have to do this since the header file defines static
- * structures. Argh.... bad libc, bad, bad...
- */
#include <sys/syslog.h>
-typedef struct _code {
- char *c_name;
- int c_val;
-} CODE;
-extern CODE prioritynames[];
-extern CODE facilitynames[];
+# ifndef __dietlibc__
+ /* We have to do this since the header file defines static
+ * structures. Argh.... bad libc, bad, bad...
+ */
+ typedef struct _code {
+ char *c_name;
+ int c_val;
+ } CODE;
+ extern CODE prioritynames[];
+ extern CODE facilitynames[];
+# endif
#endif
/* Decode a symbolic name to a numeric value
*s = '\0';
fac = decode(save, facilitynames);
if (fac < 0)
- error_msg_and_die("unknown facility name: %s\n", save);
+ bb_error_msg_and_die("unknown facility name: %s", save);
*s++ = '.';
} else {
s = save;
}
lev = decode(s, prioritynames);
if (lev < 0)
- error_msg_and_die("unknown priority name: %s\n", save);
+ bb_error_msg_and_die("unknown priority name: %s", save);
return ((lev & LOG_PRIMASK) | (fac & LOG_FACMASK));
}
{
int pri = LOG_USER | LOG_NOTICE;
int option = 0;
- int c, i, len, opt;
- char *message=NULL, buf[1024], name[128];
+ int c, i, opt;
+ char buf[1024], name[128];
/* Fill out the name string early (may be overwritten later) */
my_getpwuid(name, geteuid());
pri = pencode(optarg);
break;
case 't':
- strncpy(name, optarg, sizeof(name));
+ safe_strncpy(name, optarg, sizeof(name));
break;
default:
- usage(logger_usage);
+ bb_show_usage();
}
}
+ openlog(name, option, (pri | LOG_FACMASK));
if (optind == argc) {
- /* read from stdin */
- i = 0;
- while ((c = getc(stdin)) != EOF && i < sizeof(buf)) {
- buf[i++] = c;
- }
- buf[i++] = '\0';
- message = buf;
+ do {
+ /* read from stdin */
+ i = 0;
+ while ((c = getc(stdin)) != EOF && c != '\n' &&
+ i < (sizeof(buf)-1)) {
+ buf[i++] = c;
+ }
+ if (i > 0) {
+ buf[i++] = '\0';
+ syslog(pri, "%s", buf);
+ }
+ } while (c != EOF);
} else {
- len = 1; /* for the '\0' */
- message=xcalloc(1, 1);
- for (i = optind; i < argc; i++) {
- len += strlen(argv[i]);
- len += 1; /* for the space between the args */
+ char *message = NULL;
+ int len = argc - optind; /* for the space between the args
+ and '\0' */
+ opt = len;
+ argv += optind;
+ for (i = 0; i < opt; i++) {
+ len += strlen(*argv);
message = xrealloc(message, len);
- strcat(message, argv[i]);
+ if(!i)
+ message[0] = 0;
+ else
strcat(message, " ");
+ strcat(message, *argv);
+ argv++;
}
- message[strlen(message)-1] = '\0';
+ syslog(pri, "%s", message);
}
- openlog(name, option, (pri | LOG_FACMASK));
- syslog(pri, "%s", message);
closelog();
return EXIT_SUCCESS;
}