X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=plugins%2Fsudoers%2Fgram.c;h=46e15bea2c3d8382320a106f7f8bea5e131f5e9e;hb=e8db7f6eea9b35527ddd4532affabd18a30549b5;hp=7de57f8cf736b7fc36b913d6fe76fb7c322b2466;hpb=98b9fd63cd28a3636a7cd24641b8f497eaadcd50;p=debian%2Fsudo diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 7de57f8..46e15be 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -9,10 +9,36 @@ #define yyclearin (yychar=(YYEMPTY)) #define yyerrok (yyerrflag=0) #define YYRECOVERING() (yyerrflag!=0) -#define YYPREFIX "yy" +#define yyparse sudoersparse +#define yylex sudoerslex +#define yyerror sudoerserror +#define yychar sudoerschar +#define yyval sudoersval +#define yylval sudoerslval +#define yydebug sudoersdebug +#define yynerrs sudoersnerrs +#define yyerrflag sudoerserrflag +#define yyss sudoersss +#define yysslim sudoerssslim +#define yyssp sudoersssp +#define yyvs sudoersvs +#define yyvsp sudoersvsp +#define yystacksize sudoersstacksize +#define yylhs sudoerslhs +#define yylen sudoerslen +#define yydefred sudoersdefred +#define yydgoto sudoersdgoto +#define yysindex sudoerssindex +#define yyrindex sudoersrindex +#define yygindex sudoersgindex +#define yytable sudoerstable +#define yycheck sudoerscheck +#define yyname sudoersname +#define yyrule sudoersrule +#define YYPREFIX "sudoers" #line 2 "gram.y" /* - * Copyright (c) 1996, 1998-2005, 2007-2012 + * Copyright (c) 1996, 1998-2005, 2007-2013 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -37,7 +63,6 @@ #include #include -#include #include #ifdef STDC_HEADERS # include @@ -67,7 +92,6 @@ #include "sudoers.h" /* XXX */ #include "parse.h" #include "toke.h" -#include "gram.h" /* * We must define SIZE_MAX for yacc's skeleton.c. @@ -103,33 +127,8 @@ static void add_defaults(int, struct member *, struct defaults *); static void add_userspec(struct member *, struct privilege *); static struct defaults *new_default(char *, char *, int); static struct member *new_member(char *, int); - void yyerror(const char *); - -void -yyerror(const char *s) -{ - debug_decl(yyerror, SUDO_DEBUG_PARSER) - - /* If we last saw a newline the error is on the preceding line. */ - if (last_token == COMMENT) - sudolineno--; - - /* Save the line the first error occurred on. */ - if (errorlineno == -1) { - errorlineno = sudolineno; - errorfile = estrdup(sudoers); - } - if (sudoers_warnings && s != NULL) { - LEXTRACE("<*> "); -#ifndef TRACELEXER - if (trace_print == NULL || trace_print == sudoers_trace_print) - warningx(_(">>> %s: %s near line %d <<<"), sudoers, s, sudolineno); -#endif - } - parse_error = true; - debug_return; -} -#line 122 "gram.y" +static struct sudo_digest *new_digest(int, const char *); +#line 95 "gram.y" #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { @@ -138,6 +137,7 @@ typedef union { struct member *member; struct runascontainer *runas; struct privilege *privilege; + struct sudo_digest *digest; struct sudo_command command; struct cmndtag tag; struct selinux_info seinfo; @@ -154,372 +154,391 @@ typedef union { #define NETGROUP 261 #define USERGROUP 262 #define WORD 263 -#define DEFAULTS 264 -#define DEFAULTS_HOST 265 -#define DEFAULTS_USER 266 -#define DEFAULTS_RUNAS 267 -#define DEFAULTS_CMND 268 -#define NOPASSWD 269 -#define PASSWD 270 -#define NOEXEC 271 -#define EXEC 272 -#define SETENV 273 -#define NOSETENV 274 -#define LOG_INPUT 275 -#define NOLOG_INPUT 276 -#define LOG_OUTPUT 277 -#define NOLOG_OUTPUT 278 -#define ALL 279 -#define COMMENT 280 -#define HOSTALIAS 281 -#define CMNDALIAS 282 -#define USERALIAS 283 -#define RUNASALIAS 284 -#define ERROR 285 -#define TYPE 286 -#define ROLE 287 -#define PRIVS 288 -#define LIMITPRIVS 289 -#define MYSELF 290 +#define DIGEST 264 +#define DEFAULTS 265 +#define DEFAULTS_HOST 266 +#define DEFAULTS_USER 267 +#define DEFAULTS_RUNAS 268 +#define DEFAULTS_CMND 269 +#define NOPASSWD 270 +#define PASSWD 271 +#define NOEXEC 272 +#define EXEC 273 +#define SETENV 274 +#define NOSETENV 275 +#define LOG_INPUT 276 +#define NOLOG_INPUT 277 +#define LOG_OUTPUT 278 +#define NOLOG_OUTPUT 279 +#define ALL 280 +#define COMMENT 281 +#define HOSTALIAS 282 +#define CMNDALIAS 283 +#define USERALIAS 284 +#define RUNASALIAS 285 +#define ERROR 286 +#define TYPE 287 +#define ROLE 288 +#define PRIVS 289 +#define LIMITPRIVS 290 +#define MYSELF 291 +#define SHA224 292 +#define SHA256 293 +#define SHA384 294 +#define SHA512 295 #define YYERRCODE 256 #if defined(__cplusplus) || defined(__STDC__) -const short yylhs[] = +const short sudoerslhs[] = #else -short yylhs[] = +short sudoerslhs[] = #endif { -1, - 0, 0, 28, 28, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 4, 4, 3, 3, - 3, 3, 3, 20, 20, 19, 10, 10, 8, 8, - 8, 8, 8, 2, 2, 1, 6, 6, 23, 24, - 22, 22, 22, 22, 22, 26, 27, 25, 25, 25, - 25, 25, 17, 17, 18, 18, 18, 18, 18, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 5, 5, 5, 31, 31, 34, 9, 9, 32, 32, - 35, 7, 7, 33, 33, 36, 30, 30, 37, 13, - 13, 11, 11, 12, 12, 12, 12, 12, 16, 16, - 14, 14, 15, 15, 15, + 0, 0, 30, 30, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 4, 4, 3, 3, + 3, 3, 3, 21, 21, 20, 11, 11, 9, 9, + 9, 9, 9, 2, 2, 1, 29, 29, 29, 29, + 7, 7, 6, 6, 24, 25, 23, 23, 23, 23, + 23, 27, 28, 26, 26, 26, 26, 26, 18, 18, + 19, 19, 19, 19, 19, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 5, 5, 5, 33, + 33, 36, 10, 10, 34, 34, 37, 8, 8, 35, + 35, 38, 32, 32, 39, 14, 14, 12, 12, 13, + 13, 13, 13, 13, 17, 17, 15, 15, 16, 16, + 16, }; #if defined(__cplusplus) || defined(__STDC__) -const short yylen[] = +const short sudoerslen[] = #else -short yylen[] = +short sudoerslen[] = #endif { 2, 0, 1, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 1, 3, 1, 2, 3, 3, 3, 1, 3, 3, 1, 2, 1, 1, - 1, 1, 1, 1, 3, 5, 1, 2, 3, 3, - 0, 1, 1, 2, 2, 3, 3, 0, 1, 1, - 2, 2, 0, 3, 0, 1, 3, 2, 1, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 3, 3, 1, 3, 1, 3, - 3, 1, 3, 1, 3, 3, 1, 3, 3, 1, - 3, 1, 2, 1, 1, 1, 1, 1, 1, 3, - 1, 2, 1, 1, 1, + 1, 1, 1, 1, 3, 5, 3, 3, 3, 3, + 1, 2, 1, 2, 3, 3, 0, 1, 1, 2, + 2, 3, 3, 0, 1, 1, 2, 2, 0, 3, + 0, 1, 3, 2, 1, 0, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 3, 3, 1, 3, 1, 3, 3, 1, 3, 1, + 3, 3, 1, 3, 3, 1, 3, 1, 2, 1, + 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, + 1, }; #if defined(__cplusplus) || defined(__STDC__) -const short yydefred[] = +const short sudoersdefred[] = #else -short yydefred[] = +short sudoersdefred[] = #endif { 0, - 0, 94, 96, 97, 98, 0, 0, 0, 0, 0, - 95, 5, 0, 0, 0, 0, 0, 0, 90, 92, + 0, 100, 102, 103, 104, 0, 0, 0, 0, 0, + 101, 5, 0, 0, 0, 0, 0, 0, 96, 98, 0, 0, 3, 6, 0, 0, 17, 0, 29, 32, - 31, 33, 30, 0, 27, 0, 77, 0, 0, 73, - 72, 71, 0, 37, 82, 0, 0, 0, 74, 0, - 0, 79, 0, 0, 87, 0, 0, 84, 93, 0, - 0, 24, 0, 4, 0, 0, 0, 20, 0, 28, - 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 91, 0, 0, 21, 22, - 23, 18, 78, 83, 0, 75, 0, 80, 0, 88, - 0, 85, 0, 34, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 103, 105, 104, 0, - 99, 101, 0, 0, 54, 35, 0, 0, 0, 0, - 60, 0, 0, 44, 45, 102, 0, 0, 40, 39, - 0, 0, 0, 51, 52, 100, 46, 47, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 36, + 31, 33, 30, 0, 27, 0, 83, 0, 0, 79, + 78, 77, 0, 0, 0, 0, 0, 43, 41, 88, + 0, 0, 0, 0, 80, 0, 0, 85, 0, 0, + 93, 0, 0, 90, 99, 0, 0, 24, 0, 4, + 0, 0, 0, 20, 0, 28, 0, 0, 0, 0, + 44, 0, 0, 0, 0, 0, 0, 42, 0, 0, + 0, 0, 0, 0, 0, 0, 97, 0, 0, 21, + 22, 23, 18, 84, 37, 38, 39, 40, 89, 0, + 81, 0, 86, 0, 94, 0, 91, 0, 34, 0, + 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 109, 111, 110, 0, 105, 107, 0, 0, 60, + 35, 0, 0, 0, 0, 66, 0, 0, 50, 51, + 108, 0, 0, 46, 45, 0, 0, 0, 57, 58, + 106, 52, 53, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 36, }; #if defined(__cplusplus) || defined(__STDC__) -const short yydgoto[] = +const short sudoersdgoto[] = #else -short yydgoto[] = +short sudoersdgoto[] = #endif { 18, - 104, 105, 27, 28, 44, 45, 46, 35, 61, 37, - 19, 20, 21, 121, 122, 123, 106, 110, 62, 63, - 143, 114, 115, 116, 131, 132, 133, 22, 23, 54, - 48, 51, 57, 49, 52, 58, 55, + 119, 120, 27, 28, 48, 49, 50, 51, 35, 67, + 37, 19, 20, 21, 136, 137, 138, 121, 125, 68, + 69, 158, 129, 130, 131, 146, 147, 148, 52, 22, + 23, 60, 54, 57, 63, 55, 58, 64, 61, }; #if defined(__cplusplus) || defined(__STDC__) -const short yysindex[] = +const short sudoerssindex[] = #else -short yysindex[] = +short sudoerssindex[] = #endif - { 541, - -270, 0, 0, 0, 0, -21, -5, 553, 553, 20, - 0, 0, -242, -229, -216, -214, -240, 0, 0, 0, - -27, 541, 0, 0, -18, -227, 0, 2, 0, 0, - 0, 0, 0, -223, 0, -33, 0, -31, -31, 0, - 0, 0, -243, 0, 0, -24, -12, -6, 0, 3, - 4, 0, 5, 7, 0, 6, 10, 0, 0, 553, - -20, 0, 11, 0, -206, -193, -191, 0, -21, 0, - -5, 2, 2, 2, 0, 20, 2, -5, -242, 20, - -229, 553, -216, 553, -214, 0, 33, -5, 0, 0, - 0, 0, 0, 0, 31, 0, 32, 0, 34, 0, - 34, 0, 513, 0, 35, -226, 0, 86, -25, 36, - 33, 19, 21, -234, -202, -201, 0, 0, 0, -232, - 0, 0, 41, 86, 0, 0, -176, -173, 37, 38, - 0, -198, -195, 0, 0, 0, 86, 41, 0, 0, - -169, -168, 569, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,}; + { -33, + -277, 0, 0, 0, 0, -13, 75, 105, 105, -15, + 0, 0, -246, -241, -217, -210, -226, 0, 0, 0, + -5, -33, 0, 0, -3, -244, 0, 5, 0, 0, + 0, 0, 0, -237, 0, -28, 0, -19, -19, 0, + 0, 0, -251, -7, -1, 4, 7, 0, 0, 0, + -14, -20, -2, 8, 0, 6, 11, 0, 9, 13, + 0, 12, 14, 0, 0, 105, -11, 0, 18, 0, + -203, -200, -188, 0, -13, 0, 75, 5, 5, 5, + 0, -187, -185, -184, -183, -15, 5, 0, 75, -246, + -15, -241, 105, -217, 105, -210, 0, 42, 75, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, + 0, 40, 0, 43, 0, 43, 0, 45, 0, 44, + -279, 0, 135, -6, 49, 42, 25, 32, -243, -195, + -192, 0, 0, 0, -236, 0, 0, 54, 135, 0, + 0, -164, -163, 41, 46, 0, -189, -180, 0, 0, + 0, 135, 54, 0, 0, -159, -158, 585, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,}; #if defined(__cplusplus) || defined(__STDC__) -const short yyrindex[] = +const short sudoersrindex[] = #else -short yyrindex[] = +short sudoersrindex[] = #endif - { 96, + { 106, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 110, 0, 0, 1, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 97, 0, 0, 1, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, - 237, 0, 0, 271, 0, 0, 300, 0, 0, 0, - 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, - 0, 358, 387, 417, 0, 0, 446, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, - 0, 0, 0, 0, 30, 0, 59, 0, 89, 0, - 118, 0, 60, 0, 148, -28, 0, 62, 63, 0, - 463, 0, 0, 594, 489, 512, 0, 0, 0, 0, - 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, - 0, 623, 653, 0, 0, 0, 0, 65, 0, 0, + 0, 0, 0, 211, 0, 0, 241, 0, 0, 271, + 0, 0, 301, 0, 0, 0, 0, 0, 331, 0, + 0, 0, 0, 0, 0, 0, 0, 361, 391, 421, + 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, + 0, 61, 0, 91, 0, 121, 0, 70, 0, 151, + 495, 0, 71, 72, 0, 467, 0, 0, 615, 525, + 555, 0, 0, 0, 0, 0, 0, 73, 0, 0, + 0, 0, 0, 0, 0, 0, 645, 675, 0, 0, + 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,}; + 0, 0, 0, 0,}; #if defined(__cplusplus) || defined(__STDC__) -const short yygindex[] = +const short sudoersgindex[] = #else -short yygindex[] = +short sudoersgindex[] = #endif { 0, - -11, 0, 39, 12, 66, -72, 27, 76, -4, 40, - 52, 98, -1, -23, -7, -8, 0, 0, 42, 0, - 0, 0, 8, 13, 0, -13, -9, 0, 99, 0, - 0, 0, 0, 46, 45, 44, 48, + -10, 0, 47, 17, 80, 65, -84, 27, 92, -4, + 48, 62, 112, 2, -25, 10, -9, 0, 0, 33, + 0, 0, 0, 3, 16, 0, -17, -12, 0, 0, + 111, 0, 0, 0, 0, 50, 51, 52, 53, }; -#define YYTABLESIZE 932 +#define YYTABLESIZE 970 #if defined(__cplusplus) || defined(__STDC__) -const short yytable[] = +const short sudoerstable[] = #else -short yytable[] = +short sudoerstable[] = #endif - { 26, - 19, 26, 36, 94, 41, 34, 38, 39, 26, 24, - 71, 26, 60, 40, 41, 47, 60, 2, 60, 76, - 3, 4, 5, 71, 66, 117, 67, 34, 50, 76, - 118, 68, 124, 19, 29, 42, 30, 31, 11, 32, - 87, 53, 65, 56, 19, 69, 119, 72, 78, 73, - 74, 79, 43, 129, 130, 33, 89, 77, 81, 112, - 113, 81, 76, 80, 83, 82, 84, 85, 88, 90, - 159, 91, 103, 95, 71, 76, 125, 60, 111, 127, - 99, 128, 101, 112, 137, 113, 139, 76, 89, 140, - 130, 81, 129, 147, 148, 1, 2, 141, 142, 126, - 55, 109, 59, 56, 58, 57, 97, 92, 75, 70, - 93, 86, 136, 146, 59, 138, 81, 86, 120, 145, - 64, 89, 144, 135, 96, 98, 0, 134, 102, 107, - 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 89, 26, 0, 0, - 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, + { 17, + 19, 109, 36, 24, 26, 40, 41, 127, 128, 38, + 39, 53, 43, 26, 74, 77, 56, 43, 26, 26, + 29, 132, 30, 31, 66, 32, 133, 34, 42, 86, + 82, 2, 77, 19, 3, 4, 5, 66, 66, 72, + 59, 73, 33, 134, 19, 144, 145, 62, 75, 98, + 82, 139, 78, 11, 79, 80, 83, 71, 89, 100, + 87, 84, 101, 82, 85, 90, 91, 87, 92, 93, + 94, 96, 95, 174, 102, 99, 105, 17, 106, 107, + 108, 118, 77, 86, 110, 142, 66, 126, 82, 140, + 95, 127, 143, 87, 114, 128, 116, 152, 154, 155, + 145, 156, 123, 162, 163, 1, 157, 34, 144, 2, + 61, 65, 62, 64, 63, 141, 88, 112, 87, 124, + 92, 103, 81, 95, 104, 76, 161, 97, 65, 153, + 160, 122, 70, 150, 159, 0, 0, 17, 0, 111, + 0, 0, 113, 0, 151, 149, 115, 117, 95, 0, + 26, 0, 0, 92, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, + 12, 0, 0, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, + 9, 0, 0, 12, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 2, 0, 0, 3, 4, 5, + 25, 6, 7, 8, 9, 10, 40, 41, 0, 25, + 10, 40, 41, 9, 25, 25, 11, 12, 13, 14, + 15, 16, 29, 0, 30, 31, 19, 32, 19, 42, + 0, 19, 19, 19, 42, 19, 19, 19, 19, 19, + 8, 0, 0, 10, 33, 0, 44, 45, 46, 47, + 19, 19, 19, 19, 19, 19, 82, 0, 82, 0, + 0, 82, 82, 82, 0, 82, 82, 82, 82, 82, + 11, 0, 2, 8, 0, 3, 4, 5, 0, 0, + 82, 82, 82, 82, 82, 82, 87, 0, 87, 0, + 0, 87, 87, 87, 11, 87, 87, 87, 87, 87, + 7, 0, 29, 11, 30, 31, 0, 32, 0, 0, + 87, 87, 87, 87, 87, 87, 95, 0, 95, 0, + 0, 95, 95, 95, 33, 95, 95, 95, 95, 95, + 15, 0, 2, 7, 0, 3, 4, 5, 0, 0, + 95, 95, 95, 95, 95, 95, 92, 0, 92, 0, + 0, 92, 92, 92, 11, 92, 92, 92, 92, 92, + 13, 0, 132, 15, 0, 0, 0, 133, 0, 0, + 92, 92, 92, 92, 92, 92, 26, 0, 26, 0, + 0, 26, 26, 26, 134, 26, 26, 26, 26, 26, + 14, 0, 0, 13, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 12, 0, 12, 0, + 0, 12, 12, 12, 0, 12, 12, 12, 12, 12, + 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, + 12, 12, 12, 12, 12, 12, 9, 0, 9, 0, + 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, + 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 10, 0, 10, 59, + 0, 10, 10, 10, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 86, 12, 0, 0, 0, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 10, 10, 10, 10, 10, 8, 47, 8, 0, + 0, 8, 8, 8, 0, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 26, 9, 0, 0, 12, + 8, 8, 8, 8, 8, 8, 11, 48, 11, 0, + 0, 11, 11, 11, 0, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 25, 0, 25, 41, 41, - 29, 0, 30, 31, 25, 32, 10, 25, 0, 9, - 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, - 41, 33, 29, 0, 30, 31, 19, 32, 19, 41, - 41, 19, 19, 19, 19, 19, 19, 19, 19, 10, - 8, 0, 0, 33, 0, 0, 40, 41, 0, 19, - 19, 19, 19, 19, 19, 76, 0, 76, 0, 0, - 76, 76, 76, 76, 76, 76, 76, 76, 42, 11, - 0, 0, 0, 8, 0, 0, 0, 0, 76, 76, - 76, 76, 76, 76, 81, 0, 81, 0, 0, 81, - 81, 81, 81, 81, 81, 81, 81, 0, 7, 0, - 0, 0, 11, 0, 0, 0, 0, 81, 81, 81, - 81, 81, 81, 117, 89, 0, 89, 0, 118, 89, - 89, 89, 89, 89, 89, 89, 89, 15, 0, 0, - 0, 7, 0, 0, 119, 0, 0, 89, 89, 89, - 89, 89, 89, 86, 0, 86, 0, 0, 86, 86, - 86, 86, 86, 86, 86, 86, 13, 0, 0, 0, - 15, 0, 0, 0, 0, 0, 86, 86, 86, 86, - 86, 86, 0, 26, 0, 26, 0, 0, 26, 26, - 26, 26, 26, 26, 26, 26, 14, 0, 0, 13, - 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, - 26, 26, 12, 0, 12, 0, 0, 12, 12, 12, - 12, 12, 12, 12, 12, 16, 0, 0, 0, 14, - 0, 0, 0, 0, 0, 12, 12, 12, 12, 12, - 12, 0, 9, 0, 9, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 0, 10, 0, 10, 53, 0, 10, 10, 10, - 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, - 10, 42, 0, 0, 0, 0, 8, 0, 8, 0, - 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, - 0, 0, 0, 0, 43, 17, 0, 0, 0, 8, - 8, 8, 8, 8, 8, 11, 0, 11, 0, 0, - 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, - 108, 0, 0, 17, 0, 0, 0, 0, 11, 11, - 11, 11, 11, 11, 7, 17, 7, 0, 0, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, - 0, 43, 0, 0, 0, 0, 0, 7, 7, 7, - 7, 7, 7, 15, 0, 15, 0, 0, 15, 15, - 15, 15, 15, 15, 15, 15, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, - 15, 15, 13, 0, 13, 0, 0, 13, 13, 13, - 13, 13, 13, 13, 13, 49, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, - 13, 0, 14, 0, 14, 0, 0, 14, 14, 14, - 14, 14, 14, 14, 14, 50, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, - 14, 16, 0, 16, 0, 0, 16, 16, 16, 16, - 16, 16, 16, 16, 0, 0, 0, 0, 0, 53, - 53, 0, 0, 0, 16, 16, 16, 16, 16, 16, - 0, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 0, 0, 0, 42, 42, 0, 53, 53, - 53, 53, 0, 0, 0, 0, 0, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, - 2, 0, 0, 3, 4, 5, 42, 42, 0, 0, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 11, 0, 0, 0, 0, 1, 0, 2, 43, - 43, 3, 4, 5, 6, 7, 8, 9, 10, 0, - 2, 0, 0, 3, 4, 5, 0, 0, 0, 11, - 12, 13, 14, 15, 16, 40, 41, 0, 0, 0, - 0, 11, 0, 0, 0, 0, 0, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 42, 0, 0, - 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 0, 0, 0, 0, 0, 0, 49, - 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 0, 0, 0, 0, 0, 0, 0, 50, - 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, + 11, 11, 11, 11, 11, 11, 7, 49, 7, 0, + 0, 7, 7, 7, 0, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 15, 43, 15, 0, + 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 15, 15, 15, 15, 15, 13, 54, 13, 0, + 0, 13, 13, 13, 0, 13, 13, 13, 13, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 13, 13, 13, 13, 13, 14, 55, 14, 0, + 0, 14, 14, 14, 0, 14, 14, 14, 14, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 14, 14, 14, 14, 14, 14, 16, 56, 16, 0, + 0, 16, 16, 16, 0, 16, 16, 16, 16, 16, + 0, 0, 0, 59, 59, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 0, 0, 0, + 0, 47, 47, 59, 59, 59, 59, 0, 59, 59, + 59, 59, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, + 0, 48, 48, 47, 47, 0, 47, 47, 47, 47, + 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, + 0, 49, 49, 48, 48, 0, 48, 48, 48, 48, + 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 0, 0, 0, 0, 0, + 0, 40, 41, 49, 49, 0, 49, 49, 49, 49, + 0, 0, 0, 0, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 42, 0, 0, 0, 0, 0, + 0, 54, 54, 0, 0, 0, 44, 45, 46, 47, + 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, + 0, 55, 55, 0, 0, 0, 54, 54, 54, 54, + 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, + 0, 56, 56, 0, 0, 0, 55, 55, 55, 55, + 0, 0, 0, 0, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 56, 56, 56, 56, }; #if defined(__cplusplus) || defined(__STDC__) -const short yycheck[] = +const short sudoerscheck[] = #else -short yycheck[] = +short sudoerscheck[] = #endif { 33, - 0, 33, 7, 76, 33, 33, 8, 9, 33, 280, - 44, 33, 44, 257, 258, 258, 44, 258, 44, 44, - 261, 262, 263, 44, 43, 258, 45, 33, 258, 0, - 263, 259, 58, 33, 258, 279, 260, 261, 279, 263, - 61, 258, 61, 258, 44, 44, 279, 36, 61, 38, - 39, 58, 33, 288, 289, 279, 263, 46, 0, 286, - 287, 58, 33, 61, 58, 61, 61, 58, 58, 263, - 143, 263, 40, 78, 44, 44, 41, 44, 44, 61, - 82, 61, 84, 286, 44, 287, 263, 58, 0, 263, - 289, 33, 288, 263, 263, 0, 0, 61, 61, 111, - 41, 103, 41, 41, 41, 41, 80, 69, 43, 34, - 71, 60, 120, 137, 17, 124, 58, 0, 33, 133, - 22, 33, 132, 116, 79, 81, -1, 115, 85, 88, - 83, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 58, 0, -1, -1, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, 86, 7, 281, 33, 257, 258, 287, 288, 8, + 9, 258, 33, 33, 259, 44, 258, 33, 33, 33, + 258, 258, 260, 261, 44, 263, 263, 33, 280, 44, + 0, 258, 44, 33, 261, 262, 263, 44, 44, 43, + 258, 45, 280, 280, 44, 289, 290, 258, 44, 61, + 58, 58, 36, 280, 38, 39, 58, 61, 61, 263, + 0, 58, 263, 33, 58, 58, 61, 51, 58, 61, + 58, 58, 61, 158, 263, 58, 264, 33, 264, 264, + 264, 40, 44, 44, 89, 61, 44, 44, 58, 41, + 0, 287, 61, 33, 93, 288, 95, 44, 263, 263, + 290, 61, 58, 263, 263, 0, 61, 33, 289, 0, + 41, 41, 41, 41, 41, 126, 52, 91, 58, 118, + 0, 75, 43, 33, 77, 34, 152, 66, 17, 139, + 148, 99, 22, 131, 147, -1, -1, 33, -1, 90, + -1, -1, 92, -1, 135, 130, 94, 96, 58, -1, + 0, -1, -1, 33, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, + 0, -1, -1, 33, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, + 0, -1, -1, 33, -1, -1, -1, -1, -1, -1, + -1, -1, 256, -1, 258, -1, -1, 261, 262, 263, + 259, 265, 266, 267, 268, 269, 257, 258, -1, 259, + 0, 257, 258, 33, 259, 259, 280, 281, 282, 283, + 284, 285, 258, -1, 260, 261, 256, 263, 258, 280, + -1, 261, 262, 263, 280, 265, 266, 267, 268, 269, + 0, -1, -1, 33, 280, -1, 292, 293, 294, 295, + 280, 281, 282, 283, 284, 285, 256, -1, 258, -1, + -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, + 0, -1, 258, 33, -1, 261, 262, 263, -1, -1, + 280, 281, 282, 283, 284, 285, 256, -1, 258, -1, + -1, 261, 262, 263, 280, 265, 266, 267, 268, 269, + 0, -1, 258, 33, 260, 261, -1, 263, -1, -1, + 280, 281, 282, 283, 284, 285, 256, -1, 258, -1, + -1, 261, 262, 263, 280, 265, 266, 267, 268, 269, + 0, -1, 258, 33, -1, 261, 262, 263, -1, -1, + 280, 281, 282, 283, 284, 285, 256, -1, 258, -1, + -1, 261, 262, 263, 280, 265, 266, 267, 268, 269, + 0, -1, 258, 33, -1, -1, -1, 263, -1, -1, + 280, 281, 282, 283, 284, 285, 256, -1, 258, -1, + -1, 261, 262, 263, 280, 265, 266, 267, 268, 269, + 0, -1, -1, 33, -1, -1, -1, -1, -1, -1, + 280, 281, 282, 283, 284, 285, 256, -1, 258, -1, + -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, + 0, -1, -1, 33, -1, -1, -1, -1, -1, -1, + 280, 281, 282, 283, 284, 285, 256, -1, 258, -1, + -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, + -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, + 280, 281, 282, 283, 284, 285, 256, -1, 258, 33, + -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 280, 281, 282, 283, 284, 285, 256, 33, 258, -1, + -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 58, 0, -1, -1, -1, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 280, 281, 282, 283, 284, 285, 256, 33, 258, -1, + -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 58, 0, -1, -1, 33, + 280, 281, 282, 283, 284, 285, 256, 33, 258, -1, + -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 259, -1, 259, 257, 258, - 258, -1, 260, 261, 259, 263, 0, 259, -1, 33, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 279, 258, -1, 260, 261, 256, 263, 258, 288, - 289, 261, 262, 263, 264, 265, 266, 267, 268, 33, - 0, -1, -1, 279, -1, -1, 257, 258, -1, 279, - 280, 281, 282, 283, 284, 256, -1, 258, -1, -1, - 261, 262, 263, 264, 265, 266, 267, 268, 279, 0, - -1, -1, -1, 33, -1, -1, -1, -1, 279, 280, - 281, 282, 283, 284, 256, -1, 258, -1, -1, 261, - 262, 263, 264, 265, 266, 267, 268, -1, 0, -1, - -1, -1, 33, -1, -1, -1, -1, 279, 280, 281, - 282, 283, 284, 258, 256, -1, 258, -1, 263, 261, - 262, 263, 264, 265, 266, 267, 268, 0, -1, -1, - -1, 33, -1, -1, 279, -1, -1, 279, 280, 281, - 282, 283, 284, 256, -1, 258, -1, -1, 261, 262, - 263, 264, 265, 266, 267, 268, 0, -1, -1, -1, - 33, -1, -1, -1, -1, -1, 279, 280, 281, 282, - 283, 284, -1, 256, -1, 258, -1, -1, 261, 262, - 263, 264, 265, 266, 267, 268, 0, -1, -1, 33, - -1, -1, -1, -1, -1, -1, 279, 280, 281, 282, - 283, 284, 256, -1, 258, -1, -1, 261, 262, 263, - 264, 265, 266, 267, 268, 0, -1, -1, -1, 33, - -1, -1, -1, -1, -1, 279, 280, 281, 282, 283, - 284, -1, 256, -1, 258, -1, -1, 261, 262, 263, - 264, 265, 266, 267, 268, -1, -1, -1, 33, -1, - -1, -1, -1, -1, -1, 279, 280, 281, 282, 283, - 284, -1, 256, -1, 258, 33, -1, 261, 262, 263, - 264, 265, 266, 267, 268, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 279, 280, 281, 282, 283, - 284, 33, -1, -1, -1, -1, 256, -1, 258, -1, - -1, 261, 262, 263, 264, 265, 266, 267, 268, -1, - -1, -1, -1, -1, 33, 33, -1, -1, -1, 279, - 280, 281, 282, 283, 284, 256, -1, 258, -1, -1, - 261, 262, 263, 264, 265, 266, 267, 268, -1, -1, - 58, -1, -1, 33, -1, -1, -1, -1, 279, 280, - 281, 282, 283, 284, 256, 33, 258, -1, -1, 261, - 262, 263, 264, 265, 266, 267, 268, -1, -1, -1, - -1, 33, -1, -1, -1, -1, -1, 279, 280, 281, - 282, 283, 284, 256, -1, 258, -1, -1, 261, 262, - 263, 264, 265, 266, 267, 268, 33, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 279, 280, 281, 282, - 283, 284, 256, -1, 258, -1, -1, 261, 262, 263, - 264, 265, 266, 267, 268, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 279, 280, 281, 282, 283, - 284, -1, 256, -1, 258, -1, -1, 261, 262, 263, - 264, 265, 266, 267, 268, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 279, 280, 281, 282, 283, - 284, 256, -1, 258, -1, -1, 261, 262, 263, 264, - 265, 266, 267, 268, -1, -1, -1, -1, -1, 257, - 258, -1, -1, -1, 279, 280, 281, 282, 283, 284, - -1, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, -1, -1, -1, 257, 258, -1, 286, 287, - 288, 289, -1, -1, -1, -1, -1, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 257, 258, - 258, -1, -1, 261, 262, 263, 288, 289, -1, -1, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 279, -1, -1, -1, -1, 256, -1, 258, 288, - 289, 261, 262, 263, 264, 265, 266, 267, 268, -1, - 258, -1, -1, 261, 262, 263, -1, -1, -1, 279, - 280, 281, 282, 283, 284, 257, 258, -1, -1, -1, - -1, 279, -1, -1, -1, -1, -1, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, -1, -1, - 257, 258, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, -1, -1, -1, -1, -1, -1, 257, - 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, -1, -1, -1, -1, -1, -1, -1, 257, - 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, + 280, 281, 282, 283, 284, 285, 256, 33, 258, -1, + -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 280, 281, 282, 283, 284, 285, 256, 33, 258, -1, + -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 280, 281, 282, 283, 284, 285, 256, 33, 258, -1, + -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 280, 281, 282, 283, 284, 285, 256, 33, 258, -1, + -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, + -1, -1, -1, 257, 258, -1, -1, -1, -1, -1, + 280, 281, 282, 283, 284, 285, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, -1, -1, -1, + -1, 257, 258, 287, 288, 289, 290, -1, 292, 293, + 294, 295, -1, -1, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, -1, -1, -1, -1, -1, + -1, 257, 258, 289, 290, -1, 292, 293, 294, 295, + -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, -1, -1, -1, -1, -1, + -1, 257, 258, 289, 290, -1, 292, 293, 294, 295, + -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, -1, -1, -1, -1, -1, + -1, 257, 258, 289, 290, -1, 292, 293, 294, 295, + -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, -1, -1, -1, -1, -1, + -1, 257, 258, -1, -1, -1, 292, 293, 294, 295, + -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, -1, -1, -1, -1, -1, + -1, 257, 258, -1, -1, -1, 292, 293, 294, 295, + -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, -1, -1, -1, -1, -1, + -1, 257, 258, -1, -1, -1, 292, 293, 294, 295, + -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 292, 293, 294, 295, }; #define YYFINAL 18 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 290 +#define YYMAXTOKEN 295 #if YYDEBUG #if defined(__cplusplus) || defined(__STDC__) -const char * const yyname[] = +const char * const sudoersname[] = #else -char *yyname[] = +char *sudoersname[] = #endif { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -529,16 +548,17 @@ char *yyname[] = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -"COMMAND","ALIAS","DEFVAR","NTWKADDR","NETGROUP","USERGROUP","WORD","DEFAULTS", -"DEFAULTS_HOST","DEFAULTS_USER","DEFAULTS_RUNAS","DEFAULTS_CMND","NOPASSWD", -"PASSWD","NOEXEC","EXEC","SETENV","NOSETENV","LOG_INPUT","NOLOG_INPUT", -"LOG_OUTPUT","NOLOG_OUTPUT","ALL","COMMENT","HOSTALIAS","CMNDALIAS","USERALIAS", -"RUNASALIAS","ERROR","TYPE","ROLE","PRIVS","LIMITPRIVS","MYSELF", +"COMMAND","ALIAS","DEFVAR","NTWKADDR","NETGROUP","USERGROUP","WORD","DIGEST", +"DEFAULTS","DEFAULTS_HOST","DEFAULTS_USER","DEFAULTS_RUNAS","DEFAULTS_CMND", +"NOPASSWD","PASSWD","NOEXEC","EXEC","SETENV","NOSETENV","LOG_INPUT", +"NOLOG_INPUT","LOG_OUTPUT","NOLOG_OUTPUT","ALL","COMMENT","HOSTALIAS", +"CMNDALIAS","USERALIAS","RUNASALIAS","ERROR","TYPE","ROLE","PRIVS","LIMITPRIVS", +"MYSELF","SHA224","SHA256","SHA384","SHA512", }; #if defined(__cplusplus) || defined(__STDC__) -const char * const yyrule[] = +const char * const sudoersrule[] = #else -char *yyrule[] = +char *sudoersrule[] = #endif {"$accept : file", "file :", @@ -576,7 +596,13 @@ char *yyrule[] = "host : WORD", "cmndspeclist : cmndspec", "cmndspeclist : cmndspeclist ',' cmndspec", -"cmndspec : runasspec selinux solarisprivs cmndtag opcmnd", +"cmndspec : runasspec selinux solarisprivs cmndtag digcmnd", +"digest : SHA224 ':' DIGEST", +"digest : SHA256 ':' DIGEST", +"digest : SHA384 ':' DIGEST", +"digest : SHA512 ':' DIGEST", +"digcmnd : opcmnd", +"digcmnd : digest opcmnd", "opcmnd : cmnd", "opcmnd : '!' cmnd", "rolespec : ROLE '=' WORD", @@ -622,8 +648,8 @@ char *yyrule[] = "cmndaliases : cmndalias", "cmndaliases : cmndaliases ':' cmndalias", "cmndalias : ALIAS '=' cmndlist", -"cmndlist : opcmnd", -"cmndlist : cmndlist ',' opcmnd", +"cmndlist : digcmnd", +"cmndlist : cmndlist ',' digcmnd", "runasaliases : runasalias", "runasaliases : runasaliases ':' runasalias", "runasalias : ALIAS '=' userlist", @@ -673,7 +699,39 @@ short *yyss; short *yysslim; YYSTYPE *yyvs; int yystacksize; -#line 674 "gram.y" +#line 681 "gram.y" +void +sudoerserror(const char *s) +{ + debug_decl(sudoerserror, SUDO_DEBUG_PARSER) + + /* If we last saw a newline the error is on the preceding line. */ + if (last_token == COMMENT) + sudolineno--; + + /* Save the line the first error occurred on. */ + if (errorlineno == -1) { + errorlineno = sudolineno; + errorfile = estrdup(sudoers); + } + if (sudoers_warnings && s != NULL) { + LEXTRACE("<*> "); +#ifndef TRACELEXER + if (trace_print == NULL || trace_print == sudoers_trace_print) { + const char fmt[] = ">>> %s: %s near line %d <<<\n"; + int oldlocale; + + /* Warnings are displayed in the user's locale. */ + sudoers_setlocale(SUDOERS_LOCALE_USER, &oldlocale); + sudo_printf(SUDO_CONV_ERROR_MSG, _(fmt), sudoers, _(s), sudolineno); + sudoers_setlocale(oldlocale, NULL); + } +#endif + } + parse_error = true; + debug_return; +} + static struct defaults * new_default(char *var, char *val, int op) { @@ -707,6 +765,19 @@ new_member(char *name, int type) debug_return_ptr(m); } +struct sudo_digest * +new_digest(int digest_type, const char *digest_str) +{ + struct sudo_digest *dig; + debug_decl(new_digest, SUDO_DEBUG_PARSER) + + dig = emalloc(sizeof(*dig)); + dig->digest_type = digest_type; + dig->digest_str = estrdup(digest_str); + + debug_return_ptr(dig); +} + /* * Add a list of defaults structures to the defaults list. * The binding, if non-NULL, specifies a list of hosts, users, or @@ -876,7 +947,7 @@ init_parser(const char *path, bool quiet) debug_return; } -#line 827 "gram.c" +#line 898 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ #if defined(__cplusplus) || defined(__STDC__) static int yygrowstack(void) @@ -1079,127 +1150,127 @@ yyreduce: switch (yyn) { case 1: -#line 204 "gram.y" +#line 185 "gram.y" { ; } break; case 5: -#line 212 "gram.y" +#line 193 "gram.y" { ; } break; case 6: -#line 215 "gram.y" +#line 196 "gram.y" { yyerrok; } break; case 7: -#line 218 "gram.y" +#line 199 "gram.y" { add_userspec(yyvsp[-1].member, yyvsp[0].privilege); } break; case 8: -#line 221 "gram.y" +#line 202 "gram.y" { ; } break; case 9: -#line 224 "gram.y" +#line 205 "gram.y" { ; } break; case 10: -#line 227 "gram.y" +#line 208 "gram.y" { ; } break; case 11: -#line 230 "gram.y" +#line 211 "gram.y" { ; } break; case 12: -#line 233 "gram.y" +#line 214 "gram.y" { add_defaults(DEFAULTS, NULL, yyvsp[0].defaults); } break; case 13: -#line 236 "gram.y" +#line 217 "gram.y" { add_defaults(DEFAULTS_USER, yyvsp[-1].member, yyvsp[0].defaults); } break; case 14: -#line 239 "gram.y" +#line 220 "gram.y" { add_defaults(DEFAULTS_RUNAS, yyvsp[-1].member, yyvsp[0].defaults); } break; case 15: -#line 242 "gram.y" +#line 223 "gram.y" { add_defaults(DEFAULTS_HOST, yyvsp[-1].member, yyvsp[0].defaults); } break; case 16: -#line 245 "gram.y" +#line 226 "gram.y" { add_defaults(DEFAULTS_CMND, yyvsp[-1].member, yyvsp[0].defaults); } break; case 18: -#line 251 "gram.y" +#line 232 "gram.y" { list_append(yyvsp[-2].defaults, yyvsp[0].defaults); yyval.defaults = yyvsp[-2].defaults; } break; case 19: -#line 257 "gram.y" +#line 238 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, true); } break; case 20: -#line 260 "gram.y" +#line 241 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, false); } break; case 21: -#line 263 "gram.y" +#line 244 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, true); } break; case 22: -#line 266 "gram.y" +#line 247 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '+'); } break; case 23: -#line 269 "gram.y" +#line 250 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '-'); } break; case 25: -#line 275 "gram.y" +#line 256 "gram.y" { list_append(yyvsp[-2].privilege, yyvsp[0].privilege); yyval.privilege = yyvsp[-2].privilege; } break; case 26: -#line 281 "gram.y" +#line 262 "gram.y" { struct privilege *p = ecalloc(1, sizeof(*p)); list2tq(&p->hostlist, yyvsp[-2].member); @@ -1210,51 +1281,51 @@ case 26: } break; case 27: -#line 291 "gram.y" +#line 272 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 28: -#line 295 "gram.y" +#line 276 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 29: -#line 301 "gram.y" +#line 282 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); } break; case 30: -#line 304 "gram.y" +#line 285 "gram.y" { yyval.member = new_member(NULL, ALL); } break; case 31: -#line 307 "gram.y" +#line 288 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); } break; case 32: -#line 310 "gram.y" +#line 291 "gram.y" { yyval.member = new_member(yyvsp[0].string, NTWKADDR); } break; case 33: -#line 313 "gram.y" +#line 294 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); } break; case 35: -#line 319 "gram.y" +#line 300 "gram.y" { list_append(yyvsp[-2].cmndspec, yyvsp[0].cmndspec); #ifdef HAVE_SELINUX @@ -1294,7 +1365,7 @@ case 35: } break; case 36: -#line 358 "gram.y" +#line 339 "gram.y" { struct cmndspec *cs = ecalloc(1, sizeof(*cs)); if (yyvsp[-4].runas != NULL) { @@ -1325,246 +1396,285 @@ case 36: } break; case 37: -#line 388 "gram.y" +#line 369 "gram.y" +{ + yyval.digest = new_digest(SUDO_DIGEST_SHA224, yyvsp[0].string); + } +break; +case 38: +#line 372 "gram.y" +{ + yyval.digest = new_digest(SUDO_DIGEST_SHA256, yyvsp[0].string); + } +break; +case 39: +#line 375 "gram.y" +{ + yyval.digest = new_digest(SUDO_DIGEST_SHA384, yyvsp[0].string); + } +break; +case 40: +#line 378 "gram.y" +{ + yyval.digest = new_digest(SUDO_DIGEST_SHA512, yyvsp[0].string); + } +break; +case 41: +#line 383 "gram.y" +{ + yyval.member = yyvsp[0].member; + } +break; +case 42: +#line 386 "gram.y" +{ + /* XXX - yuck */ + struct sudo_command *c = (struct sudo_command *)(yyvsp[0].member->name); + c->digest = yyvsp[-1].digest; + yyval.member = yyvsp[0].member; + } +break; +case 43: +#line 394 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 38: -#line 392 "gram.y" +case 44: +#line 398 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 39: -#line 398 "gram.y" +case 45: +#line 404 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 40: -#line 403 "gram.y" +case 46: +#line 409 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 41: -#line 408 "gram.y" +case 47: +#line 414 "gram.y" { yyval.seinfo.role = NULL; yyval.seinfo.type = NULL; } break; -case 42: -#line 412 "gram.y" +case 48: +#line 418 "gram.y" { yyval.seinfo.role = yyvsp[0].string; yyval.seinfo.type = NULL; } break; -case 43: -#line 416 "gram.y" +case 49: +#line 422 "gram.y" { yyval.seinfo.type = yyvsp[0].string; yyval.seinfo.role = NULL; } break; -case 44: -#line 420 "gram.y" +case 50: +#line 426 "gram.y" { yyval.seinfo.role = yyvsp[-1].string; yyval.seinfo.type = yyvsp[0].string; } break; -case 45: -#line 424 "gram.y" +case 51: +#line 430 "gram.y" { yyval.seinfo.type = yyvsp[-1].string; yyval.seinfo.role = yyvsp[0].string; } break; -case 46: -#line 430 "gram.y" +case 52: +#line 436 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 47: -#line 434 "gram.y" +case 53: +#line 440 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 48: -#line 439 "gram.y" +case 54: +#line 445 "gram.y" { yyval.privinfo.privs = NULL; yyval.privinfo.limitprivs = NULL; } break; -case 49: -#line 443 "gram.y" +case 55: +#line 449 "gram.y" { yyval.privinfo.privs = yyvsp[0].string; yyval.privinfo.limitprivs = NULL; } break; -case 50: -#line 447 "gram.y" +case 56: +#line 453 "gram.y" { yyval.privinfo.privs = NULL; yyval.privinfo.limitprivs = yyvsp[0].string; } break; -case 51: -#line 451 "gram.y" +case 57: +#line 457 "gram.y" { yyval.privinfo.privs = yyvsp[-1].string; yyval.privinfo.limitprivs = yyvsp[0].string; } break; -case 52: -#line 455 "gram.y" +case 58: +#line 461 "gram.y" { yyval.privinfo.limitprivs = yyvsp[-1].string; yyval.privinfo.privs = yyvsp[0].string; } break; -case 53: -#line 460 "gram.y" +case 59: +#line 467 "gram.y" { yyval.runas = NULL; } break; -case 54: -#line 463 "gram.y" +case 60: +#line 470 "gram.y" { yyval.runas = yyvsp[-1].runas; } break; -case 55: -#line 468 "gram.y" +case 61: +#line 475 "gram.y" { yyval.runas = ecalloc(1, sizeof(struct runascontainer)); yyval.runas->runasusers = new_member(NULL, MYSELF); /* $$->runasgroups = NULL; */ } break; -case 56: -#line 473 "gram.y" +case 62: +#line 480 "gram.y" { yyval.runas = ecalloc(1, sizeof(struct runascontainer)); yyval.runas->runasusers = yyvsp[0].member; /* $$->runasgroups = NULL; */ } break; -case 57: -#line 478 "gram.y" +case 63: +#line 485 "gram.y" { yyval.runas = ecalloc(1, sizeof(struct runascontainer)); yyval.runas->runasusers = yyvsp[-2].member; yyval.runas->runasgroups = yyvsp[0].member; } break; -case 58: -#line 483 "gram.y" +case 64: +#line 490 "gram.y" { yyval.runas = ecalloc(1, sizeof(struct runascontainer)); /* $$->runasusers = NULL; */ yyval.runas->runasgroups = yyvsp[0].member; } break; -case 59: -#line 488 "gram.y" +case 65: +#line 495 "gram.y" { yyval.runas = ecalloc(1, sizeof(struct runascontainer)); yyval.runas->runasusers = new_member(NULL, MYSELF); /* $$->runasgroups = NULL; */ } break; -case 60: -#line 495 "gram.y" +case 66: +#line 502 "gram.y" { yyval.tag.nopasswd = yyval.tag.noexec = yyval.tag.setenv = yyval.tag.log_input = yyval.tag.log_output = UNSPEC; } break; -case 61: -#line 499 "gram.y" +case 67: +#line 506 "gram.y" { yyval.tag.nopasswd = true; } break; -case 62: -#line 502 "gram.y" +case 68: +#line 509 "gram.y" { yyval.tag.nopasswd = false; } break; -case 63: -#line 505 "gram.y" +case 69: +#line 512 "gram.y" { yyval.tag.noexec = true; } break; -case 64: -#line 508 "gram.y" +case 70: +#line 515 "gram.y" { yyval.tag.noexec = false; } break; -case 65: -#line 511 "gram.y" +case 71: +#line 518 "gram.y" { yyval.tag.setenv = true; } break; -case 66: -#line 514 "gram.y" +case 72: +#line 521 "gram.y" { yyval.tag.setenv = false; } break; -case 67: -#line 517 "gram.y" +case 73: +#line 524 "gram.y" { yyval.tag.log_input = true; } break; -case 68: -#line 520 "gram.y" +case 74: +#line 527 "gram.y" { yyval.tag.log_input = false; } break; -case 69: -#line 523 "gram.y" +case 75: +#line 530 "gram.y" { yyval.tag.log_output = true; } break; -case 70: -#line 526 "gram.y" +case 76: +#line 533 "gram.y" { yyval.tag.log_output = false; } break; -case 71: -#line 531 "gram.y" +case 77: +#line 538 "gram.y" { yyval.member = new_member(NULL, ALL); } break; -case 72: -#line 534 "gram.y" +case 78: +#line 541 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); } break; -case 73: -#line 537 "gram.y" +case 79: +#line 544 "gram.y" { struct sudo_command *c = ecalloc(1, sizeof(*c)); c->cmnd = yyvsp[0].command.cmnd; @@ -1572,151 +1682,151 @@ case 73: yyval.member = new_member((char *)c, COMMAND); } break; -case 76: -#line 549 "gram.y" +case 82: +#line 556 "gram.y" { char *s; if ((s = alias_add(yyvsp[-2].string, HOSTALIAS, yyvsp[0].member)) != NULL) { - yyerror(s); + sudoerserror(s); YYERROR; } } break; -case 78: -#line 559 "gram.y" +case 84: +#line 566 "gram.y" { list_append(yyvsp[-2].member, yyvsp[0].member); yyval.member = yyvsp[-2].member; } break; -case 81: -#line 569 "gram.y" +case 87: +#line 576 "gram.y" { char *s; if ((s = alias_add(yyvsp[-2].string, CMNDALIAS, yyvsp[0].member)) != NULL) { - yyerror(s); + sudoerserror(s); YYERROR; } } break; -case 83: -#line 579 "gram.y" +case 89: +#line 586 "gram.y" { list_append(yyvsp[-2].member, yyvsp[0].member); yyval.member = yyvsp[-2].member; } break; -case 86: -#line 589 "gram.y" +case 92: +#line 596 "gram.y" { char *s; if ((s = alias_add(yyvsp[-2].string, RUNASALIAS, yyvsp[0].member)) != NULL) { - yyerror(s); + sudoerserror(s); YYERROR; } } break; -case 89: -#line 602 "gram.y" +case 95: +#line 609 "gram.y" { char *s; if ((s = alias_add(yyvsp[-2].string, USERALIAS, yyvsp[0].member)) != NULL) { - yyerror(s); + sudoerserror(s); YYERROR; } } break; -case 91: -#line 612 "gram.y" +case 97: +#line 619 "gram.y" { list_append(yyvsp[-2].member, yyvsp[0].member); yyval.member = yyvsp[-2].member; } break; -case 92: -#line 618 "gram.y" +case 98: +#line 625 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 93: -#line 622 "gram.y" +case 99: +#line 629 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 94: -#line 628 "gram.y" +case 100: +#line 635 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); } break; -case 95: -#line 631 "gram.y" +case 101: +#line 638 "gram.y" { yyval.member = new_member(NULL, ALL); } break; -case 96: -#line 634 "gram.y" +case 102: +#line 641 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); } break; -case 97: -#line 637 "gram.y" +case 103: +#line 644 "gram.y" { yyval.member = new_member(yyvsp[0].string, USERGROUP); } break; -case 98: -#line 640 "gram.y" +case 104: +#line 647 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); } break; -case 100: -#line 646 "gram.y" +case 106: +#line 653 "gram.y" { list_append(yyvsp[-2].member, yyvsp[0].member); yyval.member = yyvsp[-2].member; } break; -case 101: -#line 652 "gram.y" +case 107: +#line 659 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 102: -#line 656 "gram.y" +case 108: +#line 663 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 103: -#line 662 "gram.y" +case 109: +#line 669 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); } break; -case 104: -#line 665 "gram.y" +case 110: +#line 672 "gram.y" { yyval.member = new_member(NULL, ALL); } break; -case 105: -#line 668 "gram.y" +case 111: +#line 675 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); } break; -#line 1667 "gram.c" +#line 1777 "gram.c" } yyssp -= yym; yystate = *yyssp;