add the -c option, modified version of a patch from Bastian Blank
authorGlenn L McGrath <bug1@ihug.co.nz>
Sun, 1 Dec 2002 11:31:58 +0000 (11:31 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Sun, 1 Dec 2002 11:31:58 +0000 (11:31 -0000)
sysklogd/klogd.c

index f2ab5ea7e7a89bcce694f64d1ef542e734a71f89..710bd5a31b7ae9067f787e6e5b9d1b26ccb21b76 100644 (file)
@@ -59,8 +59,8 @@ static void klogd_signal(int sig)
        exit(TRUE);
 }
 
-static void doKlogd(void) __attribute__ ((noreturn));
-static void doKlogd(void)
+static void doKlogd(const char console_log_level) __attribute__ ((noreturn));
+static void doKlogd(const char console_log_level)
 {
        int priority = LOG_INFO;
        char log_buffer[4096];
@@ -76,6 +76,10 @@ static void doKlogd(void)
        /* "Open the log. Currently a NOP." */
        klogctl(1, NULL, 0);
 
+       /* Set level of kernel console messaging.. */
+       if (console_log_level)
+               klogctl(8, NULL, console_log_level);
+
        syslog_msg(LOG_SYSLOG, LOG_NOTICE, "klogd started: " BB_BANNER);
 
        while (1) {
@@ -125,10 +129,23 @@ extern int klogd_main(int argc, char **argv)
        /* no options, no getopt */
        int opt;
        int doFork = TRUE;
+       unsigned char console_log_level = 7;
 
        /* do normal option parsing */
-       while ((opt = getopt(argc, argv, "n")) > 0) {
+       while ((opt = getopt(argc, argv, "c:n")) > 0) {
                switch (opt) {
+               case 'c':
+                       if ((optarg == NULL) || (optarg[1] != '\0')) {
+                               show_usage();
+                       }
+                       /* Valid levels are between 1 and 8 */
+                       console_log_level = *optarg - '1';
+                       if (console_log_level > 7) {
+                               show_usage();
+                       }
+                       console_log_level++;
+                       
+                       break;
                case 'n':
                        doFork = FALSE;
                        break;
@@ -145,7 +162,7 @@ extern int klogd_main(int argc, char **argv)
                error_msg_and_die("daemon not supported");
 #endif
        }
-       doKlogd();
+       doKlogd(console_log_level);
 
        return EXIT_SUCCESS;
 }