* Allow messages to be sent to syslog even if the foreground mode is invoked.
authorFranck Joncourt <franck@debian.org>
Sun, 28 Jul 2013 20:07:14 +0000 (22:07 +0200)
committerFranck Joncourt <franck@debian.org>
Sun, 28 Jul 2013 20:07:14 +0000 (22:07 +0200)
doc/fwknop.man.asciidoc
server/cmd_opts.h
server/config_init.c
server/fwknopd_common.h
server/log_msg.c

index 94d4933..cdfe3c2 100644 (file)
@@ -282,6 +282,9 @@ GENERAL OPTIONS
     some extra information about the current command and the resulting SPA
     data.
 
+*--syslog-enable*::
+    Allow messages to be sent to syslog even if the foreground mode is set.
+
 *-V, --version*::
     Display version information and exit.
 
index 3f818fe..0f7e665 100644 (file)
@@ -121,6 +121,7 @@ enum {
     PCAP_FILE,
     ENABLE_PCAP_ANY_DIRECTION,
     ROTATE_DIGEST_CACHE,
+    SYSLOG_ENABLE,
     NOOP /* Just to be a marker for the end */
 };
 
@@ -137,6 +138,7 @@ static struct option cmd_opts[] =
     {"packet-limit",        1, NULL, 'C'},
     {"digest-file",         1, NULL, 'd'},
     {"dump-config",         0, NULL, 'D'},
+    {"syslog-enable",       0, NULL,  SYSLOG_ENABLE },
     {"foreground",          0, NULL, 'f'},
     {"help",                0, NULL, 'h'},
     {"interface",           1, NULL, 'i'},
index e8e1f58..cfc93c0 100644 (file)
@@ -870,6 +870,9 @@ config_init(fko_srv_options_t *opts, int argc, char **argv)
             case 'v':
                 opts->verbose++;
                 break;
+            case SYSLOG_ENABLE:
+                opts->syslog_enable = 1;
+                break;
             case 'V':
                 fprintf(stdout, "fwknopd server %s\n", MY_VERSION);
                 clean_exit(opts, NO_FW_CLEANUP, EXIT_SUCCESS);
@@ -943,6 +946,8 @@ usage(void)
       "                           '<name>-old', and starting a new one.\n"
       " -S, --status            - Display the status of any running fwknopd process.\n"
       " -v, --verbose           - Set verbose mode.\n"
+      "     --syslog-enable     - Allow messages to be sent to syslog even if the\n"
+      "                           foreground mode is set.\n"
       " -V, --version           - Print version number.\n"
       "     --fw-list           - List all firewall rules that fwknop has created\n"
       "                           and then exit.\n"
index 6e85e39..73b4562 100644 (file)
@@ -492,6 +492,8 @@ typedef struct fko_srv_options
     */
     struct fw_config *fw_config;
 
+    /* Set to 1 when messages have to go through syslog, 0 otherwise */
+    unsigned char   syslog_enable;
 } fko_srv_options_t;
 
 extern fko_srv_options_t options;
index 85f73d3..56a0ac5 100644 (file)
@@ -109,6 +109,11 @@ init_logging(fko_srv_options_t *opts) {
             || opts->fw_list_all != 0)
         static_log_flag = LOG_STDERR | LOG_WITHOUT_SYSLOG;
 
+    /* If the user forces syslog using --syslog-enable, we remove the
+     * LOG_WITHOUT_SYSLOG flag. It means all messages will go through syslog */
+    if (opts->syslog_enable != 0)
+        static_log_flag &= ~LOG_WITHOUT_SYSLOG;
+
     /* Parse the log facility as specified in the config struct. If, for some
      * reason, it is not, fac will already be set to LOG_DAEMON.
     */
@@ -154,6 +159,7 @@ log_msg(int level, char* msg, ...)
 {
     va_list ap, apse;
 
+    /* Make sure the level is in the right range */
     if ((level & LOG_VERBOSITY_MASK) > verbosity)
         return;
 
@@ -184,8 +190,7 @@ log_msg(int level, char* msg, ...)
         return;
     }
 
-    /* Remove the log to stderr flag from the log level value.
-    */
+    /* Remove the static log flags from the level */
     level &= LOG_VERBOSITY_MASK;
 
     /* Send the message to syslog.