#define __LOG_FILE "/var/log/messages"
/* Path to the unix socket */
-char lfile[PATH_MAX] = "";
+char lfile[BUFSIZ] = "";
static char *logFilePath = __LOG_FILE;
static char LocalHostName[32];
static const char syslogd_usage[] =
- "syslogd [OPTION]...\n\n"
- "Linux system and kernel (provides klogd) logging utility.\n"
+ "syslogd [OPTION]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+ "\nLinux system and kernel (provides klogd) logging utility.\n"
"Note that this version of syslogd/klogd ignores /etc/syslog.conf.\n\n"
"Options:\n"
- "\t-m\tChange the mark timestamp interval. default=20min. 0=off\n"
- "\t-n\tDo not fork into the background (for when run by init)\n"
+ "\t-m NUM\t\tInterval between MARK lines (default=20min, 0=off)\n"
+ "\t-n\t\tRun as a foreground process\n"
#ifdef BB_KLOGD
- "\t-K\tDo not start up the klogd process (by default syslogd spawns klogd).\n"
+ "\t-K\t\tDo not start up the klogd process\n"
#endif
- "\t-O\tSpecify an alternate log file. default=/var/log/messages\n";
+ "\t-O FILE\t\tUse an alternate log file (default=/var/log/messages)\n"
+#endif
+ ;
/* Note: There is also a function called "message()" in init.c */
/* Print a message to the log file. */
}
}
+#define BUFSIZE 1023
+static void serveConnection (int conn) __attribute__ ((noreturn));
+static void serveConnection (int conn)
+{
+ char buf[ BUFSIZE + 1 ];
+ int n_read;
+
+ while ((n_read = read (conn, buf, BUFSIZE )) > 0) {
+
+ int pri = (LOG_USER | LOG_NOTICE);
+ char line[ BUFSIZE + 1 ];
+ unsigned char c;
+
+ char *p = buf, *q = line;
+
+ buf[ n_read - 1 ] = '\0';
+
+ while (p && (c = *p) && q < &line[ sizeof (line) - 1 ]) {
+ if (c == '<') {
+ /* Parse the magic priority number. */
+ pri = 0;
+ while (isdigit (*(++p))) {
+ pri = 10 * pri + (*p - '0');
+ }
+ if (pri & ~(LOG_FACMASK | LOG_PRIMASK))
+ pri = (LOG_USER | LOG_NOTICE);
+ } else if (c == '\n') {
+ *q++ = ' ';
+ } else if (iscntrl (c) && (c < 0177)) {
+ *q++ = '^';
+ *q++ = c ^ 0100;
+ } else {
+ *q++ = c;
+ }
+ p++;
+ }
+ *q = '\0';
+ /* Now log it */
+ logMessage (pri, line);
+ }
+ exit (0);
+}
+
static void doSyslogd (void) __attribute__ ((noreturn));
static void doSyslogd (void)
{
struct sockaddr_un sunx;
- size_t addrLength;
+ socklen_t addrLength;
+
int sock_fd;
fd_set fds;
- char lfile[PATH_MAX];
+ char lfile[BUFSIZ];
/* Set up signal handlers. */
signal (SIGINT, quit_signal);
/* Create the syslog file so realpath() can work. */
close (open (_PATH_LOG, O_RDWR | O_CREAT, 0644));
if (realpath (_PATH_LOG, lfile) == NULL)
- fatalError ("Could not resolv path to " _PATH_LOG ": %s", strerror (errno));
+ fatalError ("Could not resolv path to " _PATH_LOG ": %s\n", strerror (errno));
unlink (lfile);
sunx.sun_family = AF_UNIX;
strncpy (sunx.sun_path, lfile, sizeof (sunx.sun_path));
if ((sock_fd = socket (AF_UNIX, SOCK_STREAM, 0)) < 0)
- fatalError ("Couldn't obtain descriptor for socket " _PATH_LOG ": %s", strerror (errno));
+ fatalError ("Couldn't obtain descriptor for socket " _PATH_LOG ": %s\n", strerror (errno));
addrLength = sizeof (sunx.sun_family) + strlen (sunx.sun_path);
if ((bind (sock_fd, (struct sockaddr *) &sunx, addrLength)) || (listen (sock_fd, 5)))
- fatalError ("Could not connect to socket " _PATH_LOG ": %s", strerror (errno));
+ fatalError ("Could not connect to socket " _PATH_LOG ": %s\n", strerror (errno));
if (chmod (lfile, 0666) < 0)
- fatalError ("Could not set permission on " _PATH_LOG ": %s", strerror (errno));
+ fatalError ("Could not set permission on " _PATH_LOG ": %s\n", strerror (errno));
FD_ZERO (&fds);
FD_SET (sock_fd, &fds);
continue;
}
- if (pid > 0) {
-
-# define BUFSIZE 1023
- char buf[ BUFSIZE + 1 ];
- int n_read;
-
- while ((n_read = read (conn, buf, BUFSIZE )) > 0) {
-
- int pri = (LOG_USER | LOG_NOTICE);
- char line[ BUFSIZE + 1 ];
- unsigned char c;
-
- char *p = buf, *q = line;
-
- buf[ n_read - 1 ] = '\0';
-
- while (p && (c = *p) && q < &line[ sizeof (line) - 1 ]) {
- if (c == '<') {
- /* Parse the magic priority number. */
- pri = 0;
- while (isdigit (*(++p))) {
- pri = 10 * pri + (*p - '0');
- }
- if (pri & ~(LOG_FACMASK | LOG_PRIMASK))
- pri = (LOG_USER | LOG_NOTICE);
- } else if (c == '\n') {
- *q++ = ' ';
- } else if (iscntrl (c) && (c < 0177)) {
- *q++ = '^';
- *q++ = c ^ 0100;
- } else {
- *q++ = c;
- }
- p++;
- }
- *q = '\0';
- /* Now log it */
- logMessage (pri, line);
- }
- exit (0);
- }
+ if (pid == 0)
+ serveConnection (conn);
close (conn);
}
}
}
}
+ if (argc > 0)
+ usage(syslogd_usage);
+
/* Store away localhost's name before the fork */
gethostname(LocalHostName, sizeof(LocalHostName));
if ((p = strchr(LocalHostName, '.'))) {