Eduroam F-ticks and syslog

Matthew Newton mcn4 at leicester.ac.uk
Mon Feb 6 00:45:20 CET 2012


Hi,

On Sun, Feb 05, 2012 at 06:31:02PM +0400, Andranik Hayrapetyan wrote:
> It sends f-ticks to syslog, and syslog place f-ticks in /var/log/massage
> withe many other log information.
> How can I set here facility for syslog (local0 eg.) , to be able to control
> the f-ticks and place them to the file I want or send to eduroam f-ticks
> server???

There's currently no option to set the syslog facility
specifically in rlm_linelog. It will always log to the same
syslog_facility set in radiusd.conf.

If you want it different to the main server syslog, try the patch
below (majority of which taken from mainconfig.c), or pull from
https://github.com/mcnewton/freeradius-server/commit/089c108c472a6a9d2a21ae86b41343b06274f95d

In modules/linelog, set:

linelog {
  filename = syslog
  syslog_facility = local0
  ...
}

Alternatively, use syslog-ng (for example) and filter based on the
content of the log string.

Cheers,

Matthew


>From 089c108c472a6a9d2a21ae86b41343b06274f95d Mon Sep 17 00:00:00 2001
From: Matthew Newton <mcn4 at leicester.ac.uk>
Date: Sun, 5 Feb 2012 23:05:27 +0000
Subject: [PATCH] Add syslog_facility option to rlm_linelog

---
 src/modules/rlm_linelog/rlm_linelog.c |   86 ++++++++++++++++++++++++++++++++-
 1 files changed, 85 insertions(+), 1 deletions(-)

diff --git a/src/modules/rlm_linelog/rlm_linelog.c b/src/modules/rlm_linelog/rlm_linelog.c
index 1257555..98b264d 100644
--- a/src/modules/rlm_linelog/rlm_linelog.c
+++ b/src/modules/rlm_linelog/rlm_linelog.c
@@ -48,11 +48,80 @@ RCSID("$Id$")
 #endif
 
 /*
+ * Syslog facilities taken from main/mainconfig.c
+ * Alternatively, it could be not declared static there, and
+ * be declared here as extern const FR_NAME_NUMBER str2fac[];
+ */
+static const FR_NAME_NUMBER str2fac[] = {
+#ifdef LOG_KERN
+	{ "kern", LOG_KERN },
+#endif
+#ifdef LOG_USER
+	{ "user", LOG_USER },
+#endif
+#ifdef LOG_MAIL
+	{ "mail", LOG_MAIL },
+#endif
+#ifdef LOG_DAEMON
+	{ "daemon", LOG_DAEMON },
+#endif
+#ifdef LOG_AUTH
+	{ "auth", LOG_AUTH },
+#endif
+#ifdef LOG_LPR
+	{ "lpr", LOG_LPR },
+#endif
+#ifdef LOG_NEWS
+	{ "news", LOG_NEWS },
+#endif
+#ifdef LOG_UUCP
+	{ "uucp", LOG_UUCP },
+#endif
+#ifdef LOG_CRON
+	{ "cron", LOG_CRON },
+#endif
+#ifdef LOG_AUTHPRIV
+	{ "authpriv", LOG_AUTHPRIV },
+#endif
+#ifdef LOG_FTP
+	{ "ftp", LOG_FTP },
+#endif
+#ifdef LOG_LOCAL0
+	{ "local0", LOG_LOCAL0 },
+#endif
+#ifdef LOG_LOCAL1
+	{ "local1", LOG_LOCAL1 },
+#endif
+#ifdef LOG_LOCAL2
+	{ "local2", LOG_LOCAL2 },
+#endif
+#ifdef LOG_LOCAL3
+	{ "local3", LOG_LOCAL3 },
+#endif
+#ifdef LOG_LOCAL4
+	{ "local4", LOG_LOCAL4 },
+#endif
+#ifdef LOG_LOCAL5
+	{ "local5", LOG_LOCAL5 },
+#endif
+#ifdef LOG_LOCAL6
+	{ "local6", LOG_LOCAL6 },
+#endif
+#ifdef LOG_LOCAL7
+	{ "local7", LOG_LOCAL7 },
+#endif
+	{ NULL, -1 }
+};
+
+
+/*
  *	Define a structure for our module configuration.
  */
 typedef struct rlm_linelog_t {
 	CONF_SECTION	*cs;
 	char		*filename;
+	char		*syslog_facility;
+	int		facility;
 	int		permissions;
 	char		*group;
 	char		*line;
@@ -71,6 +140,8 @@ typedef struct rlm_linelog_t {
 static const CONF_PARSER module_config[] = {
 	{ "filename",  PW_TYPE_STRING_PTR,
 	  offsetof(rlm_linelog_t,filename), NULL,  NULL},
+	{ "syslog_facility",  PW_TYPE_STRING_PTR,
+	  offsetof(rlm_linelog_t,syslog_facility), NULL,  NULL},
 	{ "permissions",  PW_TYPE_INTEGER,
 	  offsetof(rlm_linelog_t,permissions), NULL,  "0600"},
 	{ "group",  PW_TYPE_STRING_PTR,
@@ -125,6 +196,19 @@ static int linelog_instantiate(CONF_SECTION *conf, void **instance)
 		linelog_detach(inst);
 		return -1;
 	}
+#else
+	inst->facility = 0;
+
+	if (inst->syslog_facility) {
+		inst->facility = fr_str2int(str2fac, inst->syslog_facility, -1);
+		if (inst->facility < 0) {
+			radlog(L_ERR, "rlm_linelog: Bad syslog facility '%s'", inst->syslog_facility);
+			linelog_detach(inst);
+			return -1;
+		}
+	}
+
+	inst->facility |= LOG_INFO;
 #endif
 
 	if (!inst->line) {
@@ -314,7 +398,7 @@ static int do_linelog(void *instance, REQUEST *request)
 
 #ifdef HAVE_SYSLOG_H
 	} else {
-		syslog(LOG_INFO, "%s", line);
+		syslog(inst->facility, "%s", line);
 #endif
 	}
 
-- 
1.7.2.5


-- 
Matthew Newton, Ph.D. <mcn4 at le.ac.uk>

Systems Architect (UNIX and Networks), Network Services,
I.T. Services, University of Leicester, Leicester LE1 7RH, United Kingdom

For IT help contact helpdesk extn. 2253, <ithelp at le.ac.uk>



More information about the Freeradius-Users mailing list