]> granicus.if.org Git - sudo/commitdiff
on error, errorlineno is set to the line where the error occurred
authorTodd C. Miller <Todd.Miller@courtesan.com>
Sun, 26 Mar 1995 06:18:24 +0000 (06:18 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Sun, 26 Mar 1995 06:18:24 +0000 (06:18 +0000)
added kill_aliases() to free the aliases struct
now clean up in yyerror() so we can reparse cleanly

parse.yacc

index e3368fc457fee553b8cf6f34d717161892ed9ca4..2bbeced4698830d9d983528bb6b5f70f66037943 100644 (file)
@@ -59,6 +59,7 @@ static char rcsid[] = "$Id$";
 #include "options.h"
 
 extern int sudolineno, parse_error;
+int errorlineno = 0;
 
 /*
  * Alias types
@@ -93,17 +94,21 @@ extern int ntwk_matches             __P((char *));
 static int find_alias          __P((char *, int));
 static int add_alias           __P((char *, int));
 static int more_aliases                __P((int));
-extern int sudolineno;
+static void kill_aliases       __P((void));
 
 yyerror(s)
 char *s;
 {
+    errorlineno = sudolineno;
 #ifndef TRACELEXER
-    fprintf(stderr, ">>> sudoers file: %s, line %d <<<\n", s, sudolineno);
+    fprintf(stderr, ">>> sudoers file: %s, line %d <<<\n", s, errorlineno);
 #else
     fprintf(stderr, "<*> ");
 #endif
     parse_error = TRUE;
+    /* reset data structures so we can reparse cleanly */
+    kill_aliases();
+    top = 0;
 }
 
 yywrap()
@@ -352,3 +357,10 @@ dumpaliases()
                            aliases[n].name);
 
 }
+
+void
+kill_aliases()
+{
+    (void) free(aliases);
+    naliases = nslots = 0;
+}