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 [EMAIL PROTECTED] 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. - List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html