[syslog-ng] [PATCH (3.5)] affile: Error out when there's a syntax error in the filename template
Gergely Nagy
algernon at balabit.hu
Mon Jun 10 16:54:26 CEST 2013
When there is a syntax error in the filename template (eg,
"/var/log/foo-$(+ 0"), error out at config load time. This is done by
adding an error output variable to affile_dd_new_instance() and both
affile_dd_new() and afpipe_dd_new(), then using that to store the result
of log_template_compile(). If that function fails, we bail out early,
and use CHECK_ERROR() in the grammar to notify the user of the issue.
Signed-off-by: Gergely Nagy <algernon at balabit.hu>
---
modules/affile/affile-dest.c | 23 +++++++++++++++--------
modules/affile/affile-dest.h | 6 +++---
modules/affile/affile-grammar.ym | 12 +++++++++---
3 files changed, 27 insertions(+), 14 deletions(-)
diff --git a/modules/affile/affile-dest.c b/modules/affile/affile-dest.c
index c8fa9c1..c9447ce 100644
--- a/modules/affile/affile-dest.c
+++ b/modules/affile/affile-dest.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002-2012 BalaBit IT Ltd, Budapest, Hungary
+ * Copyright (c) 2002-2013 BalaBit IT Ltd, Budapest, Hungary
* Copyright (c) 1998-2012 Balázs Scheidler
*
* This program is free software; you can redistribute it and/or modify it
@@ -703,17 +703,24 @@ affile_dd_free(LogPipe *s)
}
static AFFileDestDriver *
-affile_dd_new_instance(gchar *filename)
+affile_dd_new_instance(gchar *filename, GError **error)
{
AFFileDestDriver *self = g_new0(AFFileDestDriver, 1);
+ LogTemplate *filename_template;
+
+ filename_template = log_template_new(configuration, NULL);
+ if (!log_template_compile(filename_template, filename, error))
+ {
+ log_template_unref(filename_template);
+ return NULL;
+ }
log_dest_driver_init_instance(&self->super);
self->super.super.super.init = affile_dd_init;
self->super.super.super.deinit = affile_dd_deinit;
self->super.super.super.queue = affile_dd_queue;
self->super.super.super.free_fn = affile_dd_free;
- self->filename_template = log_template_new(configuration, NULL);
- log_template_compile(self->filename_template, filename, NULL);
+ self->filename_template = filename_template;
log_writer_options_defaults(&self->writer_options);
file_perm_options_defaults(&self->file_perm_options);
self->writer_options.mark_mode = MM_NONE;
@@ -728,15 +735,15 @@ affile_dd_new_instance(gchar *filename)
}
LogDriver *
-affile_dd_new(gchar *filename)
+affile_dd_new(gchar *filename, GError **error)
{
- return &affile_dd_new_instance(filename)->super.super;
+ return &affile_dd_new_instance(filename, error)->super.super;
}
LogDriver *
-afpipe_dd_new(gchar *filename)
+afpipe_dd_new(gchar *filename, GError **error)
{
- AFFileDestDriver *self = affile_dd_new_instance(filename);
+ AFFileDestDriver *self = affile_dd_new_instance(filename, error);
self->is_pipe = TRUE;
return &self->super.super;
}
diff --git a/modules/affile/affile-dest.h b/modules/affile/affile-dest.h
index 3f4f21b..dcee654 100644
--- a/modules/affile/affile-dest.h
+++ b/modules/affile/affile-dest.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002-2012 BalaBit IT Ltd, Budapest, Hungary
+ * Copyright (c) 2002-2013 BalaBit IT Ltd, Budapest, Hungary
* Copyright (c) 1998-2012 Balázs Scheidler
*
* This program is free software; you can redistribute it and/or modify it
@@ -53,8 +53,8 @@ typedef struct _AFFileDestDriver
gint time_reap;
} AFFileDestDriver;
-LogDriver *affile_dd_new(gchar *filename);
-LogDriver *afpipe_dd_new(gchar *filename);
+LogDriver *affile_dd_new(gchar *filename, GError **error);
+LogDriver *afpipe_dd_new(gchar *filename, GError **error);
void affile_dd_set_create_dirs(LogDriver *s, gboolean create_dirs);
void affile_dd_set_fsync(LogDriver *s, gboolean enable);
diff --git a/modules/affile/affile-grammar.ym b/modules/affile/affile-grammar.ym
index abecee4..0d2f099 100644
--- a/modules/affile/affile-grammar.ym
+++ b/modules/affile/affile-grammar.ym
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002-2012 BalaBit IT Ltd, Budapest, Hungary
+ * Copyright (c) 2002-2013 BalaBit IT Ltd, Budapest, Hungary
* Copyright (c) 1998-2012 Balázs Scheidler
*
* This program is free software; you can redistribute it and/or modify it
@@ -144,7 +144,10 @@ dest_affile
dest_affile_params
: string
{
- last_driver = *instance = affile_dd_new($1);
+ GError *error;
+
+ last_driver = *instance = affile_dd_new($1, &error);
+ CHECK_ERROR(last_driver, @1, "Error compiling template; %s", error->message);
free($1);
last_writer_options = &((AFFileDestDriver *) last_driver)->writer_options;
last_file_perm_options = &((AFFileDestDriver *) last_driver)->file_perm_options;
@@ -171,7 +174,10 @@ dest_affile_option
dest_afpipe_params
: string
{
- last_driver = *instance = afpipe_dd_new($1);
+ GError *error;
+
+ last_driver = *instance = afpipe_dd_new($1, &error);
+ CHECK_ERROR(last_driver, @1, "Error compiling template; %s", error->message);
free($1);
last_writer_options = &((AFFileDestDriver *) last_driver)->writer_options;
last_file_perm_options = &((AFFileDestDriver *) last_driver)->file_perm_options;
--
1.7.10.4
More information about the syslog-ng
mailing list