F-Ticks logging changes
authorMaja Gorecka-Wolniewicz <mgw@puma.uci.umk.pl>
Tue, 22 Nov 2011 08:52:53 +0000 (09:52 +0100)
committerLinus Nordberg <linus@nordu.net>
Mon, 12 Dec 2011 10:21:53 +0000 (11:21 +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..9a3512b 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,41 +67,59 @@ uint8_t debug_get_level() {
     return debug_level;
 }
 
-int debug_set_destination(char *dest) {
+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 };
+       "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 };
+       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!=FTICKS_LOG) {
+           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==FTICKS_LOG)) {
+       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;
-       openlog(debug_ident, LOG_PID, debug_syslogfacility);
+           if (log_type==FTICKS_LOG)
+               fticks_syslogfacility = facvals[i];
+           else
+               debug_syslogfacility = facvals[i];
+       } else {
+               if (log_type==FTICKS_LOG)
+                  fticks_syslogfacility = 0;
+               else
+                  debug_syslogfacility = LOG_DAEMON;
+       }
+       if (log_type==FTICKS_LOG) {
+               if (fticks_syslogfacility && !debug_syslogfacility) {
+                   openlog(debug_ident, LOG_PID, fticks_syslogfacility);
+               }
+       } else 
+               openlog(debug_ident, LOG_PID, debug_syslogfacility);
        return 1;
     }
     debug(DBG_ERR, "Unknown log destination, exiting %s", dest);
@@ -213,6 +234,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..e3acb43 100644 (file)
--- a/debug.h
+++ b/debug.h
@@ -17,6 +17,9 @@
 #define DBG_WARN 64
 #define DBG_ERR 128
 
+#define DEBUG_LOG 0
+#define FTICKS_LOG 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 l);
 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 303aba4..426b65b 100644 (file)
@@ -1668,7 +1668,7 @@ void replyh(struct server *server, unsigned char *buf) {
     }
 
 #if defined(WANT_FTICKS)
-    if (msg->code == RAD_Access_Accept || msg->code == RAD_Access_Reject)
+    if (msg->code == RAD_Access_Accept || msg->code == RAD_Access_Reject) 
        if (options.fticks_reporting && from->conf->fticks_viscountry != NULL)
            fticks_log(&options, from, msg, rqout);
 #endif
@@ -3082,6 +3082,7 @@ void getmainconfig(const char *configfile) {
 #endif
            "Rewrite", CONF_CBK, confrewrite_cb, NULL,
 #if defined(WANT_FTICKS)
+           "FTicksSyslogFacility", CONF_STR, &options.ftickssyslogfacility, 
            "FTicksReporting", CONF_STR, &fticks_reporting_str,
            "FTicksMAC", CONF_STR, &fticks_mac_str,
            "FTicksKey", CONF_STR, &fticks_key_str,
@@ -3239,8 +3240,15 @@ 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:///", DEBUG_LOG);
+#if defined(WANT_FTICKS)
+       if (options.ftickssyslogfacility) {
+               debug_set_destination(options.ftickssyslogfacility, FTICKS_LOG);
+               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 bd75692..0b7ee05 100644 (file)
@@ -243,6 +243,24 @@ 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 easy filtering of F-Ticks messages.
+           By default, if FTicksSyslogFacility is not given,
+           F-Ticks messages are written to the LogDestination. 
+         </para>
+         <para>
+           For F-Ticks messages always LOG_DEBUG level is used.
+           Note that FTicksSyslogFacility value specifying a file 
+           (via file:/// prefix) is ignored.
+         </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;