turn log styles into strings from yacc point of view

having styles as reserved keywords means that variables / macros can't
be called `common', `condensed', etc...  which is not great and not
obvious either.

Instead, let's keep the log styles as strings and match on them.  This
also allows to have a slightly better error message in case of a typo.

See: https://codeberg.org/op/gmid/issues/1
This commit is contained in:
Omar Polo 2024-01-30 09:30:50 +00:00
parent 574f71f7a3
commit f862d389ff
1 changed files with 15 additions and 18 deletions

33
parse.y
View File

@ -1,7 +1,7 @@
%{ %{
/* /*
* Copyright (c) 2021, 2022, 2023 Omar Polo <op@omarpolo.com> * Copyright (c) 2021-2024 Omar Polo <op@omarpolo.com>
* Copyright (c) 2018 Florian Obser <florian@openbsd.org> * Copyright (c) 2018 Florian Obser <florian@openbsd.org>
* Copyright (c) 2004, 2005 Esben Norby <norby@openbsd.org> * Copyright (c) 2004, 2005 Esben Norby <norby@openbsd.org>
* Copyright (c) 2004 Ryan McBride <mcbride@openbsd.org> * Copyright (c) 2004 Ryan McBride <mcbride@openbsd.org>
@ -125,12 +125,12 @@ typedef struct {
%token ACCESS ALIAS AUTO %token ACCESS ALIAS AUTO
%token BLOCK %token BLOCK
%token CA CERT CHROOT CLIENT COMBINED COMMON CONDENSED %token CA CERT CHROOT CLIENT
%token DEFAULT %token DEFAULT
%token FACILITY FASTCGI FOR_HOST %token FACILITY FASTCGI FOR_HOST
%token INCLUDE INDEX IPV6 %token INCLUDE INDEX IPV6
%token KEY %token KEY
%token LANG LEGACY LISTEN LOCATION LOG %token LANG LISTEN LOCATION LOG
%token OCSP OFF ON %token OCSP OFF ON
%token PARAM PORT PREFORK PROTO PROTOCOLS PROXY %token PARAM PORT PREFORK PROTO PROTOCOLS PROXY
%token RELAY_TO REQUIRE RETURN ROOT %token RELAY_TO REQUIRE RETURN ROOT
@ -264,17 +264,18 @@ logopt : ACCESS string {
free(conf->log_access); free(conf->log_access);
conf->log_access = $2; conf->log_access = $2;
} }
| STYLE COMMON { | STYLE string {
conf->log_format = LOG_FORMAT_COMMON; if (!strcmp("combined", $2))
} conf->log_format = LOG_FORMAT_COMBINED;
| STYLE COMBINED { else if (!strcmp("common", $2))
conf->log_format = LOG_FORMAT_COMBINED; conf->log_format = LOG_FORMAT_COMMON;
} else if (!strcmp("condensed", $2))
| STYLE CONDENSED { conf->log_format = LOG_FORMAT_CONDENSED;
conf->log_format = LOG_FORMAT_CONDENSED; else if (!strcmp("legacy", $2))
} conf->log_format = LOG_FORMAT_LEGACY;
| STYLE LEGACY { else
conf->log_format = LOG_FORMAT_LEGACY; yyerror("unknown log style: %s", $2);
free($2);
} }
| SYSLOG FACILITY string { | SYSLOG FACILITY string {
const char *str = $3; const char *str = $3;
@ -654,9 +655,6 @@ static const struct keyword {
{"cert", CERT}, {"cert", CERT},
{"chroot", CHROOT}, {"chroot", CHROOT},
{"client", CLIENT}, {"client", CLIENT},
{"combined", COMBINED},
{"common", COMMON},
{"condensed", CONDENSED},
{"default", DEFAULT}, {"default", DEFAULT},
{"facility", FACILITY}, {"facility", FACILITY},
{"fastcgi", FASTCGI}, {"fastcgi", FASTCGI},
@ -666,7 +664,6 @@ static const struct keyword {
{"ipv6", IPV6}, {"ipv6", IPV6},
{"key", KEY}, {"key", KEY},
{"lang", LANG}, {"lang", LANG},
{"legacy", LEGACY},
{"listen", LISTEN}, {"listen", LISTEN},
{"location", LOCATION}, {"location", LOCATION},
{"log", LOG}, {"log", LOG},