From a745208787f3b2752e17d3171ca3e2a2f4f0d5c4 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Mon, 11 Feb 2008 07:47:27 +0000 Subject: bugfix: errno could be changed during mark processing, leading to invalid error messages when processing inputs. Thank to varmojfekoj for pointing out this problem. --- ChangeLog | 3 +++ syslogd.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/ChangeLog b/ChangeLog index 065956b9..172f3f31 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,6 +7,9 @@ Version 2.0.2 STABLE (rgerhards), 2008-02-?? they run rsyslog ;)) - bugfix: suspended actions were not always properly resumed varmojfekoj provided the patch - many thanks! +- bugfix: errno could be changed during mark processing, leading to + invalid error messages when processing inputs. Thank to varmojfekoj for + pointing out this problem. --------------------------------------------------------------------------- Version 2.0.1 STABLE (rgerhards), 2008-01-24 - fixed a bug in integer conversion - but this function was never called, diff --git a/syslogd.c b/syslogd.c index c6c5dc2f..ad740524 100644 --- a/syslogd.c +++ b/syslogd.c @@ -5898,6 +5898,7 @@ static void mainloop(void) int i; int maxfds; int nfds; + int errnoSave; #ifdef SYSLOG_INET selectHelperWriteFDSInfo_t writeFDSInfo; fd_set writefds; @@ -6036,6 +6037,7 @@ static void mainloop(void) #endif nfds = select(maxfds+1, (fd_set *) &readfds, MAIN_SELECT_WRITEFDS, (fd_set *) NULL, MAIN_SELECT_TIMEVAL); + errnoSave = errno; /* save errno for later reference */ if(bRequestDoMark) { domark(); @@ -6056,6 +6058,7 @@ static void mainloop(void) continue; } + errno = errnoSave; /* restore errno to state right after select (which is what we need) -- rgerhards, 2008-02-11 */ processSelectAfter(maxfds, nfds, &readfds, MAIN_SELECT_WRITEFDS); #undef MAIN_SELECT_TIMEVAL -- cgit v1.2.3