From f78056fb2cf4554d5dcc50b5e0e79bc09ae825cf Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Mon, 6 Dec 1999 13:51:04 +0000 Subject: Allow logging to stderr as well. --- sysdep/unix/config.Y | 24 ++++++++++++++---------- sysdep/unix/io.c | 2 +- sysdep/unix/log.c | 5 ++++- 3 files changed, 19 insertions(+), 12 deletions(-) (limited to 'sysdep') diff --git a/sysdep/unix/config.Y b/sysdep/unix/config.Y index bd9c382..f0a517e 100644 --- a/sysdep/unix/config.Y +++ b/sysdep/unix/config.Y @@ -12,29 +12,33 @@ CF_HDR CF_DECLS -CF_KEYWORDS(LOG, SYSLOG, ALL, DEBUG, TRACE, INFO, REMOTE, WARNING, ERROR, AUTH, FATAL, BUG) +CF_KEYWORDS(LOG, SYSLOG, ALL, DEBUG, TRACE, INFO, REMOTE, WARNING, ERROR, AUTH, FATAL, BUG, STDERR) %type log_mask log_mask_list log_cat +%type log_file CF_GRAMMAR CF_ADDTO(conf, log_config) -log_config: LOG TEXT log_mask ';' { - struct log_config *c = cfg_allocz(sizeof(struct log_config)); - FILE *f = rfopen(new_config->pool, $2, "a"); - if (!f) cf_error("Unable to open log file `%s': %m", $2); - c->mask = $3; - c->fh = f; - add_tail(&new_config->logfiles, &c->n); - } - | LOG SYSLOG log_mask ';' { +log_config: LOG log_file log_mask ';' { struct log_config *c = cfg_allocz(sizeof(struct log_config)); + c->fh = $2; c->mask = $3; add_tail(&new_config->logfiles, &c->n); } ; +log_file: + TEXT { + FILE *f = tracked_fopen(new_config->pool, $1, "a"); + if (!f) cf_error("Unable to open log file `%s': %m", $1); + $$ = f; + } + | SYSLOG { $$ = NULL; } + | STDERR { $$ = stderr; } + ; + log_mask: ALL { $$ = ~0; } | '{' log_mask_list '}' { $$ = $2; } diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c index 7d6a6f2..45db1a1 100644 --- a/sysdep/unix/io.c +++ b/sysdep/unix/io.c @@ -83,7 +83,7 @@ static struct resclass rf_class = { }; void * -rfopen(pool *p, char *name, char *mode) +tracked_fopen(pool *p, char *name, char *mode) { FILE *f = fopen(name, mode); diff --git a/sysdep/unix/log.c b/sysdep/unix/log.c index afc30a9..b4a028d 100644 --- a/sysdep/unix/log.c +++ b/sysdep/unix/log.c @@ -167,7 +167,10 @@ log_init(int debug) void log_switch(list *l) { - current_log_list = l; + if (EMPTY_LIST(*l)) + current_log_list = &init_log_list; + else + current_log_list = l; } void -- cgit v1.2.3