summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2011-10-07 11:42:49 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2011-10-07 11:42:49 +0200
commitcd5253fa82fdbd7529f76c9cec2130e1ccb210bb (patch)
tree1c5d255699d553a6387cb155e1fb08e0f95752db
parentcf1aaf14fa2bcb457a306d42723ed91a76df00f1 (diff)
downloadrsyslog-cd5253fa82fdbd7529f76c9cec2130e1ccb210bb.tar.gz
rsyslog-cd5253fa82fdbd7529f76c9cec2130e1ccb210bb.tar.xz
rsyslog-cd5253fa82fdbd7529f76c9cec2130e1ccb210bb.zip
bugfix: imfile did invalid system call under some circumstances
when a file that was to be monitored did not exist BUT the state file actually existed. Mostly a cosmetic issue. Root cause was incomplete error checking in stream.c; so patch may affect other code areas.
-rw-r--r--ChangeLog4
-rw-r--r--plugins/imfile/imfile.c4
-rw-r--r--runtime/stream.c10
3 files changed, 12 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 11a75c26..b89429f6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,10 @@ Version 5.8.6 [V5-stable] (rgerhards/al), 2011-??-??
- bugfix: omfile returns fatal error code for things that go really wrong
previously, RS_RET_RESUME was returned, which lead to a loop inside the
rule engine as omfile could not really recover.
+- bugfix: imfile did invalid system call under some circumstances
+ when a file that was to be monitored did not exist BUT the state file
+ actually existed. Mostly a cosmetic issue. Root cause was incomplete
+ error checking in stream.c; so patch may affect other code areas.
- bugfix: rsyslogd -v always said 64 atomics were not present
thanks to mono_matsuko for the patch
---------------------------------------------------------------------------
diff --git a/plugins/imfile/imfile.c b/plugins/imfile/imfile.c
index cac3a55d..40a41a98 100644
--- a/plugins/imfile/imfile.c
+++ b/plugins/imfile/imfile.c
@@ -147,10 +147,10 @@ openFile(fileInfo_t *pThis)
/* check if the file exists */
if(stat((char*) pszSFNam, &stat_buf) == -1) {
if(errno == ENOENT) {
- /* currently no object! dbgoprint((obj_t*) pThis, "clean startup, no .si file found\n"); */
+ dbgprintf("filemon %p: clean startup, no .si file found\n", pThis);
ABORT_FINALIZE(RS_RET_FILE_NOT_FOUND);
} else {
- /* currently no object! dbgoprint((obj_t*) pThis, "error %d trying to access .si file\n", errno); */
+ dbgprintf("filemon %p: error %d trying to access .si file\n", pThis, errno);
ABORT_FINALIZE(RS_RET_IO_ERROR);
}
}
diff --git a/runtime/stream.c b/runtime/stream.c
index ae716815..0238d25e 100644
--- a/runtime/stream.c
+++ b/runtime/stream.c
@@ -1276,16 +1276,18 @@ static rsRetVal strmSeek(strm_t *pThis, off64_t offs)
ISOBJ_TYPE_assert(pThis, strm);
- if(pThis->fd == -1)
- strmOpenFile(pThis);
- else
- strmFlushInternal(pThis);
+ if(pThis->fd == -1) {
+ CHKiRet(strmOpenFile(pThis));
+ } else {
+ CHKiRet(strmFlushInternal(pThis));
+ }
long long i;
DBGOPRINT((obj_t*) pThis, "file %d seek, pos %llu\n", pThis->fd, (long long unsigned) offs);
i = lseek64(pThis->fd, offs, SEEK_SET); // TODO: check error!
pThis->iCurrOffs = offs; /* we are now at *this* offset */
pThis->iBufPtr = 0; /* buffer invalidated */
+finalize_it:
RETiRet;
}