]> granicus.if.org Git - sudo/commitdiff
regen
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 4 Aug 1999 15:31:47 +0000 (15:31 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 4 Aug 1999 15:31:47 +0000 (15:31 +0000)
lex.yy.c
sudo.tab.c
sudo.tab.h

index d27a069487545214090c9a91fa132d84b5022736..96f1c82d8e59f76ef8d52be2f6024d75bf5fadab 100644 (file)
--- a/lex.yy.c
+++ b/lex.yy.c
@@ -286,28 +286,28 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
 
 #define YY_NUM_RULES 27
 #define YY_END_OF_BUFFER 28
-static yyconst short int yy_accept[182] =
+static yyconst short int yy_accept[184] =
     {   0,
         0,    0,    0,    0,    0,    0,   28,   26,    1,    5,
         9,   26,   26,   19,   26,    8,   12,   26,   25,   11,
        10,   24,   24,   24,   26,   25,    7,    4,    7,    7,
         7,    4,    7,    7,    7,    4,    4,    7,    7,    7,
        26,    7,   26,   22,   21,   21,   20,   20,   20,   21,
-        1,    0,    6,   16,   15,   23,   25,    0,   25,   25,
-        0,   24,   24,   24,    0,    2,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    3,    3,
-       21,   21,   21,   21,   20,   20,   20,    0,   25,   18,
-       24,   24,    7,    7,    7,    7,    7,   21,   20,   20,
-
-        0,    0,   24,   24,    7,    7,    7,    7,   20,   20,
-        0,    0,   24,   24,    7,    7,    7,    7,   20,   20,
-        0,    0,   24,   24,    7,    7,    7,    7,   20,   20,
-       17,    0,   24,    0,   14,    7,    7,    7,   20,    0,
-       17,   24,    7,    7,    7,   20,    0,   17,    0,   13,
+        1,    9,    0,    6,   16,   15,   23,   25,    0,   25,
+       25,    0,   24,   24,   24,    0,    2,    7,    7,    7,
+        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
+        3,    3,   21,   21,   21,   21,   20,   20,   20,    0,
+       25,   18,   24,   24,    7,    7,    7,    7,    7,   21,
+
+       20,   20,    0,    0,   24,   24,    7,    7,    7,    7,
+       20,   20,    0,    0,   24,   24,    7,    7,    7,    7,
+       20,   20,    0,    0,   24,   24,    7,    7,    7,    7,
+       20,   20,   17,    0,   24,    0,   14,    7,    7,    7,
+       20,    0,   17,   24,    7,    7,    7,   20,    0,   17,
+        0,   13,    7,    7,    0,    0,    7,    7,    0,    0,
         7,    7,    0,    0,    7,    7,    0,    0,    7,    7,
-        0,    0,    7,    7,    0,    0,    7,    7,    0,    0,
-        7,    7,   17,    0,    7,    7,   17,    7,   17,    7,
-        0
+        0,    0,    7,    7,   17,    0,    7,    7,   17,    7,
+       17,    7,    0
     } ;
 
 static yyconst int yy_ec[256] =
@@ -349,59 +349,59 @@ static yyconst int yy_meta[28] =
         4,    4,    4,    4,    2,    4,    4
     } ;
 
-static yyconst short int yy_base[197] =
+static yyconst short int yy_base[199] =
     {   0,
-        0,    0,   27,    0,   54,    0,  445,  446,  442,  446,
-      446,  440,    0,  446,    0,  446,  446,    0,   70,  446,
-      446,   74,   76,   72,   88,  430,    0,  446,    0,  103,
-      130,  446,    0,   78,  157,  446,    0,  184,  420,  423,
-       93,  198,    0,  446,    0,   86,  202,  214,   85,  427,
-      436,  434,  446,    0,    0,    0,  424,  421,  216,  422,
-        0,  412,  111,  210,  157,  446,    0,    0,    0,  218,
-      224,  418,  417,    0,  241,    0,  408,  406,  184,  446,
-        0,  416,  225,  415,  405,  222,  248,  258,  413,  412,
-      256,  253,  266,  409,  410,  404,  397,  407,  258,  260,
-
-      404,  270,  264,  265,  403,  276,  393,  391,  270,  271,
-      282,  402,  276,  279,  289,  401,  389,  392,  281,  286,
-      396,  294,  288,  308,  395,  299,  377,   90,  293,  313,
-      305,  388,  301,  225,  446,  311,  387,  374,  311,  373,
-      313,  329,  363,  322,  331,  335,  326,  363,  337,  446,
-      329,  335,  328,  333,  307,  337,  341,  304,  342,  254,
-      242,  345,  237,  346,  349,  220,  350,  197,  185,  353,
-      180,  354,  168,  160,  153,  143,  131,  126,  446,    0,
-      446,  368,  124,  114,  374,  376,  378,  380,  385,  391,
-      396,  109,  399,  401,  403,   95
+        0,    0,   27,    0,   54,    0,  449,  450,  446,  450,
+      443,  443,    0,  450,    0,  450,  450,    0,   70,  450,
+      450,   74,   76,   72,   88,  433,    0,  450,  440,  103,
+      130,  450,    0,   78,  157,  450,    0,  184,  422,  425,
+       93,  198,    0,  450,    0,   86,  202,  214,   85,  429,
+      438,  435,  435,  450,    0,    0,    0,  425,  422,  216,
+      423,    0,  413,  111,  210,  157,  450,    0,  429,    0,
+        0,  218,  224,  418,  417,    0,  241,    0,  408,  406,
+      184,  450,    0,  416,  225,  415,  405,  222,  248,  258,
+      413,  412,  256,  253,  266,  409,  410,  404,  397,  407,
+
+      258,  260,  404,  270,  264,  265,  403,  276,  393,  391,
+      270,  271,  282,  402,  276,  279,  289,  401,  389,  392,
+      281,  286,  396,  294,  288,  308,  395,  299,  377,   90,
+      293,  313,  305,  388,  301,  225,  450,  311,  387,  374,
+      311,  373,  313,  329,  363,  322,  331,  335,  326,  363,
+      337,  450,  329,  335,  328,  333,  307,  337,  341,  304,
+      342,  254,  242,  345,  237,  346,  349,  220,  350,  197,
+      185,  353,  180,  354,  168,  160,  153,  143,  131,  126,
+      450,    0,  450,  368,  124,  114,  374,  376,  378,  380,
+      385,  391,  396,  109,  399,  401,  403,   95
 
     } ;
 
-static yyconst short int yy_def[197] =
+static yyconst short int yy_def[199] =
     {   0,
-      181,    1,  181,    3,  181,    5,  181,  181,  181,  181,
-      181,  182,  183,  181,  184,  181,  181,  185,  186,  181,
-      181,  187,  187,   23,  181,  188,  189,  181,  189,  181,
-      181,  181,  189,  190,  181,  181,  189,  181,   38,   38,
-      191,   38,  192,  181,  192,  193,  194,  194,   48,  195,
-      181,  182,  181,  183,  184,  185,  186,  181,  186,  188,
-      196,   23,   23,   23,  181,  181,  189,   30,   31,  190,
-       35,  189,   35,   42,  181,   38,   38,   38,  181,  181,
-      192,  193,  193,  195,   48,   48,   48,  181,  186,  196,
-       23,   23,  189,   35,   75,   38,   38,  193,   48,   48,
-
-      181,  181,   23,   23,  189,  189,   38,   38,   48,   48,
-      181,  181,   23,   23,  189,  189,   38,   38,   48,   48,
-      181,  181,   23,   23,  189,  189,   38,   38,   48,   48,
-      181,  181,   23,  181,  181,  189,  189,   38,   48,  181,
-      181,  124,  189,  189,   38,  130,  181,  181,  181,  181,
-      189,  189,  181,  181,  189,  189,  181,  181,  189,  189,
-      181,  181,  189,  189,  181,  181,  189,  189,  181,  181,
-      189,  189,  181,  181,  189,  189,  181,  189,  181,  189,
-        0,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181
+      183,    1,  183,    3,  183,    5,  183,  183,  183,  183,
+      183,  184,  185,  183,  186,  183,  183,  187,  188,  183,
+      183,  189,  189,   23,  183,  190,  191,  183,  191,  183,
+      183,  183,  191,  192,  183,  183,  191,  183,   38,   38,
+      193,   38,  194,  183,  194,  195,  196,  196,   48,  197,
+      183,  183,  184,  183,  185,  186,  187,  188,  183,  188,
+      190,  198,   23,   23,   23,  183,  183,  191,  191,   30,
+       31,  192,   35,  191,   35,   42,  183,   38,   38,   38,
+      183,  183,  194,  195,  195,  197,   48,   48,   48,  183,
+      188,  198,   23,   23,  191,   35,   77,   38,   38,  195,
+
+       48,   48,  183,  183,   23,   23,  191,  191,   38,   38,
+       48,   48,  183,  183,   23,   23,  191,  191,   38,   38,
+       48,   48,  183,  183,   23,   23,  191,  191,   38,   38,
+       48,   48,  183,  183,   23,  183,  183,  191,  191,   38,
+       48,  183,  183,  126,  191,  191,   38,  132,  183,  183,
+      183,  183,  191,  191,  183,  183,  191,  191,  183,  183,
+      191,  191,  183,  183,  191,  191,  183,  183,  191,  191,
+      183,  183,  191,  191,  183,  183,  191,  191,  183,  191,
+      183,  191,    0,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183
 
     } ;
 
-static yyconst short int yy_nxt[474] =
+static yyconst short int yy_nxt[478] =
     {   0,
         8,    9,   10,   11,   12,   13,   14,    8,   15,   16,
         8,   17,   18,   19,   20,   21,   22,   22,   22,   23,
@@ -411,53 +411,53 @@ static yyconst short int yy_nxt[474] =
        38,   41,   27,   42,    8,    9,   10,   11,   43,   13,
         8,   44,   15,   16,   45,   17,   18,   46,   20,   21,
        47,   47,   47,   48,   47,   49,   47,   47,   25,   45,
-       50,   58,   67,   59,   60,   61,   60,   61,   64,   65,
-       66,  134,   62,   67,   79,   66,   63,   58,   90,   83,
-
-       60,   87,   60,   67,  135,   85,   67,   67,   67,   67,
-       67,   67,   81,   68,   67,   67,   68,   55,   67,   68,
-       68,   68,   68,   68,   68,   68,   68,   54,   68,   68,
-       67,   62,   91,   67,   67,   67,   67,   67,   67,  180,
-       69,   67,   67,   69,  179,   67,   69,   69,   69,   69,
-       69,   69,   69,   69,  171,   69,   69,   67,   65,   66,
-       67,   67,   67,   67,   67,   67,  178,   71,   72,   67,
-       73,  169,   67,   71,   71,   71,   71,   71,   71,   71,
-       71,  177,   71,   71,   67,   65,   66,   67,   67,   67,
-       67,   67,   67,  175,   74,   75,   67,   76,  173,   67,
-
-       76,   76,   76,   76,   76,   76,   76,   76,  163,   76,
-       74,   74,   84,   61,   74,   74,   74,   74,   74,   74,
-       74,   74,   67,   74,   84,   61,  134,   58,   84,   89,
-       62,  161,   92,   67,   86,   67,   58,   71,   98,  135,
-       84,   67,   85,   99,   67,   67,   67,   67,   67,   67,
-      167,   95,   67,   67,   95,  165,   67,   95,   95,   95,
-       95,   95,   95,   95,   95,  155,   95,   95,   85,  101,
-      100,  102,  103,   62,  109,  104,   62,  105,   85,  106,
-       85,  101,  110,  112,   62,   62,  113,  105,  114,  116,
-       85,   85,  119,  121,  120,  122,   62,  124,  123,   62,
-
-      125,   85,  126,  129,  130,  121,   85,  132,   62,  134,
-      125,  133,  137,   85,  134,  153,  139,  140,  141,  142,
-      159,   62,  135,  143,  144,  140,  148,  135,   62,  146,
-      149,   85,  149,   85,  143,  152,  149,  153,  149,  154,
-      155,  157,  156,  150,  153,  150,  158,  143,  155,  150,
-      160,  150,  161,  163,  162,  164,  161,  163,  166,  168,
-      169,  171,  170,  172,  169,  171,  174,  176,   52,   52,
-       52,   52,   52,   52,   56,  140,  151,   56,   56,   57,
-       57,   62,   62,   60,   60,   67,  147,   67,   67,   67,
-       67,   70,  145,   70,   70,   70,   70,   80,  125,  121,
-
-      138,   80,   82,   82,   85,   85,   84,   84,  136,  131,
-      128,  127,  105,  101,  118,  117,  115,  111,   58,  108,
-      107,   75,   71,   61,   58,   85,   61,  181,   97,   96,
-       94,   93,   62,   61,   88,  181,   53,   51,   61,   78,
-       77,   61,   53,   51,  181,    7,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181
+       50,   59,   68,   60,   61,   62,   61,   62,   65,   66,
+       67,  136,   63,   68,   81,   67,   64,   59,   92,   85,
+
+       61,   89,   61,   68,  137,   87,   68,   68,   68,   68,
+       68,   68,   83,   70,   68,   68,   70,   56,   68,   70,
+       70,   70,   70,   70,   70,   70,   70,   55,   70,   70,
+       68,   63,   93,   68,   68,   68,   68,   68,   68,  182,
+       71,   68,   68,   71,  181,   68,   71,   71,   71,   71,
+       71,   71,   71,   71,  173,   71,   71,   68,   66,   67,
+       68,   68,   68,   68,   68,   68,  180,   73,   74,   68,
+       75,  171,   68,   73,   73,   73,   73,   73,   73,   73,
+       73,  179,   73,   73,   68,   66,   67,   68,   68,   68,
+       68,   68,   68,  177,   76,   77,   68,   78,  175,   68,
+
+       78,   78,   78,   78,   78,   78,   78,   78,  165,   78,
+       76,   76,   86,   62,   76,   76,   76,   76,   76,   76,
+       76,   76,   68,   76,   86,   62,  136,   59,   86,   91,
+       63,  163,   94,   68,   88,   68,   59,   73,  100,  137,
+       86,   68,   87,  101,   68,   68,   68,   68,   68,   68,
+      169,   97,   68,   68,   97,  167,   68,   97,   97,   97,
+       97,   97,   97,   97,   97,  157,   97,   97,   87,  103,
+      102,  104,  105,   63,  111,  106,   63,  107,   87,  108,
+       87,  103,  112,  114,   63,   63,  115,  107,  116,  118,
+       87,   87,  121,  123,  122,  124,   63,  126,  125,   63,
+
+      127,   87,  128,  131,  132,  123,   87,  134,   63,  136,
+      127,  135,  139,   87,  136,  155,  141,  142,  143,  144,
+      161,   63,  137,  145,  146,  142,  150,  137,   63,  148,
+      151,   87,  151,   87,  145,  154,  151,  155,  151,  156,
+      157,  159,  158,  152,  155,  152,  160,  145,  157,  152,
+      162,  152,  163,  165,  164,  166,  163,  165,  168,  170,
+      171,  173,  172,  174,  171,  173,  176,  178,   53,   53,
+       53,   53,   53,   53,   57,  142,  153,   57,   57,   58,
+       58,   63,   63,   61,   61,   68,  149,   68,   68,   68,
+       68,   72,  147,   72,   72,   72,   72,   82,  127,  123,
+
+      140,   82,   84,   84,   87,   87,   86,   86,  138,  133,
+      130,  129,  107,  103,  120,  119,  117,  113,   59,  110,
+      109,   77,   73,   62,   59,   87,   62,  183,   99,   98,
+       96,   95,   69,   63,   62,   90,  183,   54,   52,   51,
+       62,   80,   79,   69,   62,   54,   52,   51,  183,    7,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183
     } ;
 
-static yyconst short int yy_chk[474] =
+static yyconst short int yy_chk[478] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -468,49 +468,49 @@ static yyconst short int yy_chk[474] =
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,   19,   34,   19,   22,   22,   23,   23,   24,   25,
-       25,  128,   24,   34,   41,   41,   23,   46,  196,   46,
-
-       22,   49,   23,   30,  128,   49,   30,   30,   30,   30,
-       30,   30,  192,   30,   30,   30,   30,  184,   30,   30,
-       30,   30,   30,   30,   30,   30,   30,  183,   30,   30,
-       31,   63,   63,   31,   31,   31,   31,   31,   31,  178,
-       31,   31,   31,   31,  177,   31,   31,   31,   31,   31,
-       31,   31,   31,   31,  176,   31,   31,   35,   65,   65,
-       35,   35,   35,   35,   35,   35,  175,   35,   35,   35,
-       35,  174,   35,   35,   35,   35,   35,   35,   35,   35,
-       35,  173,   35,   35,   38,   79,   79,   38,   38,   38,
-       38,   38,   38,  171,   38,   38,   38,   38,  169,   38,
-
-       38,   38,   38,   38,   38,   38,   38,   38,  168,   38,
+       25,  130,   24,   34,   41,   41,   23,   46,  198,   46,
+
+       22,   49,   23,   30,  130,   49,   30,   30,   30,   30,
+       30,   30,  194,   30,   30,   30,   30,  186,   30,   30,
+       30,   30,   30,   30,   30,   30,   30,  185,   30,   30,
+       31,   64,   64,   31,   31,   31,   31,   31,   31,  180,
+       31,   31,   31,   31,  179,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,  178,   31,   31,   35,   66,   66,
+       35,   35,   35,   35,   35,   35,  177,   35,   35,   35,
+       35,  176,   35,   35,   35,   35,   35,   35,   35,   35,
+       35,  175,   35,   35,   38,   81,   81,   38,   38,   38,
+       38,   38,   38,  173,   38,   38,   38,   38,  171,   38,
+
+       38,   38,   38,   38,   38,   38,   38,   38,  170,   38,
        38,   42,   47,   47,   42,   42,   42,   42,   42,   42,
-       42,   42,   70,   42,   48,   48,  134,   59,   47,   59,
-       64,  166,   64,   70,   48,   71,   83,   71,   83,  134,
-       48,   75,   86,   86,   75,   75,   75,   75,   75,   75,
-      163,   75,   75,   75,   75,  161,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,  160,   75,   75,   87,   88,
-       87,   88,   91,   92,   99,   92,   91,   93,   99,   93,
-      100,  102,  100,  102,  103,  104,  103,  106,  104,  106,
-      109,  110,  109,  111,  110,  111,  113,  114,  113,  114,
-
-      115,  119,  115,  119,  120,  122,  120,  122,  123,  124,
-      126,  123,  126,  129,  130,  158,  129,  131,  131,  133,
-      155,  133,  124,  136,  136,  141,  141,  130,  124,  139,
-      142,  139,  145,  130,  144,  144,  146,  147,  149,  147,
-      151,  153,  151,  142,  154,  145,  154,  152,  156,  146,
-      156,  149,  157,  159,  157,  159,  162,  164,  162,  164,
-      165,  167,  165,  167,  170,  172,  170,  172,  182,  182,
-      182,  182,  182,  182,  185,  148,  143,  185,  185,  186,
-      186,  187,  187,  188,  188,  189,  140,  189,  189,  189,
-      189,  190,  138,  190,  190,  190,  190,  191,  137,  132,
-
-      127,  191,  193,  193,  194,  194,  195,  195,  125,  121,
-      118,  117,  116,  112,  108,  107,  105,  101,   98,   97,
-       96,   95,   94,   90,   89,   85,   84,   82,   78,   77,
-       73,   72,   62,   60,   58,   57,   52,   51,   50,   40,
-       39,   26,   12,    9,    7,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181
+       42,   42,   72,   42,   48,   48,  136,   60,   47,   60,
+       65,  168,   65,   72,   48,   73,   85,   73,   85,  136,
+       48,   77,   88,   88,   77,   77,   77,   77,   77,   77,
+      165,   77,   77,   77,   77,  163,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,  162,   77,   77,   89,   90,
+       89,   90,   93,   94,  101,   94,   93,   95,  101,   95,
+      102,  104,  102,  104,  105,  106,  105,  108,  106,  108,
+      111,  112,  111,  113,  112,  113,  115,  116,  115,  116,
+
+      117,  121,  117,  121,  122,  124,  122,  124,  125,  126,
+      128,  125,  128,  131,  132,  160,  131,  133,  133,  135,
+      157,  135,  126,  138,  138,  143,  143,  132,  126,  141,
+      144,  141,  147,  132,  146,  146,  148,  149,  151,  149,
+      153,  155,  153,  144,  156,  147,  156,  154,  158,  148,
+      158,  151,  159,  161,  159,  161,  164,  166,  164,  166,
+      167,  169,  167,  169,  172,  174,  172,  174,  184,  184,
+      184,  184,  184,  184,  187,  150,  145,  187,  187,  188,
+      188,  189,  189,  190,  190,  191,  142,  191,  191,  191,
+      191,  192,  140,  192,  192,  192,  192,  193,  139,  134,
+
+      129,  193,  195,  195,  196,  196,  197,  197,  127,  123,
+      120,  119,  118,  114,  110,  109,  107,  103,  100,   99,
+       98,   97,   96,   92,   91,   87,   86,   84,   80,   79,
+       75,   74,   69,   63,   61,   59,   58,   53,   52,   51,
+       50,   40,   39,   29,   26,   12,   11,    9,    7,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -617,7 +617,7 @@ extern void yyerror         __P((char *));
 
 #define GOTRUNAS 2
 
-#line 614 "lex.yy.c"
+#line 621 "lex.yy.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -768,9 +768,9 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
 
-#line 94 "parse.lex"
+#line 101 "parse.lex"
 
-#line 767 "lex.yy.c"
+#line 774 "lex.yy.c"
 
        if ( yy_init )
                {
@@ -821,13 +821,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 182 )
+                               if ( yy_current_state >= 184 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 446 );
+               while ( yy_base[yy_current_state] != 450 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -855,14 +855,14 @@ do_action:        /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 95 "parse.lex"
+#line 102 "parse.lex"
 {                      /* throw away space/tabs */
                            sawspace = TRUE;    /* but remember for fill_args */
                        }
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 99 "parse.lex"
+#line 106 "parse.lex"
 { 
                            sawspace = TRUE;    /* remember for fill_args */
                            ++sudolineno;
@@ -871,7 +871,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 105 "parse.lex"
+#line 112 "parse.lex"
 {
                            LEXTRACE("QUOTEDCHAR ");
                            fill_args(yytext + 1, 1, sawspace);
@@ -880,7 +880,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 111 "parse.lex"
+#line 118 "parse.lex"
 {
                            BEGIN INITIAL;
                            unput(*yytext);
@@ -889,7 +889,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 117 "parse.lex"
+#line 124 "parse.lex"
 { 
                            ++sudolineno; 
                            LEXTRACE("\n");
@@ -898,7 +898,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 123 "parse.lex"
+#line 130 "parse.lex"
 {
                            ++sudolineno;
                            LEXTRACE("\n");
@@ -907,7 +907,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 129 "parse.lex"
+#line 136 "parse.lex"
 {
                            LEXTRACE("ARG ");
                            fill_args(yytext, yyleng, sawspace);
@@ -916,7 +916,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 135 "parse.lex"
+#line 142 "parse.lex"
 {
                            LEXTRACE(", ");
                            return(',');
@@ -924,14 +924,15 @@ YY_RULE_SETUP
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 140 "parse.lex"
+#line 147 "parse.lex"
 {
-                           return('!');                /* return '!' */
+                           if (yyleng % 2 == 1)
+                               return('!');    /* return '!' */
                        }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 144 "parse.lex"
+#line 152 "parse.lex"
 {
                            LEXTRACE("= ");
                            return('=');
@@ -939,7 +940,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 149 "parse.lex"
+#line 157 "parse.lex"
 {
                            LEXTRACE(": ");
                            return(':');
@@ -947,14 +948,14 @@ YY_RULE_SETUP
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 154 "parse.lex"
+#line 162 "parse.lex"
 {
                            return('.');
                        }
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 158 "parse.lex"
+#line 166 "parse.lex"
 { 
                                /* cmnd does not require passwd for this user */
                                LEXTRACE("NOPASSWD ");
@@ -963,7 +964,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 164 "parse.lex"
+#line 172 "parse.lex"
 { 
                                /* cmnd requires passwd for this user */
                                LEXTRACE("PASSWD ");
@@ -972,7 +973,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 170 "parse.lex"
+#line 178 "parse.lex"
 {
                            /* netgroup */
                            fill(yytext, yyleng);
@@ -981,7 +982,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 176 "parse.lex"
+#line 184 "parse.lex"
 {
                            /* UN*X group */
                            fill(yytext, yyleng);
@@ -990,7 +991,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 182 "parse.lex"
+#line 190 "parse.lex"
 {
                            fill(yytext, yyleng);
                            LEXTRACE("NTWKADDR ");
@@ -999,7 +1000,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 188 "parse.lex"
+#line 196 "parse.lex"
 {
                            fill(yytext, yyleng);
                            LEXTRACE("FQHOST ");
@@ -1008,7 +1009,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 194 "parse.lex"
+#line 202 "parse.lex"
 {
                                BEGIN GOTRUNAS;
                                LEXTRACE("RUNAS ");
@@ -1017,7 +1018,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 200 "parse.lex"
+#line 208 "parse.lex"
 {
                            /* Runas_Alias that user can run command as or ALL */
                            fill(yytext, yyleng);
@@ -1032,7 +1033,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 212 "parse.lex"
+#line 220 "parse.lex"
 {
                            /* username/uid that user can run command as */
                            fill(yytext, yyleng);
@@ -1042,12 +1043,12 @@ YY_RULE_SETUP
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 219 "parse.lex"
+#line 227 "parse.lex"
 BEGIN INITIAL;
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 222 "parse.lex"
+#line 230 "parse.lex"
 {
                            /* directories can't have args... */
                            if (yytext[yyleng - 1] == '/') {
@@ -1063,20 +1064,21 @@ YY_RULE_SETUP
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 235 "parse.lex"
+#line 243 "parse.lex"
 {
                            fill(yytext, yyleng);
                            if (strcmp(yytext, "ALL") == 0) {
                                LEXTRACE("ALL ");
                                return(ALL);
+                           } else {
+                               LEXTRACE("ALIAS ");
+                               return(ALIAS);
                            }
-                           LEXTRACE("ALIAS ");
-                           return(ALIAS);
                        }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 245 "parse.lex"
+#line 254 "parse.lex"
 {
                            fill(yytext, yyleng);
                            if (strcmp(yytext, "Host_Alias") == 0) {
@@ -1103,17 +1105,17 @@ YY_RULE_SETUP
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 269 "parse.lex"
+#line 278 "parse.lex"
 {
                            return(ERROR);
                        }       /* parse error */
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 273 "parse.lex"
+#line 282 "parse.lex"
 ECHO;
        YY_BREAK
-#line 1110 "lex.yy.c"
+#line 1119 "lex.yy.c"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(GOTCMND):
 case YY_STATE_EOF(GOTRUNAS):
@@ -1407,7 +1409,7 @@ static yy_state_type yy_get_previous_state()
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 182 )
+                       if ( yy_current_state >= 184 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1442,11 +1444,11 @@ yy_state_type yy_current_state;
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 182 )
+               if ( yy_current_state >= 184 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 181);
+       yy_is_jam = (yy_current_state == 183);
 
        return yy_is_jam ? 0 : yy_current_state;
        }
@@ -2001,7 +2003,7 @@ int main()
        return 0;
        }
 #endif
-#line 273 "parse.lex"
+#line 282 "parse.lex"
 
 static void
 fill(s, len)
index e5bef682722aa893cdf5b9476129be564daefe12..eca54e6abf45440594c1fca9dd2b2199339c303f 100644 (file)
@@ -54,6 +54,16 @@ static char yyrcsid[]
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+/*
+ * XXX - the whole opFOO naming thing is somewhat bogus.
+ *
+ * XXX - the way things are stored for printmatches is stupid,
+ *       they should be stored as elements in an array and then
+ *       list_matches() can format things the way it wants.
+ *
+ * XXX - '!' chars are not preserved when expanding Aliases
+ */
+
 #include "config.h"
 #include <stdio.h>
 #ifdef STDC_HEADERS
@@ -195,26 +205,26 @@ yyerror(s)
 #endif
     parse_error = TRUE;
 }
-#line 175 "parse.yacc"
+#line 192 "parse.yacc"
 typedef union {
     char *string;
     int BOOLEAN;
     struct sudo_command command;
     int tok;
 } YYSTYPE;
-#line 199 "sudo.tab.c"
+#line 216 "sudo.tab.c"
 #define ALIAS 257
 #define NTWKADDR 258
 #define FQHOST 259
 #define NETGROUP 260
 #define USERGROUP 261
 #define NAME 262
-#define RUNAS 263
-#define NOPASSWD 264
-#define PASSWD 265
-#define COMMAND 266
-#define COMMENT 267
-#define ALL 268
+#define ALL 263
+#define RUNAS 264
+#define NOPASSWD 265
+#define PASSWD 266
+#define COMMAND 267
+#define COMMENT 268
 #define HOSTALIAS 269
 #define CMNDALIAS 270
 #define USERALIAS 271
@@ -222,168 +232,170 @@ typedef union {
 #define ERROR 273
 #define YYERRCODE 256
 short yylhs[] = {                                        -1,
-    0,    0,    3,    3,    5,    3,    3,    3,    3,    3,
-    6,    6,   11,   14,   16,   14,   15,   15,   15,   15,
-   15,   15,   13,   13,   17,    2,   20,    2,   18,   18,
-   21,   21,   22,   24,   22,   23,   23,   23,   23,   23,
-   19,   19,   19,    1,    1,    1,    8,    8,   26,   25,
-   12,   12,    9,    9,   28,   27,   29,   29,   10,   10,
-   31,   30,    7,    7,   33,   32,   34,   34,   35,   36,
-   35,    4,    4,    4,    4,    4,
+    0,    0,    5,    5,    7,    5,    5,    5,    5,    5,
+    8,    8,   13,   16,   16,    2,    2,    2,    2,    2,
+    2,   15,   15,   17,   20,   21,   20,   18,   18,   22,
+   22,   23,   24,   23,    3,    3,    3,    3,    3,   19,
+   19,   19,    1,    1,    1,   10,   10,   26,   25,   14,
+   14,   11,   11,   28,   27,   29,   29,   12,   12,   31,
+   30,    9,    9,   33,   32,   34,   34,    6,    6,    4,
+    4,    4,    4,    4,
 };
 short yylen[] = {                                         2,
     1,    2,    1,    2,    0,    3,    2,    2,    2,    2,
-    1,    3,    3,    1,    0,    3,    1,    1,    1,    1,
-    1,    1,    1,    3,    3,    1,    0,    3,    0,    2,
-    1,    3,    1,    0,    3,    1,    1,    1,    1,    1,
-    0,    1,    1,    1,    1,    1,    1,    3,    0,    4,
-    1,    3,    1,    3,    0,    4,    1,    3,    1,    3,
-    0,    4,    1,    3,    0,    4,    1,    3,    1,    0,
-    3,    1,    1,    1,    1,    1,
+    1,    3,    3,    1,    2,    1,    1,    1,    1,    1,
+    1,    1,    3,    3,    1,    0,    3,    0,    2,    1,
+    3,    1,    0,    3,    1,    1,    1,    1,    1,    0,
+    1,    1,    1,    1,    1,    1,    3,    0,    4,    1,
+    3,    1,    3,    0,    4,    1,    3,    1,    3,    0,
+    4,    1,    3,    0,    4,    1,    3,    1,    2,    1,
+    1,    1,    1,    1,
 };
 short yydefred[] = {                                      0,
     0,    3,    0,    0,    0,    0,    0,    1,    0,    4,
-   49,    0,   47,   55,    0,   53,   65,    0,   63,   61,
-    0,   59,    2,   75,   74,   73,   72,   76,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,   22,   18,   21,
-   19,   20,   17,   15,    0,   11,    0,   51,   14,    0,
-   48,    0,   54,    0,   64,    0,   60,    0,    0,    0,
-    0,    0,   45,   46,   44,   27,   26,   57,    0,   70,
-   69,    0,   67,   39,   38,   37,   36,   40,   34,    0,
-   31,   33,   16,   12,    0,    0,   23,    0,   52,    0,
-    0,    0,    0,    0,    0,    0,    0,   42,   43,    0,
-   28,   58,   71,   68,   35,   32,   24,   25,
+   48,    0,   46,   54,    0,   52,   64,    0,   62,   60,
+    0,   58,    2,   73,   72,   71,   70,   74,    0,   68,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   69,
+   21,   17,   20,   18,   19,   16,    0,   14,    0,   11,
+    0,   50,    0,   47,    0,   53,    0,   63,    0,   59,
+   15,    0,    0,    0,    0,   44,   43,   45,   26,   25,
+   56,    0,   66,    0,   38,   37,   36,   35,   39,   33,
+   32,    0,   30,   12,    0,    0,   22,    0,   51,    0,
+    0,    0,    0,    0,    0,    0,   41,   42,    0,   27,
+   57,   67,   34,   31,   23,   24,
 };
 short yydgoto[] = {                                       7,
-   67,   68,    8,   71,    9,   45,   18,   12,   15,   21,
-   46,   47,   86,   48,   49,   58,   87,   88,  100,   90,
-   80,   81,   82,   94,   13,   30,   16,   32,   69,   22,
-   36,   19,   34,   72,   73,   92,
+   70,   48,   81,   30,    8,   31,    9,   49,   18,   12,
+   15,   21,   50,   51,   86,   52,   87,   88,   99,   71,
+   90,   82,   83,   93,   13,   32,   16,   34,   72,   22,
+   38,   19,   36,   74,
 };
-short yysindex[] = {                                   -247,
- -262,    0, -242, -223, -216, -215, -247,    0, -254,    0,
-    0,  -37,    0,    0,  -15,    0,    0,  -13,    0,    0,
-  -12,    0,    0,    0,    0,    0,    0,    0,  -33,  -14,
-242,  -11, -223,  -10, -216,   -8, -215,    0,    0,    0,
-    0,    0,    0,    0,   -9,    0,  -42,    0,    0,  -33,
-    0,   -2,    0,  -29,    0,  -20,    0,  -33,  -33, -209,
-  -33,    4,    0,    0,    0,    0,    0,    0,   11,    0,
-    0,   12,    0,    0,    0,    0,    0,    0,    0,   13,
-    0,    0,    0,    0,  -20,   14,    0, -236,    0,   -2,
-   -2,  -29,  -29,  -20,  -20,   13, -209,    0,    0,   -2,
-    0,    0,    0,    0,    0,    0,    0,    0,
+short yysindex[] = {                                   -242,
+ -264,    0, -247, -246, -244, -236, -242,    0,   -8,    0,
+    0,  -36,    0,    0,  -35,    0,    0,  -34,    0,    0,
+  -27,    0,    0,    0,    0,    0,    0,    0, -215,    0,
 170,  -29, -247,  -25, -246,  -12, -244,   -4, -236,    0,
+    0,    0,    0,    0,    0,    0, -219,    0,    2,    0,
+  -41,    0,  170,    0,  -21,    0,   -8,    0,  174,    0,
+    0,  170, -231,  170,   14,    0,    0,    0,    0,    0,
+    0,   17,    0,   19,    0,    0,    0,    0,    0,    0,
+    0,   20,    0,    0,  174,   21,    0, -259,    0, -248,
+  -21,   -8, -207,  174,   20, -231,    0,    0,  -21,    0,
+    0,    0,    0,    0,    0,    0,
 };
-short yyrindex[] = {                                   -224,
-    0,    0,    0,    0,    0,    0, -224,    0,    0,    0,
+short yyrindex[] = {                                    181,
+    0,    0,    0,    0,    0,    0,  181,    0,    0,    0,
     0,   86,    0,    0,  103,    0,    0,  120,    0,    0,
   137,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,  154,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,  -21,
-    0,    1,    0,    0,    0,    0,    0,    0,   18,    0,
-    0,   35,    0,    0,    0,    0,    0,    0,    0,   52,
-    0,    0,    0,    0,    0,   69,    0,   -1,    0,    0,
-    0,    0,    0,    0,    0,  163,  -21,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  154,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  -33,    0,    1,    0,    0,    0,    0,    0,
+    0,   18,    0,   35,    0,    0,    0,    0,    0,    0,
+    0,   52,    0,    0,    0,   69,    0,  -16,    0,    0,
+    0,    0,    0,    0,  -28,  -33,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,
 };
 short yygindex[] = {                                      0,
-    0,  -74,   53,   54,    0,    0,    0,    0,    0,    0,
-    2,   15,    0,  -31,    0,    0,  -35,    0,    0,    0,
-  -19,  -84,    0,    0,   33,    0,   34,    0,    0,   31,
-    0,   36,    0,    0,  -53,    0,
+  -24,   15,  -26,   41,   64,  -55,    0,    0,    0,    0,
+    0,    0,   10,   22,    0,    9,  -22,    0,    0,  -83,
+    0,   -7,  -17,    0,   46,    0,   45,    0,    0,   42,
+    0,   47,    0,    0,
 };
-#define YYTABLESIZE 431
-short yytable[] = {                                      44,
-   50,   61,   24,   70,   10,   25,   26,   27,    1,  105,
-  106,   29,   79,   28,   11,  101,  102,   56,   60,    2,
-   31,    3,    4,    5,    6,  108,   83,   98,   99,   89,
-   66,   41,    5,   14,   66,    5,    5,    5,  103,  104,
-   17,   20,   33,    5,   35,   37,   50,   61,   59,   52,
-   54,   62,   56,   85,   91,   93,   95,   97,   50,   23,
-   84,  107,   29,   51,   62,   96,   53,   57,   13,    0,
-   55,    0,    0,    0,    0,   56,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    8,    0,    0,    0,    0,
-    0,    0,   66,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    9,    0,    0,    0,    0,    0,    0,   62,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    7,
+#define YYTABLESIZE 444
+short yytable[] = {                                      28,
+   49,   73,   64,   10,   29,   97,   98,  101,   66,   11,
+   14,   69,   17,    1,   67,  106,   40,   55,   68,   63,
+   20,   33,   35,   37,   29,    2,    3,    4,    5,    6,
+   39,   53,   85,   49,   65,   55,  102,   41,   42,   43,
+   44,   24,   45,   46,   25,   26,   27,   28,   57,   75,
+   55,   61,   76,   77,   78,   79,   59,   64,   49,   62,
+   91,   61,   92,   94,   96,  100,  103,   65,   13,   40,
+   23,   84,   89,  105,   65,   55,  104,   95,   54,   56,
+   60,    0,    0,   58,   61,    8,    0,    0,    0,    0,
+    0,    0,   65,    0,    0,    0,    0,    0,    0,    0,
+    0,   13,    9,    0,    0,    0,    0,    0,    0,   61,
+    0,    0,    0,    0,    0,    0,    0,    0,    8,    7,
     0,    0,    0,    0,    0,    0,   13,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,   10,    0,    0,    0,
+    0,    0,    0,    0,    0,    9,   10,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    6,    0,    0,    0,    0,    0,    0,
+    0,    0,    7,    6,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   10,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    6,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   30,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,   38,   39,   40,   41,   24,   42,    0,
-   25,   26,   27,    0,   43,   29,   74,    0,   28,   75,
-   76,   77,   29,   29,   29,    0,   29,   78,    0,    0,
-    0,    0,    0,    0,   63,   41,   50,   50,    0,    0,
-   50,   50,   50,   64,   41,   65,   41,   50,   50,   50,
-   50,   50,   50,   56,   56,    0,    0,   56,   56,   56,
-    0,    0,    0,    0,   56,   56,   56,   56,   56,   56,
-   66,   66,    0,    0,   66,   66,   66,    0,    0,    0,
-    0,   66,   66,   66,   66,   66,   66,   62,   62,    0,
-    0,   62,   62,   62,    0,    0,    0,    0,   62,   62,
-   62,   62,   62,   62,   13,   13,    0,    0,   13,   13,
-   13,    0,    0,    0,    0,   13,   13,   13,   13,   13,
-   13,    8,    8,    0,    0,    8,    8,    8,    0,    0,
-    0,    0,    8,    8,    8,    8,    8,    8,    9,    9,
-    0,    0,    9,    9,    9,    0,    0,    0,    0,    9,
+    0,    0,   47,    0,    0,    0,   80,    0,    0,    0,
+    0,    0,    0,    5,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   28,    0,    0,    0,    0,   29,   28,
+    0,   28,   28,   28,   29,   66,   29,   29,   29,    0,
+   40,   67,    0,    0,    0,   68,   40,    0,   24,    0,
+   40,   25,   26,   27,   28,    0,   49,   49,    0,    0,
+   49,   49,   49,   49,    0,    0,    0,    0,   49,   49,
+   49,   49,   49,   55,   55,    0,    0,   55,   55,   55,
+   55,    0,    0,    0,    0,   55,   55,   55,   55,   55,
+   65,   65,    0,    0,   65,   65,   65,   65,    0,    0,
+    0,    0,   65,   65,   65,   65,   65,   61,   61,    0,
+    0,   61,   61,   61,   61,    0,    0,    0,    0,   61,
+   61,   61,   61,   61,   13,   13,    0,    0,   13,   13,
+   13,   13,    0,    0,    0,    0,   13,   13,   13,   13,
+   13,    8,    8,    0,    0,    8,    8,    8,    8,    0,
+    0,    0,    0,    8,    8,    8,    8,    8,    9,    9,
+    0,    0,    9,    9,    9,    9,    0,    0,    0,    0,
     9,    9,    9,    9,    9,    7,    7,    0,    0,    7,
-    7,    7,    0,    0,    0,    0,    7,    7,    7,    7,
-    7,    7,   10,   10,    0,    0,   10,   10,   10,    0,
-    0,    0,    0,   10,   10,   10,   10,   10,   10,    6,
-    6,    0,    0,    6,    6,    6,    0,    0,    0,   30,
-    6,    6,    6,    6,    6,    6,   30,   30,   30,    0,
-   30,
+    7,    7,    7,    0,    0,    0,    0,    7,    7,    7,
+    7,    7,   10,   10,    0,    0,   10,   10,   10,   10,
+    0,    0,    0,    0,   10,   10,   10,   10,   10,    6,
+    6,    0,    0,    6,    6,    6,    6,    0,    0,    0,
+    0,    6,    6,    6,    6,    6,   41,   42,   43,   44,
+   75,   45,   46,   76,   77,   78,   79,    5,    0,    0,
+    5,    5,    5,    5,
 };
 short yycheck[] = {                                      33,
-    0,   44,  257,   33,  267,  260,  261,  262,  256,   94,
-   95,   33,   33,  268,  257,   90,   91,    0,   61,  267,
-   58,  269,  270,  271,  272,  100,   58,  264,  265,   61,
-   33,   33,  257,  257,    0,  260,  261,  262,   92,   93,
-  257,  257,   58,  268,   58,   58,   61,   44,   58,   61,
-   61,    0,   61,  263,   44,   44,   44,   44,   58,    7,
-   59,   97,    9,   31,   50,   85,   33,   37,    0,   -1,
-   35,   -1,   -1,   -1,   -1,   58,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,    0,   -1,   -1,   -1,   -1,
+    0,   57,   44,  268,   33,  265,  266,   91,  257,  257,
+  257,   33,  257,  256,  263,   99,   33,    0,  267,   61,
+  257,   58,   58,   58,   33,  268,  269,  270,  271,  272,
+   58,   61,  264,   33,    0,   61,   92,  257,  258,  259,
+  260,  257,  262,  263,  260,  261,  262,  263,   61,  257,
+   33,    0,  260,  261,  262,  263,   61,   44,   58,   58,
+   44,   47,   44,   44,   44,   90,   93,   33,    0,   29,
+    7,   62,   64,   96,   53,   58,   94,   85,   33,   35,
+   39,   -1,   -1,   37,   33,    0,   -1,   -1,   -1,   -1,
    -1,   -1,   58,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,   58,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,    0,
+   -1,   33,    0,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   33,    0,
    -1,   -1,   -1,   -1,   -1,   -1,   58,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,    0,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   33,    0,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   33,    0,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   33,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   33,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -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,  257,  258,  259,  260,  257,  262,   -1,
-  260,  261,  262,   -1,  268,  257,  257,   -1,  268,  260,
-  261,  262,  264,  265,  266,   -1,  268,  268,   -1,   -1,
-   -1,   -1,   -1,   -1,  257,  257,  256,  257,   -1,   -1,
-  260,  261,  262,  266,  266,  268,  268,  267,  268,  269,
+   -1,   -1,   33,   -1,   -1,   -1,   33,   -1,   -1,   -1,
+   -1,   -1,   -1,   33,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  257,   -1,   -1,   -1,   -1,  257,  263,
+   -1,  265,  266,  267,  263,  257,  265,  266,  267,   -1,
+  257,  263,   -1,   -1,   -1,  267,  263,   -1,  257,   -1,
+  267,  260,  261,  262,  263,   -1,  256,  257,   -1,   -1,
+  260,  261,  262,  263,   -1,   -1,   -1,   -1,  268,  269,
   270,  271,  272,  256,  257,   -1,   -1,  260,  261,  262,
-   -1,   -1,   -1,   -1,  267,  268,  269,  270,  271,  272,
-  256,  257,   -1,   -1,  260,  261,  262,   -1,   -1,   -1,
-   -1,  267,  268,  269,  270,  271,  272,  256,  257,   -1,
-   -1,  260,  261,  262,   -1,   -1,   -1,   -1,  267,  268,
+  263,   -1,   -1,   -1,   -1,  268,  269,  270,  271,  272,
+  256,  257,   -1,   -1,  260,  261,  262,  263,   -1,   -1,
+   -1,   -1,  268,  269,  270,  271,  272,  256,  257,   -1,
+   -1,  260,  261,  262,  263,   -1,   -1,   -1,   -1,  268,
   269,  270,  271,  272,  256,  257,   -1,   -1,  260,  261,
-  262,   -1,   -1,   -1,   -1,  267,  268,  269,  270,  271,
-  272,  256,  257,   -1,   -1,  260,  261,  262,   -1,   -1,
-   -1,   -1,  267,  268,  269,  270,  271,  272,  256,  257,
-   -1,   -1,  260,  261,  262,   -1,   -1,   -1,   -1,  267,
+  262,  263,   -1,   -1,   -1,   -1,  268,  269,  270,  271,
+  272,  256,  257,   -1,   -1,  260,  261,  262,  263,   -1,
+   -1,   -1,   -1,  268,  269,  270,  271,  272,  256,  257,
+   -1,   -1,  260,  261,  262,  263,   -1,   -1,   -1,   -1,
   268,  269,  270,  271,  272,  256,  257,   -1,   -1,  260,
-  261,  262,   -1,   -1,   -1,   -1,  267,  268,  269,  270,
-  271,  272,  256,  257,   -1,   -1,  260,  261,  262,   -1,
-   -1,   -1,   -1,  267,  268,  269,  270,  271,  272,  256,
-  257,   -1,   -1,  260,  261,  262,   -1,   -1,   -1,  257,
-  267,  268,  269,  270,  271,  272,  264,  265,  266,   -1,
-  268,
+  261,  262,  263,   -1,   -1,   -1,   -1,  268,  269,  270,
+  271,  272,  256,  257,   -1,   -1,  260,  261,  262,  263,
+   -1,   -1,   -1,   -1,  268,  269,  270,  271,  272,  256,
+  257,   -1,   -1,  260,  261,  262,  263,   -1,   -1,   -1,
+   -1,  268,  269,  270,  271,  272,  257,  258,  259,  260,
+  257,  262,  263,  260,  261,  262,  263,  257,   -1,   -1,
+  260,  261,  262,  263,
 };
 #define YYFINAL 7
 #ifndef YYDEBUG
@@ -399,8 +411,8 @@ 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,"ALIAS",
-"NTWKADDR","FQHOST","NETGROUP","USERGROUP","NAME","RUNAS","NOPASSWD","PASSWD",
-"COMMAND","COMMENT","ALL","HOSTALIAS","CMNDALIAS","USERALIAS","RUNASALIAS",
+"NTWKADDR","FQHOST","NETGROUP","USERGROUP","NAME","ALL","RUNAS","NOPASSWD",
+"PASSWD","COMMAND","COMMENT","HOSTALIAS","CMNDALIAS","USERALIAS","RUNASALIAS",
 "ERROR",
 };
 char *yyrule[] = {
@@ -410,7 +422,7 @@ char *yyrule[] = {
 "entry : COMMENT",
 "entry : error COMMENT",
 "$$1 :",
-"entry : $$1 user privileges",
+"entry : $$1 opuser privileges",
 "entry : USERALIAS useraliases",
 "entry : HOSTALIAS hostaliases",
 "entry : CMNDALIAS cmndaliases",
@@ -419,8 +431,7 @@ char *yyrule[] = {
 "privileges : privileges ':' privilege",
 "privilege : hostlist '=' cmndspeclist",
 "ophostspec : hostspec",
-"$$2 :",
-"ophostspec : '!' $$2 ophostspec",
+"ophostspec : '!' hostspec",
 "hostspec : ALL",
 "hostspec : NTWKADDR",
 "hostspec : NETGROUP",
@@ -431,15 +442,15 @@ char *yyrule[] = {
 "cmndspeclist : cmndspeclist ',' cmndspec",
 "cmndspec : runasspec nopasswd opcmnd",
 "opcmnd : cmnd",
-"$$3 :",
-"opcmnd : '!' $$3 opcmnd",
+"$$2 :",
+"opcmnd : '!' $$cmnd",
 "runasspec :",
 "runasspec : RUNAS runaslist",
 "runaslist : oprunasuser",
 "runaslist : runaslist ',' oprunasuser",
 "oprunasuser : runasuser",
-"$$4 :",
-"oprunasuser : '!' $$4 oprunasuser",
+"$$3 :",
+"oprunasuser : '!' $$runasuser",
 "runasuser : NAME",
 "runasuser : USERGROUP",
 "runasuser : NETGROUP",
@@ -453,29 +464,28 @@ char *yyrule[] = {
 "cmnd : COMMAND",
 "hostaliases : hostalias",
 "hostaliases : hostaliases ':' hostalias",
-"$$5 :",
-"hostalias : ALIAS $$5 '=' hostlist",
+"$$4 :",
+"hostalias : ALIAS $$4 '=' hostlist",
 "hostlist : ophostspec",
 "hostlist : hostlist ',' ophostspec",
 "cmndaliases : cmndalias",
 "cmndaliases : cmndaliases ':' cmndalias",
-"$$6 :",
-"cmndalias : ALIAS $$6 '=' cmndlist",
+"$$5 :",
+"cmndalias : ALIAS $$5 '=' cmndlist",
 "cmndlist : opcmnd",
 "cmndlist : cmndlist ',' opcmnd",
 "runasaliases : runasalias",
 "runasaliases : runasaliases ':' runasalias",
-"$$7 :",
-"runasalias : ALIAS $$7 '=' runaslist",
+"$$6 :",
+"runasalias : ALIAS $$6 '=' runaslist",
 "useraliases : useralias",
 "useraliases : useraliases ':' useralias",
-"$$8 :",
-"useralias : ALIAS $$8 '=' userlist",
+"$$7 :",
+"useralias : ALIAS $$7 '=' userlist",
 "userlist : opuser",
 "userlist : userlist ',' opuser",
 "opuser : user",
-"$$9 :",
-"opuser : '!' $$9 opuser",
+"opuser : '!' user",
 "user : NAME",
 "user : USERGROUP",
 "user : NETGROUP",
@@ -507,7 +517,7 @@ short *yyss;
 short *yysslim;
 YYSTYPE *yyvs;
 int yystacksize;
-#line 668 "parse.yacc"
+#line 672 "parse.yacc"
 
 typedef struct {
     int type;
@@ -838,7 +848,7 @@ init_parser()
     if (printmatches == TRUE)
        expand_match_list();
 }
-#line 835 "sudo.tab.c"
+#line 852 "sudo.tab.c"
 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
 #if defined(__cplusplus) || __STDC__
 static int yygrowstack(void)
@@ -1019,19 +1029,19 @@ yyreduce:
     switch (yyn)
     {
 case 3:
-#line 212 "parse.yacc"
+#line 233 "parse.yacc"
 { ; }
 break;
 case 4:
-#line 214 "parse.yacc"
+#line 235 "parse.yacc"
 { yyerrok; }
 break;
 case 5:
-#line 215 "parse.yacc"
+#line 236 "parse.yacc"
 { push; }
 break;
 case 6:
-#line 215 "parse.yacc"
+#line 236 "parse.yacc"
 {
                            while (top && user_matches != TRUE) {
                                pop;
@@ -1039,23 +1049,23 @@ case 6:
                        }
 break;
 case 7:
-#line 221 "parse.yacc"
+#line 242 "parse.yacc"
 { ; }
 break;
 case 8:
-#line 223 "parse.yacc"
+#line 244 "parse.yacc"
 { ; }
 break;
 case 9:
-#line 225 "parse.yacc"
+#line 246 "parse.yacc"
 { ; }
 break;
 case 10:
-#line 227 "parse.yacc"
+#line 248 "parse.yacc"
 { ; }
 break;
 case 13:
-#line 235 "parse.yacc"
+#line 256 "parse.yacc"
 {
                            /*
                             * We already did a push if necessary in
@@ -1067,72 +1077,71 @@ case 13:
                            no_passwd = -1;
                        }
 break;
-case 15:
-#line 248 "parse.yacc"
+case 14:
+#line 268 "parse.yacc"
 {
-                           push;
+                           if (yyvsp[0].BOOLEAN == TRUE)
+                               host_matches = TRUE;
                        }
 break;
-case 16:
-#line 250 "parse.yacc"
+case 15:
+#line 272 "parse.yacc"
 {
-                           pop;
-                           if (host_matched == TRUE)
+                           if (yyvsp[0].BOOLEAN == TRUE)
                                host_matches = FALSE;
-                           else if (host_matched == FALSE)
-                               host_matches = TRUE;
                        }
 break;
-case 17:
-#line 258 "parse.yacc"
+case 16:
+#line 277 "parse.yacc"
 {
-                           host_matches = TRUE;
+                           yyval.BOOLEAN = TRUE;
+                           free(yyvsp[0].string);
                        }
 break;
-case 18:
-#line 261 "parse.yacc"
+case 17:
+#line 281 "parse.yacc"
 {
                            if (addr_matches(yyvsp[0].string))
-                               host_matches = TRUE;
+                               yyval.BOOLEAN = TRUE;
                            free(yyvsp[0].string);
                        }
 break;
-case 19:
-#line 266 "parse.yacc"
+case 18:
+#line 286 "parse.yacc"
 {
                            if (netgr_matches(yyvsp[0].string, user_host, NULL))
-                               host_matches = TRUE;
+                               yyval.BOOLEAN = TRUE;
                            free(yyvsp[0].string);
                        }
 break;
-case 20:
-#line 271 "parse.yacc"
+case 19:
+#line 291 "parse.yacc"
 {
                            if (strcasecmp(user_shost, yyvsp[0].string) == 0)
-                               host_matches = TRUE;
+                               yyval.BOOLEAN = TRUE;
                            free(yyvsp[0].string);
                        }
 break;
-case 21:
-#line 276 "parse.yacc"
+case 20:
+#line 296 "parse.yacc"
 {
                            if (strcasecmp(user_host, yyvsp[0].string) == 0)
-                               host_matches = TRUE;
+                               yyval.BOOLEAN = TRUE;
                            free(yyvsp[0].string);
                        }
 break;
-case 22:
-#line 281 "parse.yacc"
+case 21:
+#line 301 "parse.yacc"
 {
                            /* could be an all-caps hostname */
                            if (find_alias(yyvsp[0].string, HOST_ALIAS) == TRUE ||
                                strcasecmp(user_shost, yyvsp[0].string) == 0)
-                               host_matches = TRUE;
+                               yyval.BOOLEAN = TRUE;
                            free(yyvsp[0].string);
                        }
 break;
-case 25:
-#line 294 "parse.yacc"
+case 24:
+#line 314 "parse.yacc"
 {
                            if (printmatches == TRUE &&
                                (runas_matches == -1 || cmnd_matches == -1)) {
@@ -1152,39 +1161,33 @@ case 25:
                            cmnd_matches = -1;
                        }
 break;
-case 26:
-#line 314 "parse.yacc"
-{ ; }
+case 25:
+#line 334 "parse.yacc"
+{
+                           if (yyvsp[0].BOOLEAN == TRUE)
+                               cmnd_matches = TRUE;
+                       }
 break;
-case 27:
-#line 315 "parse.yacc"
+case 26:
+#line 338 "parse.yacc"
 {
                            if (printmatches == TRUE && host_matches == TRUE &&
                                user_matches == TRUE) {
                                append("!", &cm_list[cm_list_len].cmnd,
                                       &cm_list[cm_list_len].cmnd_len,
                                       &cm_list[cm_list_len].cmnd_size, 0);
-                               push;
-                               user_matches = TRUE;
-                               host_matches = TRUE;
-                           } else {
-                               push;
                            }
                        }
 break;
-case 28:
-#line 327 "parse.yacc"
+case 27:
+#line 345 "parse.yacc"
 {
-                           pop;
-                           if (cmnd_matched == TRUE)
+                           if (yyvsp[0].BOOLEAN == TRUE)
                                cmnd_matches = FALSE;
-                           else if (cmnd_matched == FALSE)
-                               cmnd_matches = TRUE;
-                           yyval.BOOLEAN = cmnd_matches;
                        }
 break;
-case 29:
-#line 337 "parse.yacc"
+case 28:
+#line 351 "parse.yacc"
 {
                            /*
                             * If this is the first entry in a command list
@@ -1195,51 +1198,42 @@ case 29:
                                    (strcmp(RUNAS_DEFAULT, user_runas) == 0);
                        }
 break;
-case 30:
-#line 346 "parse.yacc"
+case 29:
+#line 360 "parse.yacc"
 { ; }
 break;
-case 33:
-#line 353 "parse.yacc"
+case 32:
+#line 367 "parse.yacc"
 {
                            if (printmatches == TRUE && host_matches == TRUE &&
                                user_matches == TRUE)
                                append("", &cm_list[cm_list_len].runas,
                                       &cm_list[cm_list_len].runas_len,
                                       &cm_list[cm_list_len].runas_size, ':');
+                           if (yyvsp[0].BOOLEAN == TRUE)
+                               runas_matches = TRUE;
                        }
 break;
-case 34:
-#line 360 "parse.yacc"
+case 33:
+#line 376 "parse.yacc"
 {
                            if (printmatches == TRUE && host_matches == TRUE &&
-                               user_matches == TRUE) {
+                               user_matches == TRUE)
                                append("!", &cm_list[cm_list_len].runas,
                                       &cm_list[cm_list_len].runas_len,
                                       &cm_list[cm_list_len].runas_size, ':');
-                               pushcp;
-                           } else {
-                               push;
-                           }
                        }
 break;
-case 35:
-#line 370 "parse.yacc"
+case 34:
+#line 382 "parse.yacc"
 {
-                           pop;
-                           /*
-                            * Don't negate FALSE -> TRUE since that would
-                            * make !foo match any time the user specified
-                            * a runas user (via -u) other than foo.
-                            */
-                           if (runas_matched == TRUE)
+                           if (yyvsp[0].BOOLEAN == TRUE)
                                runas_matches = FALSE;
                        }
 break;
-case 36:
-#line 381 "parse.yacc"
+case 35:
+#line 387 "parse.yacc"
 {
-                           runas_matches = (strcmp(yyvsp[0].string, user_runas) == 0);
                            if (printmatches == TRUE && in_alias == TRUE)
                                append(yyvsp[0].string, &ga_list[ga_list_len-1].entries,
                                       &ga_list[ga_list_len-1].entries_len,
@@ -1249,13 +1243,14 @@ case 36:
                                append(yyvsp[0].string, &cm_list[cm_list_len].runas,
                                       &cm_list[cm_list_len].runas_len,
                                       &cm_list[cm_list_len].runas_size, 0);
+                           if (strcmp(yyvsp[0].string, user_runas) == 0)
+                               yyval.BOOLEAN = TRUE;
                            free(yyvsp[0].string);
                        }
 break;
-case 37:
-#line 394 "parse.yacc"
+case 36:
+#line 401 "parse.yacc"
 {
-                           runas_matches = usergr_matches(yyvsp[0].string, user_runas);
                            if (printmatches == TRUE && in_alias == TRUE)
                                append(yyvsp[0].string, &ga_list[ga_list_len-1].entries,
                                       &ga_list[ga_list_len-1].entries_len,
@@ -1266,13 +1261,14 @@ case 37:
                                       &cm_list[cm_list_len].runas_len,
                                       &cm_list[cm_list_len].runas_size, 0);
                            }
+                           if (usergr_matches(yyvsp[0].string, user_runas))
+                               yyval.BOOLEAN = TRUE;
                            free(yyvsp[0].string);
                        }
 break;
-case 38:
-#line 408 "parse.yacc"
+case 37:
+#line 416 "parse.yacc"
 {
-                           runas_matches = netgr_matches(yyvsp[0].string, NULL, user_runas);
                            if (printmatches == TRUE && in_alias == TRUE)
                                append(yyvsp[0].string, &ga_list[ga_list_len-1].entries,
                                       &ga_list[ga_list_len-1].entries_len,
@@ -1283,18 +1279,14 @@ case 38:
                                       &cm_list[cm_list_len].runas_len,
                                       &cm_list[cm_list_len].runas_size, 0);
                            }
+                           if (netgr_matches(yyvsp[0].string, NULL, user_runas))
+                               yyval.BOOLEAN = TRUE;
                            free(yyvsp[0].string);
                        }
 break;
-case 39:
-#line 422 "parse.yacc"
+case 38:
+#line 431 "parse.yacc"
 {
-                           /* could be an all-caps username */
-                           if (find_alias(yyvsp[0].string, RUNAS_ALIAS) == TRUE ||
-                               strcmp(yyvsp[0].string, user_runas) == 0)
-                               runas_matches = TRUE;
-                           else
-                               runas_matches = FALSE;
                            if (printmatches == TRUE && in_alias == TRUE)
                                append(yyvsp[0].string, &ga_list[ga_list_len-1].entries,
                                       &ga_list[ga_list_len-1].entries_len,
@@ -1304,13 +1296,16 @@ case 39:
                                append(yyvsp[0].string, &cm_list[cm_list_len].runas,
                                       &cm_list[cm_list_len].runas_len,
                                       &cm_list[cm_list_len].runas_size, 0);
+                           /* could be an all-caps username */
+                           if (find_alias(yyvsp[0].string, RUNAS_ALIAS) == TRUE ||
+                               strcmp(yyvsp[0].string, user_runas) == 0)
+                               yyval.BOOLEAN = TRUE;
                            free(yyvsp[0].string);
                        }
 break;
-case 40:
-#line 440 "parse.yacc"
+case 39:
+#line 447 "parse.yacc"
 {
-                           runas_matches = TRUE;
                            if (printmatches == TRUE && in_alias == TRUE)
                                append("ALL", &ga_list[ga_list_len-1].entries,
                                       &ga_list[ga_list_len-1].entries_len,
@@ -1320,16 +1315,18 @@ case 40:
                                append("ALL", &cm_list[cm_list_len].runas,
                                       &cm_list[cm_list_len].runas_len,
                                       &cm_list[cm_list_len].runas_size, 0);
+                           yyval.BOOLEAN = TRUE;
+                           free(yyvsp[0].string);
                        }
 break;
-case 41:
-#line 454 "parse.yacc"
+case 40:
+#line 462 "parse.yacc"
 {
                            ;
                        }
 break;
-case 42:
-#line 457 "parse.yacc"
+case 41:
+#line 465 "parse.yacc"
 {
                            no_passwd = TRUE;
                            if (printmatches == TRUE && host_matches == TRUE &&
@@ -1337,8 +1334,8 @@ case 42:
                                cm_list[cm_list_len].nopasswd = TRUE;
                        }
 break;
-case 43:
-#line 463 "parse.yacc"
+case 42:
+#line 471 "parse.yacc"
 {
                            no_passwd = FALSE;
                            if (printmatches == TRUE && host_matches == TRUE &&
@@ -1346,8 +1343,8 @@ case 43:
                                cm_list[cm_list_len].nopasswd = FALSE;
                        }
 break;
-case 44:
-#line 471 "parse.yacc"
+case 43:
+#line 479 "parse.yacc"
 {
                            if (printmatches == TRUE && in_alias == TRUE) {
                                append("ALL", &ga_list[ga_list_len-1].entries,
@@ -1362,14 +1359,16 @@ case 44:
                                expand_match_list();
                            }
 
-                           yyval.BOOLEAN = cmnd_matches = TRUE;
+                           yyval.BOOLEAN = TRUE;
+                           free(yyvsp[0].string);
+
                            if (safe_cmnd)
                                free(safe_cmnd);
                            safe_cmnd = estrdup(user_cmnd);
                        }
 break;
-case 45:
-#line 490 "parse.yacc"
+case 44:
+#line 500 "parse.yacc"
 {
                            if (printmatches == TRUE && in_alias == TRUE) {
                                append(yyvsp[0].string, &ga_list[ga_list_len-1].entries,
@@ -1383,15 +1382,13 @@ case 45:
                                       &cm_list[cm_list_len].cmnd_size, 0);
                                expand_match_list();
                            }
-                           if (find_alias(yyvsp[0].string, CMND_ALIAS) == TRUE) {
-                               cmnd_matches = TRUE;
+                           if (find_alias(yyvsp[0].string, CMND_ALIAS) == TRUE)
                                yyval.BOOLEAN = TRUE;
-                           }
                            free(yyvsp[0].string);
                        }
 break;
-case 46:
-#line 509 "parse.yacc"
+case 45:
+#line 517 "parse.yacc"
 {
                            if (printmatches == TRUE && in_alias == TRUE) {
                                append(yyvsp[0].command.cmnd, &ga_list[ga_list_len-1].entries,
@@ -1414,24 +1411,21 @@ case 46:
                                expand_match_list();
                            }
 
-                           /* if NewArgc > 1 pass ptr to 1st arg, else NULL */
-                           if (command_matches(user_cmnd, (NewArgc > 1) ?
-                                   user_args : NULL, yyvsp[0].command.cmnd, yyvsp[0].command.args)) {
-                               cmnd_matches = TRUE;
+                           if (command_matches(user_cmnd, user_args,
+                               yyvsp[0].command.cmnd, yyvsp[0].command.args))
                                yyval.BOOLEAN = TRUE;
-                           }
 
                            free(yyvsp[0].command.cmnd);
                            if (yyvsp[0].command.args)
                                free(yyvsp[0].command.args);
                        }
 break;
-case 49:
-#line 548 "parse.yacc"
+case 48:
+#line 553 "parse.yacc"
 { push; }
 break;
-case 50:
-#line 548 "parse.yacc"
+case 49:
+#line 553 "parse.yacc"
 {
                            if (host_matches == TRUE &&
                                add_alias(yyvsp[-3].string, HOST_ALIAS) == FALSE)
@@ -1439,8 +1433,8 @@ case 50:
                            pop;
                        }
 break;
-case 55:
-#line 564 "parse.yacc"
+case 54:
+#line 569 "parse.yacc"
 {
                            push;
                            if (printmatches == TRUE) {
@@ -1451,8 +1445,8 @@ case 55:
                             }
                        }
 break;
-case 56:
-#line 572 "parse.yacc"
+case 55:
+#line 577 "parse.yacc"
 {
                            if (cmnd_matches == TRUE &&
                                add_alias(yyvsp[-3].string, CMND_ALIAS) == FALSE)
@@ -1464,12 +1458,12 @@ case 56:
                                in_alias = FALSE;
                        }
 break;
-case 57:
-#line 584 "parse.yacc"
+case 56:
+#line 589 "parse.yacc"
 { ; }
 break;
-case 61:
-#line 592 "parse.yacc"
+case 60:
+#line 597 "parse.yacc"
 {
                            push;
                            if (printmatches == TRUE) {
@@ -1480,8 +1474,8 @@ case 61:
                            }
                        }
 break;
-case 62:
-#line 600 "parse.yacc"
+case 61:
+#line 605 "parse.yacc"
 {
                            if (runas_matches > 0 &&
                                add_alias(yyvsp[-3].string, RUNAS_ALIAS) == FALSE)
@@ -1493,12 +1487,12 @@ case 62:
                                in_alias = FALSE;
                        }
 break;
-case 65:
-#line 616 "parse.yacc"
+case 64:
+#line 621 "parse.yacc"
 { push; }
 break;
-case 66:
-#line 616 "parse.yacc"
+case 65:
+#line 621 "parse.yacc"
 {
                            if (user_matches == TRUE &&
                                add_alias(yyvsp[-3].string, USER_ALIAS) == FALSE)
@@ -1507,64 +1501,63 @@ case 66:
                            free(yyvsp[-3].string);
                        }
 break;
-case 67:
-#line 625 "parse.yacc"
+case 66:
+#line 630 "parse.yacc"
 { ; }
 break;
-case 70:
-#line 630 "parse.yacc"
+case 68:
+#line 634 "parse.yacc"
 {
-                           push;
+                           if (yyvsp[0].BOOLEAN == TRUE)
+                               user_matches = TRUE;
                        }
 break;
-case 71:
-#line 632 "parse.yacc"
+case 69:
+#line 638 "parse.yacc"
 {
-                           pop;
-                           if (user_matched == TRUE)
+                           if (yyvsp[0].BOOLEAN == TRUE)
                                user_matches = FALSE;
-                           else if (user_matched == FALSE)
-                               user_matches = TRUE;
                        }
 break;
-case 72:
-#line 640 "parse.yacc"
+case 70:
+#line 643 "parse.yacc"
 {
                            if (strcmp(yyvsp[0].string, user_name) == 0)
-                               user_matches = TRUE;
+                               yyval.BOOLEAN = TRUE;
                            free(yyvsp[0].string);
                        }
 break;
-case 73:
-#line 645 "parse.yacc"
+case 71:
+#line 648 "parse.yacc"
 {
                            if (usergr_matches(yyvsp[0].string, user_name))
-                               user_matches = TRUE;
+                               yyval.BOOLEAN = TRUE;
                            free(yyvsp[0].string);
                        }
 break;
-case 74:
-#line 650 "parse.yacc"
+case 72:
+#line 653 "parse.yacc"
 {
                            if (netgr_matches(yyvsp[0].string, NULL, user_name))
-                               user_matches = TRUE;
+                               yyval.BOOLEAN = TRUE;
                            free(yyvsp[0].string);
                        }
 break;
-case 75:
-#line 655 "parse.yacc"
+case 73:
+#line 658 "parse.yacc"
 {
                            /* could be an all-caps username */
                            if (find_alias(yyvsp[0].string, USER_ALIAS) == TRUE ||
                                strcmp(yyvsp[0].string, user_name) == 0)
-                               user_matches = TRUE;
+                               yyval.BOOLEAN = TRUE;
                            free(yyvsp[0].string);
                        }
 break;
-case 76:
-#line 662 "parse.yacc"
+case 74:
+#line 665 "parse.yacc"
 {
-                           user_matches = TRUE;
+                           yyval.BOOLEAN = TRUE;
+                           free(yyvsp[0].string);
                        }
 break;
 #line 1564 "sudo.tab.c"
index a9aff54b4bcc97dfcebb60bddca011c9c10e3032..a4557cdda9baddf840d8c829bebbfebeba88149d 100644 (file)
@@ -4,12 +4,12 @@
 #define NETGROUP 260
 #define USERGROUP 261
 #define NAME 262
-#define RUNAS 263
-#define NOPASSWD 264
-#define PASSWD 265
-#define COMMAND 266
-#define COMMENT 267
-#define ALL 268
+#define ALL 263
+#define RUNAS 264
+#define NOPASSWD 265
+#define PASSWD 266
+#define COMMAND 267
+#define COMMENT 268
 #define HOSTALIAS 269
 #define CMNDALIAS 270
 #define USERALIAS 271