diff options
-rw-r--r-- | debug.c | 79 | ||||
-rw-r--r-- | debug.h | 8 | ||||
-rw-r--r-- | fticks.c | 2 | ||||
-rw-r--r-- | radsecproxy.c | 15 | ||||
-rw-r--r-- | radsecproxy.conf-example | 8 | ||||
-rw-r--r-- | radsecproxy.conf.5.xml | 19 | ||||
-rw-r--r-- | radsecproxy.h | 1 |
7 files changed, 107 insertions, 25 deletions
@@ -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 == FTICKS_LOG) + 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: */ @@ -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" */ @@ -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, diff --git a/radsecproxy.c b/radsecproxy.c index 303aba4..fe43cb7 100644 --- a/radsecproxy.c +++ b/radsecproxy.c @@ -3085,6 +3085,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 )) @@ -3239,8 +3240,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)) diff --git a/radsecproxy.conf-example b/radsecproxy.conf-example index 2c1b35b..411c47e 100644 --- a/radsecproxy.conf-example +++ b/radsecproxy.conf-example @@ -57,6 +57,14 @@ #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. diff --git a/radsecproxy.conf.5.xml b/radsecproxy.conf.5.xml index 560cb2a..4fb9476 100644 --- a/radsecproxy.conf.5.xml +++ b/radsecproxy.conf.5.xml @@ -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> diff --git a/radsecproxy.h b/radsecproxy.h index 08e98b2..385f15b 100644 --- a/radsecproxy.h +++ b/radsecproxy.h @@ -55,6 +55,7 @@ enum rsp_fticks_mac_type { struct options { char *logdestination; + char *ftickssyslogfacility; char *ttlattr; uint32_t ttlattrtype[2]; uint8_t addttl; |