From: Todd C. Miller Date: Mon, 14 Aug 1995 04:07:15 +0000 (+0000) Subject: now allows command args X-Git-Tag: SUDO_1_4_0~229 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=35d2f76b147b987ed051de15ea3dc2670c2357be;p=sudo now allows command args --- diff --git a/parse.lex b/parse.lex index 33e7b6597..711b02555 100644 --- a/parse.lex +++ b/parse.lex @@ -47,8 +47,10 @@ extern YYSTYPE yylval; extern int clearaliases; int sudolineno = 1; -static int fill __P((void)); -extern void reset_aliases __P((void)); +static void fill __P((void)); +static void append __P((void)); +static char chop __P((void)); +extern void reset_aliases __P((void)); #ifdef TRACELEXER #define LEXTRACE(msg) fputs(msg, stderr) @@ -63,34 +65,60 @@ N [0-9][0-9]?[0-9]? %p 6000 %k 3500 +%s GOTCMND + %% [ \t]+ { ; } /* throw away space/tabs */ + \\\n { ++sudolineno; LEXTRACE("\n\t"); } /* throw away EOL after \ */ -\, { return ','; } /* return ',' */ -\! { return '!'; } /* return '!' */ -= { - LEXTRACE("= "); - return '='; - } /* return '=' */ -: { - LEXTRACE(": "); - return ':'; - } /* return ':' */ -\. { return '.'; } + \n { ++sudolineno; LEXTRACE("\n"); return COMMENT; } /* return newline */ + #.*\n { ++sudolineno; LEXTRACE("\n"); return COMMENT; } /* return comments */ +[^\,:=\\ \t\n#]+[:,=\n] { + BEGIN 0; + LEXTRACE("ARG"); + append(); + unput(chop()); + return(PATH); + } /* the last command line arg */ + +[^\,:=\\ \t\n#]+ { + LEXTRACE("ARG "); + append(); + } /* a command line arg */ + +\, { + LEXTRACE(", "); + return ','; + } /* return ',' */ + +\! { return '!'; } /* return '!' */ + += { + LEXTRACE("= "); + return '='; + } /* return '=' */ + +: { + LEXTRACE(": "); + return ':'; + } /* return ':' */ + +\. { return '.'; } + \+[a-zA-Z][a-zA-Z0-9_-]* { fill(); return NETGROUP; @@ -101,10 +129,17 @@ N [0-9][0-9]?[0-9]? return NTWKADDR; } -\/([a-zA-Z0-9_.+-]+\/?)+ { +\/[^\,:=\\ \t\n#]+[:,=\n] { + LEXTRACE("PATH "); + fill(); + unput(chop()); + return(PATH); + } /* a pathname with no args */ + +\/[^\,:=\\ \t\n#]+ { + BEGIN GOTCMND; LEXTRACE("PATH "); fill(); - return PATH; } /* a pathname */ [A-Z][A-Z0-9_]* { @@ -147,10 +182,26 @@ N [0-9][0-9]?[0-9]? . { return ERROR; } /* return error */ %% -static int fill() { +static void fill() { (void) strcpy(yylval.string, yytext); } +static void append() { + (void) strcat(yylval.string, " "); + (void) strcat(yylval.string, yytext); +} + +static char chop() { + int len; + char c; + + len = strlen(yylval.string); + c = yylval.string[--len]; + yylval.string[len] = '\0'; + + return(c); +} + int yywrap() { #ifdef YY_NEW_FILE