Exemplo n.º 1
0
int logger_main(int argc UNUSED_PARAM, char **argv)
{
	char *str_p, *str_t;
	int opt;
	int i = 0;
	FILE *f = NULL;

	/* Fill out the name string early (may be overwritten later) */
	str_t = uid2uname_utoa(geteuid());

	/* Parse any options */
	opt = getopt32(argv, "p:st:c", &str_p, &str_t);

	if (opt & 0x2) /* -s */
		i |= LOG_PERROR;
	if (opt & 0x8) { /* -c */
		f = fopen_for_write(DEV_CONSOLE);
		if (!f)
			bb_error_msg("can't open console: %d %s\n", errno, strerror(errno));
	}
	//if (opt & 0x4) /* -t */
	openlog(str_t, i, 0);
	i = LOG_USER | LOG_WARNING;
	if (opt & 0x1) /* -p */
		i = pencode(str_p);

	argv += optind;
	if (!argv[0]) {
		while (fgets(strbuf, COMMON_BUFSIZE, stdin)) {
			if (strbuf[0]
			 && NOT_LONE_CHAR(strbuf, '\n')
			) {
				/* Neither "" nor "\n" */
				syslog(i, "%s", strbuf);
				if (f)
					fprintf(f, "%s", strbuf);
			}
		}
	} else {
		char *message = NULL;
		int len = 0;
		int pos = 0;
		do {
			len += strlen(*argv) + 1;
			message = xrealloc(message, len + 1);
			sprintf(message + pos, " %s", *argv),
			pos = len;
		} while (*++argv);
		syslog(i, "%s", message + 1); /* skip leading " " */
		if (f)
			fprintf(f, "%s", message + 1);
	}

	closelog();
	if (f)
		fclose(f);
	return EXIT_SUCCESS;
}
Exemplo n.º 2
0
int logger_main(int argc UNUSED_PARAM, char **argv)
{
	char *str_p, *str_t;
	int opt;
	int i = 0;
	int fd = -1;

	setup_common_bufsiz();

	/* Fill out the name string early (may be overwritten later) */
	str_t = uid2uname_utoa(geteuid());

	/* Parse any options */
	opt = getopt32(argv, "p:st:c", &str_p, &str_t);

	if (opt & 0x2) /* -s */
		i |= LOG_PERROR;
	//if (opt & 0x4) /* -t */
	openlog(str_t, i, 0);
	if (opt & 0x8) { /* -c */
		fd = device_open(DEV_CONSOLE, O_WRONLY | O_NOCTTY | O_NONBLOCK);
		if (fd < 0)
			bb_error_msg("can't open console");
	}
	i = LOG_USER | LOG_WARNING;
	if (opt & 0x1) /* -p */
		i = pencode(str_p);

	argv += optind;
	if (!argv[0]) {
		while (fgets(strbuf, COMMON_BUFSIZE, stdin)) {
			if (strbuf[0]
			 && NOT_LONE_CHAR(strbuf, '\n')
			) {
				/* Neither "" nor "\n" */
				syslog(i, "%s", strbuf);
				if (fd >= 0) {
					fdprintf(fd, "%s: %s%s", str_t, strbuf,
						 strchr(strbuf, '\n') ? "" : "\n");
				}
			}
		}
	} else {
		char *message = NULL;
		int len = 0;
		int pos = 0;
		do {
			len += strlen(*argv) + 1;
			message = xrealloc(message, len + 1);
			sprintf(message + pos, " %s", *argv),
			pos = len;
		} while (*++argv);
		syslog(i, "%s", message + 1); /* skip leading " " */
		if (fd >= 0 && len) {
			fdprintf(fd, "%s:%s%s", str_t, message,
				 message[len - 1] == '\n' ? "" : "\n");
		}
	}

	closelog();
	if (fd >= 0)
		close(fd);
	return EXIT_SUCCESS;
}