Diff for /embedaddon/sudo/plugins/sudoers/gram.c between versions 1.1 and 1.1.1.2

version 1.1, 2012/02/21 16:23:02 version 1.1.1.2, 2012/05/29 12:26:49
Line 12 Line 12
 #define YYPREFIX "yy"  #define YYPREFIX "yy"
 #line 2 "gram.y"  #line 2 "gram.y"
 /*  /*
 * Copyright (c) 1996, 1998-2005, 2007-2011 * Copyright (c) 1996, 1998-2005, 2007-2012
  *      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 64 Line 64
 #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 82 Line 83
  * Globals   * Globals
  */   */
 extern int sudolineno;  extern int sudolineno;
   extern int last_token;
 extern char *sudoers;  extern char *sudoers;
static int verbose = FALSE;bool sudoers_warnings = true;
int parse_error = FALSE;bool parse_error = false;
int pedantic = FALSE; 
 int errorlineno = -1;  int errorlineno = -1;
 char *errorfile = NULL;  char *errorfile = NULL;
   
Line 104  static struct member *new_member(char *, int); Line 105  static struct member *new_member(char *, int);
 void  void
 yyerror(const char *s)  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. */      /* Save the line the first error occurred on. */
     if (errorlineno == -1) {      if (errorlineno == -1) {
        errorlineno = sudolineno ? sudolineno - 1 : 0;        errorlineno = sudolineno;
         errorfile = estrdup(sudoers);          errorfile = estrdup(sudoers);
     }      }
     if (trace_print != NULL) {      if (trace_print != NULL) {
         LEXTRACE("<*> ");          LEXTRACE("<*> ");
    } else if (verbose && s != NULL) {    } else if (sudoers_warnings && s != NULL) {
        warningx(_(">>> %s: %s near line %d <<<"), sudoers, s,        warningx(_(">>> %s: %s near line %d <<<"), sudoers, s, sudolineno);
            sudolineno ? sudolineno - 1 : 0); 
     }      }
    parse_error = TRUE;    parse_error = true;
     debug_return;
 }  }
#line 110 "gram.y"#line 117 "gram.y"
 #ifndef YYSTYPE_DEFINED  #ifndef YYSTYPE_DEFINED
 #define YYSTYPE_DEFINED  #define YYSTYPE_DEFINED
 typedef union {  typedef union {
Line 133  typedef union { Line 140  typedef union {
     int tok;      int tok;
 } YYSTYPE;  } YYSTYPE;
 #endif /* YYSTYPE_DEFINED */  #endif /* YYSTYPE_DEFINED */
#line 136 "y.tab.c"#line 143 "gram.c"
 #define COMMAND 257  #define COMMAND 257
 #define ALIAS 258  #define ALIAS 258
 #define DEFVAR 259  #define DEFVAR 259
Line 631  short *yyss; Line 638  short *yyss;
 short *yysslim;  short *yysslim;
 YYSTYPE *yyvs;  YYSTYPE *yyvs;
 int yystacksize;  int yystacksize;
#line 604 "gram.y"#line 611 "gram.y"
 static struct defaults *  static struct defaults *
 new_default(char *var, char *val, int op)  new_default(char *var, char *val, int op)
 {  {
     struct defaults *d;      struct defaults *d;
       debug_decl(new_default, SUDO_DEBUG_PARSER)
   
    d = emalloc(sizeof(struct defaults));    d = ecalloc(1, sizeof(struct defaults));
     d->var = var;      d->var = var;
     d->val = val;      d->val = val;
     tq_init(&d->binding);      tq_init(&d->binding);
    d->type = 0;    /* d->type = 0; */
     d->op = op;      d->op = op;
     d->prev = d;      d->prev = d;
    d->next = NULL;    /* d->next = NULL; */
   
    return d;    debug_return_ptr(d);
 }  }
   
 static struct member *  static struct member *
 new_member(char *name, int type)  new_member(char *name, int type)
 {  {
     struct member *m;      struct member *m;
       debug_decl(new_member, SUDO_DEBUG_PARSER)
   
    m = emalloc(sizeof(struct member));    m = ecalloc(1, sizeof(struct member));
     m->name = name;      m->name = name;
     m->type = type;      m->type = type;
     m->prev = m;      m->prev = m;
    m->next = NULL;    /* m->next = NULL; */
   
    return m;    debug_return_ptr(m);
 }  }
   
 /*  /*
Line 673  add_defaults(int type, struct member *bmem, struct def Line 682  add_defaults(int type, struct member *bmem, struct def
 {  {
     struct defaults *d;      struct defaults *d;
     struct member_list binding;      struct member_list binding;
       debug_decl(add_defaults, SUDO_DEBUG_PARSER)
   
     /*      /*
      * We can only call list2tq once on bmem as it will zero       * We can only call list2tq once on bmem as it will zero
Line 688  add_defaults(int type, struct member *bmem, struct def Line 698  add_defaults(int type, struct member *bmem, struct def
         d->binding = binding;          d->binding = binding;
     }      }
     tq_append(&defaults, defs);      tq_append(&defaults, defs);
   
       debug_return;
 }  }
   
 /*  /*
Line 698  static void Line 710  static void
 add_userspec(struct member *members, struct privilege *privs)  add_userspec(struct member *members, struct privilege *privs)
 {  {
     struct userspec *u;      struct userspec *u;
       debug_decl(add_userspec, SUDO_DEBUG_PARSER)
   
    u = emalloc(sizeof(*u));    u = ecalloc(1, sizeof(*u));
     list2tq(&u->users, members);      list2tq(&u->users, members);
     list2tq(&u->privileges, privs);      list2tq(&u->privileges, privs);
     u->prev = u;      u->prev = u;
    u->next = NULL;    /* u->next = NULL; */
     tq_append(&userspecs, u);      tq_append(&userspecs, u);
   
       debug_return;
 }  }
   
 /*  /*
Line 720  init_parser(const char *path, int quiet) Line 735  init_parser(const char *path, int quiet)
     struct privilege *priv;      struct privilege *priv;
     struct cmndspec *cs;      struct cmndspec *cs;
     struct sudo_command *c;      struct sudo_command *c;
       debug_decl(init_parser, SUDO_DEBUG_PARSER)
   
     while ((us = tq_pop(&userspecs)) != NULL) {      while ((us = tq_pop(&userspecs)) != NULL) {
         while ((m = tq_pop(&us->users)) != NULL) {          while ((m = tq_pop(&us->users)) != NULL) {
Line 804  init_parser(const char *path, int quiet) Line 820  init_parser(const char *path, int quiet)
     efree(sudoers);      efree(sudoers);
     sudoers = path ? estrdup(path) : NULL;      sudoers = path ? estrdup(path) : NULL;
   
    parse_error = FALSE;    parse_error = false;
     errorlineno = -1;      errorlineno = -1;
    errorfile = NULL;    errorfile = sudoers;
    verbose = !quiet;    sudoers_warnings = !quiet;
 
     debug_return;
 }  }
#line 760 "y.tab.c"#line 778 "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 833  static int yygrowstack() Line 851  static int yygrowstack()
 #else  #else
 #define YY_SIZE_MAX 0x7fffffff  #define YY_SIZE_MAX 0x7fffffff
 #endif  #endif
    if (newsize && YY_SIZE_MAX / newsize < sizeof *newss)    if (!newsize || YY_SIZE_MAX / newsize < sizeof *newss)
         goto bail;          goto bail;
     newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :      newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :
       (short *)malloc(newsize * sizeof *newss); /* overflow check above */        (short *)malloc(newsize * sizeof *newss); /* overflow check above */
Line 841  static int yygrowstack() Line 859  static int yygrowstack()
         goto bail;          goto bail;
     yyss = newss;      yyss = newss;
     yyssp = newss + i;      yyssp = newss + i;
    if (newsize && YY_SIZE_MAX / newsize < sizeof *newvs)    if (!newsize || YY_SIZE_MAX / newsize < sizeof *newvs)
         goto bail;          goto bail;
     newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :      newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :
       (YYSTYPE *)malloc(newsize * sizeof *newvs); /* overflow check above */        (YYSTYPE *)malloc(newsize * sizeof *newvs); /* overflow check above */
Line 1015  yyreduce: Line 1033  yyreduce:
     switch (yyn)      switch (yyn)
     {      {
 case 1:  case 1:
#line 185 "gram.y"#line 192 "gram.y"
 { ; }  { ; }
 break;  break;
 case 5:  case 5:
#line 193 "gram.y"#line 200 "gram.y"
 {  {
                             ;                              ;
                         }                          }
 break;  break;
 case 6:  case 6:
#line 196 "gram.y"#line 203 "gram.y"
 {  {
                             yyerrok;                              yyerrok;
                         }                          }
 break;  break;
 case 7:  case 7:
#line 199 "gram.y"#line 206 "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 202 "gram.y"#line 209 "gram.y"
 {  {
                             ;                              ;
                         }                          }
 break;  break;
 case 9:  case 9:
#line 205 "gram.y"#line 212 "gram.y"
 {  {
                             ;                              ;
                         }                          }
 break;  break;
 case 10:  case 10:
#line 208 "gram.y"#line 215 "gram.y"
 {  {
                             ;                              ;
                         }                          }
 break;  break;
 case 11:  case 11:
#line 211 "gram.y"#line 218 "gram.y"
 {  {
                             ;                              ;
                         }                          }
 break;  break;
 case 12:  case 12:
#line 214 "gram.y"#line 221 "gram.y"
 {  {
                             add_defaults(DEFAULTS, NULL, yyvsp[0].defaults);                              add_defaults(DEFAULTS, NULL, yyvsp[0].defaults);
                         }                          }
 break;  break;
 case 13:  case 13:
#line 217 "gram.y"#line 224 "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 220 "gram.y"#line 227 "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 223 "gram.y"#line 230 "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 226 "gram.y"#line 233 "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 232 "gram.y"#line 239 "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 238 "gram.y"#line 245 "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 241 "gram.y"#line 248 "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 244 "gram.y"#line 251 "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 247 "gram.y"#line 254 "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 250 "gram.y"#line 257 "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 256 "gram.y"#line 263 "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 262 "gram.y"#line 269 "gram.y"
 {  {
                            struct privilege *p = emalloc(sizeof(*p));                            struct privilege *p = ecalloc(1, sizeof(*p));
                             list2tq(&p->hostlist, yyvsp[-2].member);                              list2tq(&p->hostlist, yyvsp[-2].member);
                             list2tq(&p->cmndlist, yyvsp[0].cmndspec);                              list2tq(&p->cmndlist, yyvsp[0].cmndspec);
                             p->prev = p;                              p->prev = p;
                            p->next = NULL;                            /* p->next = NULL; */
                             yyval.privilege = p;                              yyval.privilege = p;
                         }                          }
 break;  break;
 case 27:  case 27:
#line 272 "gram.y"#line 279 "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 276 "gram.y"#line 283 "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 282 "gram.y"#line 289 "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 285 "gram.y"#line 292 "gram.y"
 {  {
                             yyval.member = new_member(NULL, ALL);                              yyval.member = new_member(NULL, ALL);
                         }                          }
 break;  break;
 case 31:  case 31:
#line 288 "gram.y"#line 295 "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 291 "gram.y"#line 298 "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 294 "gram.y"#line 301 "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 300 "gram.y"#line 307 "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 1223  case 35: Line 1241  case 35:
                         }                          }
 break;  break;
 case 36:  case 36:
#line 332 "gram.y"#line 339 "gram.y"
 {  {
                            struct cmndspec *cs = emalloc(sizeof(*cs));                            struct cmndspec *cs = ecalloc(1, sizeof(*cs));
                             if (yyvsp[-3].runas != NULL) {                              if (yyvsp[-3].runas != NULL) {
                                 list2tq(&cs->runasuserlist, yyvsp[-3].runas->runasusers);                                  list2tq(&cs->runasuserlist, yyvsp[-3].runas->runasusers);
                                 list2tq(&cs->runasgrouplist, yyvsp[-3].runas->runasgroups);                                  list2tq(&cs->runasgrouplist, yyvsp[-3].runas->runasgroups);
Line 1250  case 36: Line 1268  case 36:
                         }                          }
 break;  break;
 case 37:  case 37:
#line 358 "gram.y"#line 365 "gram.y"
 {  {
                             yyval.member = yyvsp[0].member;                              yyval.member = yyvsp[0].member;
                            yyval.member->negated = FALSE;                            yyval.member->negated = false;
                         }                          }
 break;  break;
 case 38:  case 38:
#line 362 "gram.y"#line 369 "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 39:
#line 368 "gram.y"#line 375 "gram.y"
 {  {
                             yyval.string = yyvsp[0].string;                              yyval.string = yyvsp[0].string;
                         }                          }
 break;  break;
 case 40:  case 40:
#line 373 "gram.y"#line 380 "gram.y"
 {  {
                             yyval.string = yyvsp[0].string;                              yyval.string = yyvsp[0].string;
                         }                          }
 break;  break;
 case 41:  case 41:
#line 378 "gram.y"#line 385 "gram.y"
 {  {
                             yyval.seinfo.role = NULL;                              yyval.seinfo.role = NULL;
                             yyval.seinfo.type = NULL;                              yyval.seinfo.type = NULL;
                         }                          }
 break;  break;
 case 42:  case 42:
#line 382 "gram.y"#line 389 "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 43:
#line 386 "gram.y"#line 393 "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 44:
#line 390 "gram.y"#line 397 "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 45:
#line 394 "gram.y"#line 401 "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 46:
#line 400 "gram.y"#line 407 "gram.y"
 {  {
                             yyval.runas = NULL;                              yyval.runas = NULL;
                         }                          }
 break;  break;
 case 47:  case 47:
#line 403 "gram.y"#line 410 "gram.y"
 {  {
                             yyval.runas = yyvsp[-1].runas;                              yyval.runas = yyvsp[-1].runas;
                         }                          }
 break;  break;
 case 48:  case 48:
#line 408 "gram.y"#line 415 "gram.y"
 {  {
                            yyval.runas = emalloc(sizeof(struct runascontainer));                            yyval.runas = ecalloc(1, sizeof(struct runascontainer));
                             yyval.runas->runasusers = yyvsp[0].member;                              yyval.runas->runasusers = yyvsp[0].member;
                            yyval.runas->runasgroups = NULL;                            /* $$->runasgroups = NULL; */
                         }                          }
 break;  break;
 case 49:  case 49:
#line 413 "gram.y"#line 420 "gram.y"
 {  {
                            yyval.runas = emalloc(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 50:  case 50:
#line 418 "gram.y"#line 425 "gram.y"
 {  {
                            yyval.runas = emalloc(sizeof(struct runascontainer));                            yyval.runas = ecalloc(1, sizeof(struct runascontainer));
                            yyval.runas->runasusers = NULL;                            /* $$->runasusers = NULL; */
                             yyval.runas->runasgroups = yyvsp[0].member;                              yyval.runas->runasgroups = yyvsp[0].member;
                         }                          }
 break;  break;
 case 51:  case 51:
#line 425 "gram.y"#line 432 "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 52:  case 52:
#line 429 "gram.y"#line 436 "gram.y"
 {  {
                            yyval.tag.nopasswd = TRUE;                            yyval.tag.nopasswd = true;
                         }                          }
 break;  break;
 case 53:  case 53:
#line 432 "gram.y"#line 439 "gram.y"
 {  {
                            yyval.tag.nopasswd = FALSE;                            yyval.tag.nopasswd = false;
                         }                          }
 break;  break;
 case 54:  case 54:
#line 435 "gram.y"#line 442 "gram.y"
 {  {
                            yyval.tag.noexec = TRUE;                            yyval.tag.noexec = true;
                         }                          }
 break;  break;
 case 55:  case 55:
#line 438 "gram.y"#line 445 "gram.y"
 {  {
                            yyval.tag.noexec = FALSE;                            yyval.tag.noexec = false;
                         }                          }
 break;  break;
 case 56:  case 56:
#line 441 "gram.y"#line 448 "gram.y"
 {  {
                            yyval.tag.setenv = TRUE;                            yyval.tag.setenv = true;
                         }                          }
 break;  break;
 case 57:  case 57:
#line 444 "gram.y"#line 451 "gram.y"
 {  {
                            yyval.tag.setenv = FALSE;                            yyval.tag.setenv = false;
                         }                          }
 break;  break;
 case 58:  case 58:
#line 447 "gram.y"#line 454 "gram.y"
 {  {
                            yyval.tag.log_input = TRUE;                            yyval.tag.log_input = true;
                         }                          }
 break;  break;
 case 59:  case 59:
#line 450 "gram.y"#line 457 "gram.y"
 {  {
                            yyval.tag.log_input = FALSE;                            yyval.tag.log_input = false;
                         }                          }
 break;  break;
 case 60:  case 60:
#line 453 "gram.y"#line 460 "gram.y"
 {  {
                            yyval.tag.log_output = TRUE;                            yyval.tag.log_output = true;
                         }                          }
 break;  break;
 case 61:  case 61:
#line 456 "gram.y"#line 463 "gram.y"
 {  {
                            yyval.tag.log_output = FALSE;                            yyval.tag.log_output = false;
                         }                          }
 break;  break;
 case 62:  case 62:
#line 461 "gram.y"#line 468 "gram.y"
 {  {
                             yyval.member = new_member(NULL, ALL);                              yyval.member = new_member(NULL, ALL);
                         }                          }
 break;  break;
 case 63:  case 63:
#line 464 "gram.y"#line 471 "gram.y"
 {  {
                             yyval.member = new_member(yyvsp[0].string, ALIAS);                              yyval.member = new_member(yyvsp[0].string, ALIAS);
                         }                          }
 break;  break;
 case 64:  case 64:
#line 467 "gram.y"#line 474 "gram.y"
 {  {
                            struct sudo_command *c = emalloc(sizeof(*c));                            struct sudo_command *c = ecalloc(1, sizeof(*c));
                             c->cmnd = yyvsp[0].command.cmnd;                              c->cmnd = yyvsp[0].command.cmnd;
                             c->args = yyvsp[0].command.args;                              c->args = yyvsp[0].command.args;
                             yyval.member = new_member((char *)c, COMMAND);                              yyval.member = new_member((char *)c, COMMAND);
                         }                          }
 break;  break;
 case 67:  case 67:
#line 479 "gram.y"#line 486 "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) {
Line 1445  case 67: Line 1463  case 67:
                         }                          }
 break;  break;
 case 69:  case 69:
#line 489 "gram.y"#line 496 "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 72:  case 72:
#line 499 "gram.y"#line 506 "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) {
Line 1462  case 72: Line 1480  case 72:
                         }                          }
 break;  break;
 case 74:  case 74:
#line 509 "gram.y"#line 516 "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 77:  case 77:
#line 519 "gram.y"#line 526 "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) {
Line 1479  case 77: Line 1497  case 77:
                         }                          }
 break;  break;
 case 80:  case 80:
#line 532 "gram.y"#line 539 "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) {
Line 1489  case 80: Line 1507  case 80:
                         }                          }
 break;  break;
 case 82:  case 82:
#line 542 "gram.y"#line 549 "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 83:  case 83:
#line 548 "gram.y"#line 555 "gram.y"
 {  {
                             yyval.member = yyvsp[0].member;                              yyval.member = yyvsp[0].member;
                            yyval.member->negated = FALSE;                            yyval.member->negated = false;
                         }                          }
 break;  break;
 case 84:  case 84:
#line 552 "gram.y"#line 559 "gram.y"
 {  {
                             yyval.member = yyvsp[0].member;                              yyval.member = yyvsp[0].member;
                            yyval.member->negated = TRUE;                            yyval.member->negated = true;
                         }                          }
 break;  break;
 case 85:  case 85:
#line 558 "gram.y"#line 565 "gram.y"
 {  {
                             yyval.member = new_member(yyvsp[0].string, ALIAS);                              yyval.member = new_member(yyvsp[0].string, ALIAS);
                         }                          }
 break;  break;
 case 86:  case 86:
#line 561 "gram.y"#line 568 "gram.y"
 {  {
                             yyval.member = new_member(NULL, ALL);                              yyval.member = new_member(NULL, ALL);
                         }                          }
 break;  break;
 case 87:  case 87:
#line 564 "gram.y"#line 571 "gram.y"
 {  {
                             yyval.member = new_member(yyvsp[0].string, NETGROUP);                              yyval.member = new_member(yyvsp[0].string, NETGROUP);
                         }                          }
 break;  break;
 case 88:  case 88:
#line 567 "gram.y"#line 574 "gram.y"
 {  {
                             yyval.member = new_member(yyvsp[0].string, USERGROUP);                              yyval.member = new_member(yyvsp[0].string, USERGROUP);
                         }                          }
 break;  break;
 case 89:  case 89:
#line 570 "gram.y"#line 577 "gram.y"
 {  {
                             yyval.member = new_member(yyvsp[0].string, WORD);                              yyval.member = new_member(yyvsp[0].string, WORD);
                         }                          }
 break;  break;
 case 91:  case 91:
#line 576 "gram.y"#line 583 "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 92:
#line 582 "gram.y"#line 589 "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 93:
#line 586 "gram.y"#line 593 "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 94:
#line 592 "gram.y"#line 599 "gram.y"
 {  {
                             yyval.member = new_member(yyvsp[0].string, ALIAS);                              yyval.member = new_member(yyvsp[0].string, ALIAS);
                         }                          }
 break;  break;
 case 95:  case 95:
#line 595 "gram.y"#line 602 "gram.y"
 {  {
                             yyval.member = new_member(NULL, ALL);                              yyval.member = new_member(NULL, ALL);
                         }                          }
 break;  break;
 case 96:  case 96:
#line 598 "gram.y"#line 605 "gram.y"
 {  {
                             yyval.member = new_member(yyvsp[0].string, WORD);                              yyval.member = new_member(yyvsp[0].string, WORD);
                         }                          }
 break;  break;
#line 1529 "y.tab.c"#line 1547 "gram.c"
     }      }
     yyssp -= yym;      yyssp -= yym;
     yystate = *yyssp;      yystate = *yyssp;

Removed from v.1.1  
changed lines
  Added in v.1.1.1.2


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