Re: freeradius 1.1.6 / syslog problems
Jay Banks wrote:
Here is the same problem, found in the archives for this list, which was
posted back in January of 2004:
BUG?? Couldn't open syslog/radius.log for logging: Not a directory
Problem Summary: radiusd: radiusd: Couldn't open syslog/radius.log for
logging: Not a directory
Problem Detials: It appears that freeradius is attempting to log to a file
when asked to to log to the syslog. Listed below is the config settings and
init script to confirm correct settings. In looking at the source, it
appears that RADLOG_SYSLOG is never defined and as such has a null value
when being evaluated in the following code snippets:
*************radiusd.c**********************
#if HAVE_SYSLOG_H
/*
* If they asked for syslog, then give it to them.
* Also, initialize the logging facility with the
* configuration that they asked for.
*/
if (strcmp(radlog_dir, "syslog") == 0) {
openlog(progname, LOG_PID, syslog_facility);
radlog_dest = RADLOG_SYSLOG;
}
/* Do you want a warning if -g is used without a -l to activate it?
*/
#endif
if (strcmp(radlog_dir, "stdout") == 0) {
radlog_dest = RADLOG_STDOUT;
} else if (strcmp(radlog_dir, "stderr") == 0) {
radlog_dest = RADLOG_STDERR;
}
RADLOG_SYSLOG is defined, at least in 1.1.6. The problem is that 'radlog_dest'
has a default setting of:
radlog_dest_t radlog_dest = RADLOG_FILES;
And the above processing of the special 'syslog/stdout/stderr' keywords in
'radlog_dir' which changes 'radlog_deest' to RADLOG_SYSLOG, does not take
place until after the config file(s) have been read and modules have been
setup by setup_modules().
This means if anything calls radlog()/vradlog() before, then radlog_dest will
contain RADLOG_FILES, and the value from 'radlog_dir' will be suffixed with
the default log file name, which gives 'syslog/radius.log'.
A simple solution to this problem would be to change the default setting of
'radlog_dest' to RADLOG_SYSLOG and recompile. But then you wont be able to
ever log to a file again, which might be ok if you intent on using syslog only
anyway.
The better way is probably moving the code block, that calls setup_modules()
after the block that sets up 'radlog_dest' according to the special values
from radlog_dir. So the radlog_dest variable would already been set correctly
when setup_modules() runs.
Anyway, the best solution would be to have a separate commandline switch,
whose sole purpose is to set the log destination, and which is made effective
immediately when commandline option processing occurs. i.e.
radiusd -g files (*default*)
radiusd -g syslog@daemon
radiusd -g stdout
radiusd -g stderr
The current '-g' commandline option, which only sets the syslog facility is
BTW not documented in the program usage output.
best regard, Andreas
--
Keep it icy man.
I don't want to end up a corpse before my time because you were daydreaming.
This archive was generated by a fusion of
Pipermail (Mailman edition) and
MHonArc.