diff options
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 42 |
1 files changed, 29 insertions, 13 deletions
@@ -1,4 +1,4 @@ -/* $OpenBSD: parse.y,v 1.49 2015/01/03 23:54:25 reyk Exp $ */ +/* $OpenBSD: parse.y,v 1.48 2015/01/03 16:20:31 reyk Exp $ */ /* * Copyright (c) 2007 - 2014 Reyk Floeter <reyk@openbsd.org> @@ -130,7 +130,7 @@ typedef struct { %token ACCESS ALIAS AUTO BACKLOG BODY BUFFER CERTIFICATE CHROOT CIPHERS COMMON %token COMBINED CONNECTION DIRECTORY ERR FCGI INDEX IP KEY LISTEN LOCATION %token LOG LOGDIR MAXIMUM NO NODELAY ON PORT PREFORK REQUEST REQUESTS ROOT -%token SACK SERVER SOCKET STYLE SYSLOG TCP TIMEOUT TLS TYPES +%token SACK SERVER SOCKET STRIP STYLE SYSLOG TCP TIMEOUT TLS TYPES %token ERROR INCLUDE %token <v.string> STRING %token <v.number> NUMBER @@ -435,17 +435,8 @@ serveroptsl : LISTEN ON STRING opttls port { YYERROR; } } tls - | ROOT STRING { - if (strlcpy(srv->srv_conf.root, $2, - sizeof(srv->srv_conf.root)) >= - sizeof(srv->srv_conf.root)) { - yyerror("document root too long"); - free($2); - YYERROR; - } - free($2); - srv->srv_conf.flags |= SRVFLAG_ROOT; - } + | ROOT rootflags + | ROOT '{' rootflags_l '}' | DIRECTORY dirflags | DIRECTORY '{' dirflags_l '}' | logformat @@ -627,6 +618,30 @@ tlsopts : CERTIFICATE STRING { } ; +rootflags_l : rootflags comma rootflags_l + | rootflags + ; + +rootflags : STRING { + if (strlcpy(srv->srv_conf.root, $1, + sizeof(srv->srv_conf.root)) >= + sizeof(srv->srv_conf.root)) { + yyerror("document root too long"); + free($1); + YYERROR; + } + free($1); + srv->srv_conf.flags |= SRVFLAG_ROOT; + } + | STRIP NUMBER { + if ($2 < 0 || $2 > INT_MAX) { + yyerror("invalid strip number"); + YYERROR; + } + srv->srv_conf.strip = $2; + } + ; + dirflags_l : dirflags comma dirflags_l | dirflags ; @@ -964,6 +979,7 @@ lookup(char *s) { "sack", SACK }, { "server", SERVER }, { "socket", SOCKET }, + { "strip", STRIP }, { "style", STYLE }, { "syslog", SYSLOG }, { "tcp", TCP }, |