=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/doas/parse.y,v retrieving revision 1.18 retrieving revision 1.19 diff -c -r1.18 -r1.19 *** src/usr.bin/doas/parse.y 2016/06/07 16:49:23 1.18 --- src/usr.bin/doas/parse.y 2016/06/27 15:41:17 1.19 *************** *** 1,4 **** ! /* $OpenBSD: parse.y,v 1.18 2016/06/07 16:49:23 tedu Exp $ */ /* * Copyright (c) 2015 Ted Unangst * --- 1,4 ---- ! /* $OpenBSD: parse.y,v 1.19 2016/06/27 15:41:17 tedu Exp $ */ /* * Copyright (c) 2015 Ted Unangst * *************** *** 48,53 **** --- 48,54 ---- struct rule **rules; int nrules, maxrules; int parse_errors = 0; + int obsolete_warned = 0; void yyerror(const char *, ...); int yylex(void); *************** *** 56,62 **** %} %token TPERMIT TDENY TAS TCMD TARGS ! %token TNOPASS TKEEPENV %token TSTRING %% --- 57,63 ---- %} %token TPERMIT TDENY TAS TCMD TARGS ! %token TNOPASS TKEEPENV TSETENV %token TSTRING %% *************** *** 97,111 **** $$.envlist = $2.envlist; } | TDENY { $$.action = DENY; } ; ! options: /* none */ ! | options option { $$.options = $1.options | $2.options; $$.envlist = $1.envlist; if ($2.envlist) { if ($$.envlist) { ! yyerror("can't have two keepenv sections"); YYERROR; } else $$.envlist = $2.envlist; --- 98,116 ---- $$.envlist = $2.envlist; } | TDENY { $$.action = DENY; + $$.options = 0; + $$.envlist = NULL; } ; ! options: /* none */ { ! $$.options = 0; ! $$.envlist = NULL; ! } | options option { $$.options = $1.options | $2.options; $$.envlist = $1.envlist; if ($2.envlist) { if ($$.envlist) { ! yyerror("can't have two setenv sections"); YYERROR; } else $$.envlist = $2.envlist; *************** *** 113,123 **** } ; option: TNOPASS { $$.options = NOPASS; } | TKEEPENV { $$.options = KEEPENV; } | TKEEPENV '{' envlist '}' { ! $$.options = KEEPENV; $$.envlist = $3.envlist; } ; envlist: /* empty */ { --- 118,137 ---- } ; option: TNOPASS { $$.options = NOPASS; + $$.envlist = NULL; } | TKEEPENV { $$.options = KEEPENV; + $$.envlist = NULL; } | TKEEPENV '{' envlist '}' { ! $$.options = 0; ! if (!obsolete_warned) { ! warnx("keepenv with list is obsolete"); ! obsolete_warned = 1; ! } $$.envlist = $3.envlist; + } | TSETENV '{' envlist '}' { + $$.options = 0; + $$.envlist = $3.envlist; } ; envlist: /* empty */ { *************** *** 195,200 **** --- 209,215 ---- { "args", TARGS }, { "nopass", TNOPASS }, { "keepenv", TKEEPENV }, + { "setenv", TSETENV }, }; int