---
 sysklogd/klogd.c              | 35 ++++++++++++++++++++++++++++++++---
 sysklogd/syslogd_and_logger.c |  4 ++++
 2 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/sysklogd/klogd.c b/sysklogd/klogd.c
index 728cc8d38..a2289925f 100644
--- a/sysklogd/klogd.c
+++ b/sysklogd/klogd.c
@@ -48,7 +48,7 @@
 
 //applet:IF_KLOGD(APPLET(klogd, BB_DIR_SBIN, BB_SUID_DROP))
 
-//kbuild:lib-$(CONFIG_KLOGD) += klogd.o
+//kbuild:lib-$(CONFIG_KLOGD) += syslogd_and_logger.o
 
 //usage:#define klogd_trivial_usage
 //usage:       "[-c N] [-n]"
@@ -56,10 +56,14 @@
 //usage:       "Kernel logger\n"
 //usage:     "\n       -c N    Print to console messages more urgent than prio 
N (1-8)"
 //usage:     "\n       -n      Run in foreground"
+//usage:     "\n       -f FACILITY Send to syslog with this facility instead 
'kern'"
 
+/*
+ * Done in syslogd_and_logger.c:
 #include "libbb.h"
 #include "common_bufsiz.h"
 #include <syslog.h>
+*/
 
 
 /* The Linux-specific klogctl(3) interface does not rely on the filesystem and
@@ -151,8 +155,20 @@ enum {
        KLOGD_LOGBUF_SIZE = COMMON_BUFSIZE,
        OPT_LEVEL      = (1 << 0),
        OPT_FOREGROUND = (1 << 1),
+       OPT_FACILITY   = (1 << 2),
 };
 
+static int find_facility_by_name(const char *name)
+{
+       int i = 0;
+       do {
+               if (strcmp(name, bb_facilitynames[i].c_name) == 0)
+                       return bb_facilitynames[i].c_val;
+       } while (facilitynames[++i].c_name);
+
+       return -1;
+}
+
 /* TODO: glibc openlog(LOG_KERN) reverts to LOG_USER instead,
  * because that's how they interpret word "default"
  * in the openlog() manpage:
@@ -170,17 +186,28 @@ int klogd_main(int argc, char **argv) 
MAIN_EXTERNALLY_VISIBLE;
 int klogd_main(int argc UNUSED_PARAM, char **argv)
 {
        int i = 0;
+       int facility = LOG_KERN;
        char *opt_c;
+       char *opt_f;
        int opt;
        int used;
 
        setup_common_bufsiz();
 
-       opt = getopt32(argv, "c:n", &opt_c);
+       opt = getopt32(argv, "c:nf:", &opt_c, &opt_f);
        if (opt & OPT_LEVEL) {
                /* Valid levels are between 1 and 8 */
                i = xatou_range(opt_c, 1, 8);
        }
+       if (opt & OPT_FACILITY) {
+               facility = find_facility_by_name(opt_f);
+               if (facility < 0) {
+                       facility = LOG_KERN;
+                       bb_error_msg("failed found facility '%s', will use 
default LOG_KERN",
+                                               opt_f);
+
+               }
+       }
        if (!(opt & OPT_FOREGROUND)) {
                bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv);
        }
@@ -191,7 +218,7 @@ int klogd_main(int argc UNUSED_PARAM, char **argv)
         * and openlog() also may use the same fd 3 if we swap them:
         */
        klogd_open();
-       openlog("kernel", 0, LOG_KERN);
+       openlog("kernel", 0, facility);
        /*
         * glibc problem: for some reason, glibc changes LOG_KERN to LOG_USER
         * above. The logic behind this is that standard
@@ -297,3 +324,5 @@ int klogd_main(int argc UNUSED_PARAM, char **argv)
                kill_myself_with_sig(bb_got_signal);
        return EXIT_FAILURE;
 }
+
+#undef log_buffer
diff --git a/sysklogd/syslogd_and_logger.c b/sysklogd/syslogd_and_logger.c
index 94d8273b6..5b1ec03f1 100644
--- a/sysklogd/syslogd_and_logger.c
+++ b/sysklogd/syslogd_and_logger.c
@@ -61,3 +61,7 @@ static const CODE *const bb_facilitynames = facilitynames;
 #if ENABLE_LOGGER
 #include "logger.c"
 #endif
+
+#if ENABLE_KLOGD
+#include "klogd.c"
+#endif
-- 
2.30.2

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to