* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
*/
-#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>
+#include "libbb.h"
#if !defined CONFIG_SYSLOGD
CODE *c;
if (isdigit(*name))
- return (atoi(name));
+ return atoi(name);
for (c = codetab; c->c_name; c++) {
if (!strcasecmp(name, c->c_name)) {
- return (c->c_val);
+ return c->c_val;
}
}
- return (-1);
+ return -1;
}
/* Decode a symbolic name to a numeric value
char *save;
int lev, fac = LOG_USER;
- for (save = s; *s && *s != '.'; ++s);
+ for (save = s; *s && *s != '.'; ++s)
+ ;
if (*s) {
*s = '\0';
fac = decode(save, facilitynames);
if (fac < 0)
- bb_error_msg_and_die("unknown facility name: %s", save);
+ bb_error_msg_and_die("unknown %s name: %s", "facility", save);
*s++ = '.';
} else {
s = save;
}
lev = decode(s, prioritynames);
if (lev < 0)
- bb_error_msg_and_die("unknown priority name: %s", save);
+ bb_error_msg_and_die("unknown %s name: %s", "priority", save);
return ((lev & LOG_PRIMASK) | (fac & LOG_FACMASK));
}
+int logger_main(int argc, char **argv);
int logger_main(int argc, char **argv)
{
- int pri = LOG_USER | LOG_NOTICE;
- int option = 0;
- int c, i, opt;
- char buf[1024], name[128];
+ char *str_p, *str_t;
+ int i = 0;
+ char name[80];
/* Fill out the name string early (may be overwritten later) */
bb_getpwuid(name, geteuid(), sizeof(name));
+ str_t = name;
/* Parse any options */
- while ((opt = getopt(argc, argv, "p:st:")) > 0) {
- switch (opt) {
- case 's':
- option |= LOG_PERROR;
- break;
- case 'p':
- pri = pencode(optarg);
- break;
- case 't':
- safe_strncpy(name, optarg, sizeof(name));
- break;
- default:
- bb_show_usage();
- }
- }
-
- openlog(name, option, 0);
- if (optind == argc) {
- 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);
+ getopt32(argc, argv, "p:st:", &str_p, &str_t);
+
+ if (option_mask32 & 0x2) /* -s */
+ i |= LOG_PERROR;
+ //if (option_mask32 & 0x4) /* -t */
+ openlog(str_t, i, 0);
+ i = LOG_USER | LOG_NOTICE;
+ if (option_mask32 & 0x1) /* -p */
+ i = pencode(str_p);
+
+ argc -= optind;
+ argv += optind;
+ if (!argc) {
+#define strbuf bb_common_bufsiz1
+ while (fgets(strbuf, BUFSIZ, stdin)) {
+ if (strbuf[0]
+ && NOT_LONE_CHAR(strbuf, '\n')
+ ) {
+ /* Neither "" nor "\n" */
+ syslog(i, "%s", strbuf);
}
- } while (c != EOF);
+ }
} else {
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);
+ int len = 1; /* for NUL */
+ int pos = 0;
+ do {
+ len += strlen(*argv) + 1;
message = xrealloc(message, len);
- if(!i)
- message[0] = '\0';
- else
- strcat(message, " ");
- strcat(message, *argv);
- argv++;
- }
- syslog(pri, "%s", message);
+ sprintf(message + pos, " %s", *argv),
+ pos = len;
+ } while (*++argv);
+ syslog(i, "%s", message + 1); /* skip leading " " */
}
closelog();
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-
-
-