summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--grammar/lexer.l8
-rw-r--r--grammar/rainerscript.c9
3 files changed, 21 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 9418d241..fb67f4d3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,13 @@
----------------------------------------------------------------------------
Version 7.2.6 [v7-stable] 2013-01-??
- slightly improved config parser error messages when invalid escapes happen
+- bugfix: include files got included in the wrong order
+ This happens if an $IncludeConfig directive was done on multiple
+ files (e.g. the distro default of $IncludeConfig /etc/rsyslog.d/*.conf).
+ In that case, the order of include file processing is reversed, which
+ could lead to all sorts of problems.
+ Thanks to Nathan Stratton Treadway for his great analysis of the problem,
+ which made bug fixing really easy.
- bugfix: omelasticsearch failed when authentication data was provided
... at least in most cases it emitted an error message:
"snprintf failed when trying to build auth string"
diff --git a/grammar/lexer.l b/grammar/lexer.l
index e1f5a9c3..237eb2a6 100644
--- a/grammar/lexer.l
+++ b/grammar/lexer.l
@@ -310,6 +310,7 @@ cnfSetLexFile(char *fname)
currbs = bs;
cnfcurrfn = bs->fn;
yylineno = 1;
+ dbgprintf("config parser: pushed file %s on top of stack\n", fname);
done:
if(r != 0) {
@@ -337,6 +338,7 @@ popfile(void)
* necessary, as otherwise we may provide wrong file name information
* at the end of include files as well. -- rgerhards, 2011-07-22
*/
+ dbgprintf("config parser: reached end of file %s\n", bs->fn);
yy_delete_buffer(bs->bs);
if(bs->prev != NULL)
free(bs->fn);
@@ -346,12 +348,16 @@ popfile(void)
currbs = bs->prev;
free(bs);
- if(currbs == NULL)
+ if(currbs == NULL) {
+ dbgprintf("config parser: parsing completed\n");
return 1; /* all processed */
+ }
yy_switch_to_buffer(currbs->bs);
yylineno = currbs->lineno;
cnfcurrfn = currbs->fn;
+ dbgprintf("config parser: resume parsing of file %s at line %d\n",
+ cnfcurrfn, yylineno);
return 0;
}
diff --git a/grammar/rainerscript.c b/grammar/rainerscript.c
index 0584d6a9..20b86c5c 100644
--- a/grammar/rainerscript.c
+++ b/grammar/rainerscript.c
@@ -2793,7 +2793,7 @@ cnfDoInclude(char *name)
{
char *cfgFile;
char *finalName;
- unsigned i;
+ int i;
int result;
glob_t cfgFiles;
struct stat fileInfo;
@@ -2829,7 +2829,12 @@ cnfDoInclude(char *name)
return 1;
}
- for(i = 0; i < cfgFiles.gl_pathc; i++) {
+ /* note: bison "stacks" the files, so we need to submit them
+ * in reverse order to the *stack* in order to get the proper
+ * parsing order. Also see
+ * http://bugzilla.adiscon.com/show_bug.cgi?id=411
+ */
+ for(i = cfgFiles.gl_pathc - 1; i >= 0 ; i--) {
cfgFile = cfgFiles.gl_pathv[i];
if(stat(cfgFile, &fileInfo) != 0) {
char errStr[1024];