diff options
Diffstat (limited to 'sysdep/unix/config.Y')
-rw-r--r-- | sysdep/unix/config.Y | 24 |
1 files changed, 14 insertions, 10 deletions
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 <i> log_mask log_mask_list log_cat +%type <g> 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; } |