Diff for /embedaddon/sudo/plugins/sudoers/gram.c between versions 1.1.1.3 and 1.1.1.4

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

Removed from v.1.1.1.3  
changed lines
  Added in v.1.1.1.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>