diff --git a/logrotation-bug-2.0.7.patch b/logrotation-bug-2.0.7.patch new file mode 100644 index 0000000..318d437 --- /dev/null +++ b/logrotation-bug-2.0.7.patch @@ -0,0 +1,143 @@ +diff --git a/src/affile.c b/src/affile.c +index 42f70c3..e8e2f1d 100644 +--- a/src/affile.c ++++ b/src/affile.c +@@ -344,8 +344,12 @@ affile_dw_init(LogPipe *s, GlobalConfig *cfg, PersistentConfig *persist) + { + FDWrite *fdw; + +- self->writer = log_writer_new(LW_FORMAT_FILE, s, &self->owner->writer_options); ++ if (!self->writer) ++ { ++ self->writer = log_writer_new(LW_FORMAT_FILE, s, &self->owner->writer_options); + ++ log_pipe_append(&self->super, self->writer); ++ } + if (!log_pipe_init(self->writer, NULL, NULL)) + { + msg_error("Error initializing log writer", NULL); +@@ -358,7 +362,6 @@ affile_dw_init(LogPipe *s, GlobalConfig *cfg, PersistentConfig *persist) + if (self->owner->flags & AFFILE_FSYNC) + fdw->fsync = TRUE; + log_writer_reopen(self->writer, fdw); +- log_pipe_append(&self->super, self->writer); + } + else + { +@@ -379,9 +382,7 @@ affile_dw_deinit(LogPipe *s, GlobalConfig *cfg, PersistentConfig *persist) + if (self->writer) + { + log_pipe_deinit(self->writer, NULL, NULL); +- log_pipe_unref(self->writer); + } +- self->writer = NULL; + return TRUE; + } + +@@ -410,7 +411,7 @@ affile_dw_set_owner(AFFileDestWriter *self, AFFileDestDriver *owner) + log_pipe_ref(&owner->super.super); + self->owner = owner; + if (self->writer) +- log_writer_set_options((LogWriter *) self->writer, &owner->writer_options); ++ log_writer_set_options((LogWriter *) self->writer, &self->super, &owner->writer_options); + + } + +@@ -419,6 +420,8 @@ affile_dw_free(LogPipe *s) + { + AFFileDestWriter *self = (AFFileDestWriter *) s; + ++ log_pipe_unref(self->writer); ++ self->writer = NULL; + g_string_free(self->filename, TRUE); + log_pipe_unref(&self->owner->super.super); + +@@ -620,6 +623,7 @@ affile_dd_reuse_writer(gpointer key, gpointer value, gpointer user_data) + AFFileDestWriter *writer = (AFFileDestWriter *) value; + + affile_dw_set_owner(writer, self); ++ log_pipe_init(&writer->super, NULL, NULL); + } + + +@@ -665,7 +669,10 @@ affile_dd_init(LogPipe *s, GlobalConfig *cfg, PersistentConfig *persist) + { + self->writer = persist_config_fetch(persist, affile_dd_format_persist_name(self)); + if (self->writer) +- affile_dw_set_owner(self->writer, self); ++ { ++ affile_dw_set_owner(self->writer, self); ++ log_pipe_init(&self->writer->super, NULL, NULL); ++ } + } + + +@@ -711,6 +718,12 @@ affile_dd_destroy_writer_hash(gpointer value) + g_hash_table_destroy(writer_hash); + } + ++static void ++affile_dd_deinit_writer(gpointer key, gpointer value, gpointer user_data) ++{ ++ log_pipe_deinit((LogPipe *) value, NULL, NULL); ++} ++ + static gboolean + affile_dd_deinit(LogPipe *s, GlobalConfig *cfg, PersistentConfig *persist) + { +@@ -721,6 +734,7 @@ affile_dd_deinit(LogPipe *s, GlobalConfig *cfg, PersistentConfig *persist) + { + g_assert(self->writer_hash == NULL); + ++ log_pipe_deinit(&self->writer->super, NULL, NULL); + persist_config_add(persist, affile_dd_format_persist_name(self), self->writer, affile_dd_destroy_writer); + self->writer = NULL; + } +@@ -728,6 +742,7 @@ affile_dd_deinit(LogPipe *s, GlobalConfig *cfg, PersistentConfig *persist) + { + g_assert(self->writer == NULL); + ++ g_hash_table_foreach(self->writer_hash, affile_dd_deinit_writer, NULL); + persist_config_add(persist, affile_dd_format_persist_name(self), self->writer_hash, affile_dd_destroy_writer_hash); + self->writer_hash = NULL; + } +diff --git a/src/logwriter.c b/src/logwriter.c +index 3286da7..bb82b43 100644 +--- a/src/logwriter.c ++++ b/src/logwriter.c +@@ -423,6 +423,7 @@ log_writer_reopen(LogPipe *s, FDWrite *newfd) + { + LogWriter *self = (LogWriter *) s; + ++ /* old fd is freed by the source */ + if (self->source) + { + g_source_destroy(self->source); +@@ -440,12 +441,12 @@ log_writer_reopen(LogPipe *s, FDWrite *newfd) + } + + void +-log_writer_set_options(LogWriter *self, LogWriterOptions *options) ++log_writer_set_options(LogWriter *self, LogPipe *control, LogWriterOptions *options) + { ++ self->control = control; + self->options = options; + } + +- + LogPipe * + log_writer_new(guint32 flags, LogPipe *control, LogWriterOptions *options) + { +diff --git a/src/logwriter.h b/src/logwriter.h +index 3fe7129..284899b 100644 +--- a/src/logwriter.h ++++ b/src/logwriter.h +@@ -81,7 +81,7 @@ typedef struct _LogWriter + LogWriterOptions *options; + } LogWriter; + +-void log_writer_set_options(LogWriter *self, LogWriterOptions *options); ++void log_writer_set_options(LogWriter *self, LogPipe *control, LogWriterOptions *options); + void log_writer_format_log(LogWriter *self, LogMessage *lm, GString *result); + gboolean log_writer_reopen(LogPipe *s, FDWrite *fd); + LogPipe *log_writer_new(guint32 flags, LogPipe *control, LogWriterOptions *options); diff --git a/syslog-ng.spec b/syslog-ng.spec index 358ea4b..c254640 100644 --- a/syslog-ng.spec +++ b/syslog-ng.spec @@ -10,7 +10,7 @@ Name: syslog-ng Version: 2.0.7 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Syslog replacement daemon Group: System Environment/Daemons @@ -21,6 +21,8 @@ Source1: syslog.log Patch0: syslog-ng-2.0.0-init.patch Patch1: syslog-ng-1.6.7-logrotate.patch Patch2: syslog-ng-2.0.5-conf.patch +# Patch3: bug#430057 +Patch3: logrotation-bug-2.0.7.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: flex @@ -58,6 +60,7 @@ ideal for firewalled environments. %patch0 -p1 %patch1 -p1 %patch2 -p1 +%patch3 -p1 %{__sed} -i 's|^#!/usr/local/bin/perl|#!%{__perl}|' contrib/relogger.pl chmod -c a-x contrib/syslog2ng @@ -176,6 +179,10 @@ fi %changelog +* Tue Jan 29 2008 Douglas E. Warner 2.0.7-2 +- added patch from git commit a8b9878ab38b10d24df7b773c8c580d341b22383 + to fix log rotation (bug#430057) + * Tue Jan 08 2008 Douglas E. Warner 2.0.7-1 - updated to 2.0.7 - force regeneration to avoid broken paths from upstream (#265221)