Merge branch 'fticks_syslog2'
authorLinus Nordberg <linus@nordu.net>
Mon, 12 Dec 2011 14:42:50 +0000 (15:42 +0100)
committerLinus Nordberg <linus@nordu.net>
Mon, 12 Dec 2011 14:42:50 +0000 (15:42 +0100)
debug.c
debug.h
fticks.c
radsecproxy.c
radsecproxy.conf-example
radsecproxy.conf.5.xml
radsecproxy.h

diff --git a/debug.c b/debug.c
index d8cf6f2..7596303 100644 (file)
--- a/debug.c
+++ b/debug.c
@@ -28,6 +28,9 @@ static uint8_t debug_level = DBG_INFO;
 static char *debug_filepath = NULL;
 static FILE *debug_file = NULL;
 static int debug_syslogfacility = 0;
+#if defined(WANT_FTICKS)
+static int fticks_syslogfacility = 0;
+#endif
 static uint8_t debug_timestamp = 0;
 
 void debug_init(char *ident) {
@@ -64,40 +67,60 @@ uint8_t debug_get_level() {
     return debug_level;
 }
 
-int debug_set_destination(char *dest) {
-    static const char *facstrings[] = { "LOG_DAEMON", "LOG_MAIL", "LOG_USER", "LOG_LOCAL0",
-                                       "LOG_LOCAL1", "LOG_LOCAL2", "LOG_LOCAL3", "LOG_LOCAL4",
-                                       "LOG_LOCAL5", "LOG_LOCAL6", "LOG_LOCAL7", NULL };
-    static const int facvals[] = { LOG_DAEMON, LOG_MAIL, LOG_USER, LOG_LOCAL0,
-                                  LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4,
-                                  LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7 };
+int debug_set_destination(char *dest, int log_type) {
+    static const char *facstrings[] = {
+        "LOG_DAEMON", "LOG_MAIL", "LOG_USER", "LOG_LOCAL0",
+       "LOG_LOCAL1", "LOG_LOCAL2", "LOG_LOCAL3", "LOG_LOCAL4",
+       "LOG_LOCAL5", "LOG_LOCAL6", "LOG_LOCAL7", NULL };
+    static const int facvals[] = {
+        LOG_DAEMON, LOG_MAIL, LOG_USER, LOG_LOCAL0,
+       LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4,
+       LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7 };
     extern int errno;
     int i;
 
     if (!strncasecmp(dest, "file:///", 8)) {
-       debug_filepath = stringcopy(dest + 7, 0);
-       debug_file = fopen(debug_filepath, "a");
-       if (!debug_file) {
-           debug_file = stderr;
-           debugx(1, DBG_ERR, "Failed to open logfile %s\n%s",
-                  debug_filepath, strerror(errno));
+       if (log_type != LOG_TYPE_FTICKS) {
+           debug_filepath = stringcopy(dest + 7, 0);
+           debug_file = fopen(debug_filepath, "a");
+           if (!debug_file) {
+               debug_file = stderr;
+               debugx(1, DBG_ERR, "Failed to open logfile %s\n%s",
+                       debug_filepath, strerror(errno));
+           }
+           setvbuf(debug_file, NULL, _IONBF, 0);
+       } else {
+           debug(DBG_WARN, "FTicksSyslogFacility starting with file:/// not "
+                  "permitted, assuming default F-Ticks destination");
        }
-       setvbuf(debug_file, NULL, _IONBF, 0);
        return 1;
     }
-    if (!strncasecmp(dest, "x-syslog://", 11)) {
-       dest += 11;
-       if (*dest == '/')
-           dest++;
+    if (!strncasecmp(dest, "x-syslog://", 11) || log_type == LOG_TYPE_FTICKS) {
+       if (!strncasecmp(dest, "x-syslog://", 11)) {
+            dest += 11;
+            if (*dest == '/')
+                dest++;
+       }
        if (*dest) {
            for (i = 0; facstrings[i]; i++)
                if (!strcasecmp(dest, facstrings[i]))
                    break;
            if (!facstrings[i])
                debugx(1, DBG_ERR, "Unknown syslog facility %s", dest);
-           debug_syslogfacility = facvals[i];
-       } else
-           debug_syslogfacility = LOG_DAEMON;
+           if (log_type != LOG_TYPE_FTICKS)
+               debug_syslogfacility = facvals[i];
+#if defined(WANT_FTICKS)
+            else if (log_type == LOG_TYPE_FTICKS)
+               fticks_syslogfacility = facvals[i];
+#endif
+       } else {
+            if (log_type != LOG_TYPE_FTICKS)
+                debug_syslogfacility = LOG_DAEMON;
+#if defined(WANT_FTICKS)
+            else if (log_type == LOG_TYPE_FTICKS)
+                fticks_syslogfacility = 0;
+#endif
+       }
        openlog(debug_ident, LOG_PID, debug_syslogfacility);
        return 1;
     }
@@ -213,6 +236,20 @@ void debugerrnox(int err, uint8_t level, char *format, ...) {
     exit(err);
 }
 
+#if defined(WANT_FTICKS)
+void fticks_debug(const char *format, ...) {
+    int priority;
+    va_list ap;
+    va_start(ap, format);
+    if (!debug_syslogfacility && !fticks_syslogfacility)
+       debug_logit(0xff, format, ap);
+    else {
+       priority = LOG_DEBUG | fticks_syslogfacility;
+       vsyslog(priority, format, ap);
+       va_end(ap);
+    }
+}
+#endif
 /* Local Variables: */
 /* c-file-style: "stroustrup" */
 /* End: */
diff --git a/debug.h b/debug.h
index d9b48c1..3ed751c 100644 (file)
--- a/debug.h
+++ b/debug.h
@@ -17,6 +17,9 @@
 #define DBG_WARN 64
 #define DBG_ERR 128
 
+#define LOG_TYPE_DEBUG 0
+#define LOG_TYPE_FTICKS 1
+
 void debug_init(char *ident);
 void debug_set_level(uint8_t level);
 void debug_timestamp_on();
@@ -25,8 +28,11 @@ void debug(uint8_t level, char *format, ...);
 void debugx(int status, uint8_t level, char *format, ...);
 void debugerrno(int err, uint8_t level, char *format, ...);
 void debugerrnox(int err, uint8_t level, char *format, ...);
-int debug_set_destination(char *dest);
+int debug_set_destination(char *dest, int log_type);
 void debug_reopen_log();
+#if defined(WANT_FTICKS)
+void fticks_debug(const char *format, ...);
+#endif
 
 /* Local Variables: */
 /* c-file-style: "stroustrup" */
index 0918aa5..e2dee19 100644 (file)
--- a/fticks.c
+++ b/fticks.c
@@ -152,7 +152,7 @@ fticks_log(const struct options *options,
            }
        }
     }
-    debug(0xff,
+    fticks_debug(
          "F-TICKS/eduroam/1.0#REALM=%s#VISCOUNTRY=%s#%sCSI=%s#RESULT=%s#",
          realm,
          client->conf->fticks_viscountry,
index c70ab5c..d08426e 100644 (file)
@@ -3093,6 +3093,7 @@ void getmainconfig(const char *configfile) {
            "FTicksReporting", CONF_STR, &fticks_reporting_str,
            "FTicksMAC", CONF_STR, &fticks_mac_str,
            "FTicksKey", CONF_STR, &fticks_key_str,
+           "FTicksSyslogFacility", CONF_STR, &options.ftickssyslogfacility,
 #endif
            NULL
            ))
@@ -3247,8 +3248,18 @@ int radsecproxy_main(int argc, char **argv) {
        options.loglevel = loglevel;
     else if (options.loglevel)
        debug_set_level(options.loglevel);
-    if (!foreground)
-       debug_set_destination(options.logdestination ? options.logdestination : "x-syslog:///");
+    if (!foreground) {
+       debug_set_destination(options.logdestination
+                              ? options.logdestination
+                              : "x-syslog:///", LOG_TYPE_DEBUG);
+#if defined(WANT_FTICKS)
+       if (options.ftickssyslogfacility) {
+            debug_set_destination(options.ftickssyslogfacility,
+                                  LOG_TYPE_FTICKS);
+            free(options.ftickssyslogfacility);
+       }
+#endif
+    }
     free(options.logdestination);
 
     if (!list_first(clconfs))
index 2c1b35b..411c47e 100644 (file)
 #FTicksReporting None
 #FTicksMAC Static
 
+# You can optionally specify FTicksSyslogFacility to use a dedicated 
+# syslog facility for F-Ticks messages. This allows easy filtering 
+# of F-Ticks messages.
+# For F-Ticks messages always LOG_DEBUG level is used.
+# Please note that FTicksSyslogFacility cannot specify a file (file:///...)
+#FTicksSyslogFacility  log_local1
+#FTicksSyslogFacility  x-syslog:///log_local1 
+
 # There is an option for doing some simple loop prevention.  Note that
 # the LoopPrevention directive can be used in server blocks too,
 # overriding what's set here in the basic settings.
index 560cb2a..4fb9476 100644 (file)
@@ -243,6 +243,25 @@ blocktype name {
       </varlistentry>
 
       <varlistentry>
+        <term><literal>FTicksSyslogFacility</literal></term>
+        <listitem>
+         <para>
+           The FTicksSyslogFacility option is used to specify a
+           dedicated syslog facility for F-Ticks messages.  This
+           allows for easier filtering of F-Ticks messages.  If no
+           FTicksSyslogFacility option is given, F-Ticks messages are
+           written to what the LogDestination option specifies.
+         </para>
+         <para>
+           F-Ticks messages are always logged using the log level
+           LOG_DEBUG.  Note that specifying a file in
+           FTicksSyslogFacility (using the file:/// prefix) is
+           not supported.
+         </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><literal>ListenUDP</literal></term>
         <listitem>
          <para>
index 08e98b2..385f15b 100644 (file)
@@ -55,6 +55,7 @@ enum rsp_fticks_mac_type {
 
 struct options {
     char *logdestination;
+    char *ftickssyslogfacility;
     char *ttlattr;
     uint32_t ttlattrtype[2];
     uint8_t addttl;