From b5bdc1d887a519de1d96d6da4534fbbe1210ee2d Mon Sep 17 00:00:00 2001 From: Maja Gorecka-Wolniewicz Date: Tue, 22 Nov 2011 09:52:53 +0100 Subject: [PATCH] F-Ticks logging changes --- debug.c | 60 +++++++++++++++++++++++++++++++++++++++++++----- debug.h | 4 ++++ fticks.c | 2 +- radsecproxy.c | 15 ++++++++++-- radsecproxy.conf-example | 7 ++++++ radsecproxy.h | 1 + 6 files changed, 80 insertions(+), 9 deletions(-) diff --git a/debug.c b/debug.c index d8cf6f2..79d0f9d 100644 --- a/debug.c +++ b/debug.c @@ -28,7 +28,16 @@ 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; +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 }; void debug_init(char *ident) { debug_file = stderr; @@ -64,13 +73,34 @@ uint8_t debug_get_level() { return debug_level; } +#if defined(WANT_FTICKS) +int debug_set_ftickssyslogfacility(char *dest) { + int i; + 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]) { + debug(DBG_ERR, "Unknown syslog facility %s for F-Ticks, assuming default", dest); + fticks_syslogfacility = 0; + } else + fticks_syslogfacility = facvals[i]; + } else { + fticks_syslogfacility = 0; + } + if (fticks_syslogfacility && !debug_syslogfacility) { + openlog(debug_ident, LOG_PID, fticks_syslogfacility); + } + return 1; +} +#endif + 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 }; extern int errno; int i; @@ -213,6 +243,24 @@ 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 { + if (fticks_syslogfacility) { + priority = LOG_DEBUG|fticks_syslogfacility; + } else { + priority = LOG_DEBUG; + } + 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..c929e6e 100644 --- a/debug.h +++ b/debug.h @@ -26,7 +26,11 @@ 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_ftickssyslogfacility(char *dest); void debug_reopen_log(); +#if defined(WANT_FTICKS) +void fticks_debug(const char *format, ...); +#endif /* Local Variables: */ /* c-file-style: "stroustrup" */ diff --git a/fticks.c b/fticks.c index 0918aa5..e2dee19 100644 --- 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, diff --git a/radsecproxy.c b/radsecproxy.c index 303aba4..ef27f0f 100644 --- a/radsecproxy.c +++ b/radsecproxy.c @@ -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,18 @@ int radsecproxy_main(int argc, char **argv) { options.loglevel = loglevel; else if (options.loglevel) debug_set_level(options.loglevel); - if (!foreground) + if (!foreground) { debug_set_destination(options.logdestination ? options.logdestination : "x-syslog:///"); +#if defined(WANT_FTICKS) + if (options.ftickssyslogfacility) { + debug(DBG_WARN, "FTicksSyslogFacility is %s ", options.ftickssyslogfacility); + debug_set_ftickssyslogfacility(options.ftickssyslogfacility); + free(options.ftickssyslogfacility); + } else { + debug(DBG_INFO, "FTicksSyslogFacility not set"); + } +#endif + } free(options.logdestination); if (!list_first(clconfs)) diff --git a/radsecproxy.conf-example b/radsecproxy.conf-example index 2c1b35b..570e314 100644 --- a/radsecproxy.conf-example +++ b/radsecproxy.conf-example @@ -57,6 +57,13 @@ #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. +# 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.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; -- 2.1.4