diff options
Diffstat (limited to 'sysdep/unix/config.Y')
-rw-r--r-- | sysdep/unix/config.Y | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/sysdep/unix/config.Y b/sysdep/unix/config.Y new file mode 100644 index 0000000..bd9c382 --- /dev/null +++ b/sysdep/unix/config.Y @@ -0,0 +1,62 @@ +/* + * BIRD -- UNIX Configuration + * + * (c) 1999 Martin Mares <mj@ucw.cz> + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +CF_HDR + +#include "lib/unix.h" + +CF_DECLS + +CF_KEYWORDS(LOG, SYSLOG, ALL, DEBUG, TRACE, INFO, REMOTE, WARNING, ERROR, AUTH, FATAL, BUG) + +%type <i> log_mask log_mask_list log_cat + +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 ';' { + struct log_config *c = cfg_allocz(sizeof(struct log_config)); + c->mask = $3; + add_tail(&new_config->logfiles, &c->n); + } + ; + +log_mask: + ALL { $$ = ~0; } + | '{' log_mask_list '}' { $$ = $2; } + ; + +log_mask_list: + log_cat { $$ = 1 << $1; } + | log_mask_list ',' log_cat { $$ = $1 | (1 << $3); } + ; + +log_cat: + DEBUG { $$ = L_DEBUG[0]; } + | TRACE { $$ = L_TRACE[0]; } + | INFO { $$ = L_INFO[0]; } + | REMOTE { $$ = L_REMOTE[0]; } + | WARNING { $$ = L_WARN[0]; } + | ERROR { $$ = L_ERR[0]; } + | AUTH { $$ = L_AUTH[0]; } + | FATAL { $$ = L_FATAL[0]; } + | BUG { $$ = L_BUG[0]; } + ; + +CF_CODE + +CF_END |