%token <tok> DEFAULTS_USER /* User-specific defaults entry */
%token <tok> DEFAULTS_RUNAS /* Runas-specific defaults entry */
%token <tok> DEFAULTS_CMND /* Command-specific defaults entry */
-%token <tok> RUNAS /* ( runas_list ) */
%token <tok> NOPASSWD /* no passwd req for command */
%token <tok> PASSWD /* passwd req for command (default) */
%token <tok> NOEXEC /* preload dummy execve() for cmnd */
%token <tok> USERALIAS /* User_Alias keyword */
%token <tok> RUNASALIAS /* Runas_Alias keyword */
%token <tok> ':' '=' ',' '!' '+' '-' /* union member tokens */
+%token <tok> '(' ')' /* runas tokens */
%token <tok> ERROR
%type <cmndspec> cmndspec
runasspec : /* empty */ {
$$ = NULL;
}
- | RUNAS runaslist {
+ | '(' runaslist ')' {
$$ = $2;
}
;
HOSTNAME [[:alnum:]_-]+
WORD ([^#>!=:,\(\) \t\n\\]|\\[^\n])+
+ID #-?[0-9]+
PATH \/(\\[\,:= \t#]|[^\,:=\\ \t\n#])+
ENVAR ([^#!=, \t\n\\\"]|\\[^\n])([^#=, \t\n\\\"]|\\[^\n])*
DEFVAR [a-z_]+
<INITIAL>\( {
BEGIN GOTRUNAS;
- LEXTRACE("RUNAS ");
+ LEXTRACE("( ");
return (RUNAS);
}
}
}
-<GOTRUNAS>(#[0-9-]+|{WORD}) {
+<GOTRUNAS>({ID}|{WORD}) {
/* username/uid that user can run command as */
if (!fill(yytext, yyleng))
yyterminate();
<GOTRUNAS>\) {
BEGIN INITIAL;
+ LEXTRACE(") ");
}
<GOTDEFS>({PATH}|sudoedit) {