From 09dd5c92bb343b7dc9c93d3eff57cc004d57adc7 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Thu, 9 Oct 2008 16:02:30 +0200 Subject: fixed memory leaks - a big one in syslogd.c, which caused messages not to be freed when compiled for single-threading mode - a small one in the file output handler, outchannels, when a size-reached action was to be executed --- omfile.c | 2 ++ syslogd.c | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/omfile.c b/omfile.c index db2ec3eb..6fcf45ba 100644 --- a/omfile.c +++ b/omfile.c @@ -287,6 +287,8 @@ int resolveFileSizeLimit(instanceData *pData) execProg(pCmd, 1, pParams); + free(pCmd); + pData->fd = open((char*) pData->f_fname, O_WRONLY|O_APPEND|O_CREAT|O_NOCTTY, pData->fCreateMode); diff --git a/syslogd.c b/syslogd.c index afcc3b92..98e7d7ba 100644 --- a/syslogd.c +++ b/syslogd.c @@ -2784,7 +2784,6 @@ static void *singleWorker() * rgerhards, 2005-10-24 */ #ifndef USE_PTHREADS -#define enqueueMsg(x) processMsg((x)) #else static void enqueueMsg(msg_t *pMsg) { @@ -3299,7 +3298,12 @@ logmsg(int pri, msg_t *pMsg, int flags) */ pMsg->msgFlags = flags; +#ifndef USE_PTHREADS + processMsg(pMsg); + MsgDestruct(pMsg); +#else /* ifdef USE_PTHREADS */ enqueueMsg(pMsg); +#endif } -- cgit From f35197f1c2136b5e043cdf4776f99b4854bfcc5c Mon Sep 17 00:00:00 2001 From: Federico Nunez Date: Thu, 9 Oct 2008 16:04:18 +0200 Subject: bugfix: memory leaks in rsyslogd, primarily in singlethread mode Thanks to Frederico Nunez for providing the fix. The actual patch was commited before this one - unfortunately I forgot to set the author correct when commiting it and then it was pushed to the online repository. Sorry for this ;) Signed-off-by: Rainer Gerhards --- ChangeLog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index 730f65bb..ec115b0e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ --------------------------------------------------------------------------- Version 2.0.6 V2-STABLE (rgerhards), 2008-??-?? +- bugfix: memory leaks in rsyslogd, primarily in singlethread mode + Thanks to Frederico Nunez for providing the fix - bugfix: copy&paste error lead to dangling if - this caused a very minor issue with re-formatting a RFC3164 date when the message was invalidly formatted and had a colon immediately after the date. This was in the -- cgit From 1913033b91b623377558d3b29da5c7ac1c719a41 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Thu, 9 Oct 2008 17:37:33 +0200 Subject: updated project status to reflect 3.18.5 release --- doc/status.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/status.html b/doc/status.html index ec3fbb48..28b5fd81 100644 --- a/doc/status.html +++ b/doc/status.html @@ -13,8 +13,8 @@ change log - download

-

v3 stable: 3.18.4 [2008-09-18] - change log - -download +

v3 stable: 3.18.5 [2008-10-09] - change log - +download
v2 stable: 2.0.6 [2008-08-07] - change log - download -- cgit From 7c2f01ed473da2d418a2aa151fc7cac18657867f Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Wed, 15 Oct 2008 09:23:47 +0200 Subject: syslog-ng comparison had artefacts from merge conflicts --- doc/rsyslog_ng_comparison.html | 8 -------- 1 file changed, 8 deletions(-) diff --git a/doc/rsyslog_ng_comparison.html b/doc/rsyslog_ng_comparison.html index bc99cb8c..2f383f78 100644 --- a/doc/rsyslog_ng_comparison.html +++ b/doc/rsyslog_ng_comparison.html @@ -432,17 +432,9 @@ including ability to present channel and priority as visible log data yes yes -<<<<<<< HEAD:doc/rsyslog_ng_comparison.html - -native ability to send mail messages -yes (ommail, -introduced in 3.17.0) -not sure... -======= native ability to send mail messages yes (ommail, introduced in 3.17.0) no (only via piped external process) ->>>>>>> 3f2856b4b5010dfcaa720b292dc3a655e7b9f6da:doc/rsyslog_ng_comparison.html good timestamp format control; at a -- cgit From 83360a6841ce7b3d28d26fde98d9ef4f03b1e229 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Thu, 16 Oct 2008 14:23:14 +0200 Subject: increased maximum size of a configuration statement to 4K (was 1K) --- ChangeLog | 4 +++- runtime/conf.c | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index db47f415..d4ddca1c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,11 @@ --------------------------------------------------------------------------- -Version 3.19.12 [BETA] (rgerhards), 2008-08-25 +Version 3.19.12 [BETA] (rgerhards), 2008-10-16 - bugfix: subseconds where not correctly extracted from a timestamp if that timestamp did not contain any subsecond information (the resulting string was garbagge but should have been "0", what it now is). +- increased maximum size of a configuration statement to 4K (was 1K) +- imported all fixes from the stable branch (quite a lot) --------------------------------------------------------------------------- Version 3.19.11 [BETA] (rgerhards), 2008-08-25 This is a refresh of the beta. No beta-specific fixes have been added. diff --git a/runtime/conf.c b/runtime/conf.c index 71b2b2da..75276a00 100644 --- a/runtime/conf.c +++ b/runtime/conf.c @@ -31,7 +31,7 @@ * * A copy of the GPL can be found in the file "COPYING" in this distribution. */ - +#define CFGLNSIZ 4096 /* the maximum size of a configuraton file line, after re-combination */ #include "config.h" #include #include @@ -382,7 +382,7 @@ processConfFile(uchar *pConfFile) FILE *cf; selector_t *fCurr = NULL; uchar *p; - uchar cbuf[BUFSIZ]; + uchar cbuf[CFGLNSIZ]; uchar *cline; int i; ASSERT(pConfFile != NULL); @@ -422,7 +422,7 @@ processConfFile(uchar *pConfFile) for (p = (uchar*) strchr((char*)cline, '\0'); isspace((int) *--p);) /*EMPTY*/; if (*p == '\\') { - if ((p - cbuf) > BUFSIZ - 30) { + if ((p - cbuf) > CFGLNSIZ - 30) { /* Oops the buffer is full - what now? */ cline = cbuf; } else { -- cgit From 11e2d2c3bede67cc09580269fcc45d2f3e604eba Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Thu, 16 Oct 2008 14:30:56 +0200 Subject: clarified cost and effect of SIGHUP --- tools/rsyslogd.8 | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/rsyslogd.8 b/tools/rsyslogd.8 index 91f2016e..fd7a5377 100644 --- a/tools/rsyslogd.8 +++ b/tools/rsyslogd.8 @@ -223,6 +223,14 @@ configuration file (default is will be reread and the .BR rsyslog (3) facility is started again. +Note that this means a full rsyslogd restart is done. This has, among others, +the consequence that TCP and other connections are torn down. Also, if any +queues are not running in disk assisted mode or are not set to persist data +on shutdown, queue data is lost. HUPing rsyslogd is an extremely expensive +operation and should only be done when actually necessary. Actually, it is +a rsyslgod stop immediately followed by a restart. Future versions will probably +include a special handling which only closes files, but will not cause any +of the other effects. .TP .B TERM ", " INT ", " QUIT .B Rsyslogd -- cgit From 7963aed7d6a91ba8d1c9c4bca0cd7607f1ba9d71 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Thu, 16 Oct 2008 15:07:37 +0200 Subject: updated release information --- doc/status.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/status.html b/doc/status.html index 28b5fd81..211a17bc 100644 --- a/doc/status.html +++ b/doc/status.html @@ -9,9 +9,9 @@ change log - download -
beta: 3.19.11 [2008-08-25] - -change log - -download

+
beta: 3.19.12 [2008-10-16] - +change log - +download

v3 stable: 3.18.5 [2008-10-09] - change log - download -- cgit From 19ccebbf4c49c5f9954c7a1a092399303156a1f3 Mon Sep 17 00:00:00 2001 From: Marius Tomaschewski Date: Mon, 20 Oct 2008 17:36:31 +0200 Subject: added capability to support multiple module search pathes. Signed-off-by: Rainer Gerhards --- ChangeLog | 2 + configure.ac | 22 +++++++++++ runtime/Makefile.am | 4 ++ runtime/modules.c | 108 +++++++++++++++++++++++++++++++++++----------------- 4 files changed, 101 insertions(+), 35 deletions(-) diff --git a/ChangeLog b/ChangeLog index f0bbf02c..46830143 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,8 @@ Version 3.21.6 [DEVEL] (rgerhards), 2008-10-?? and consistency - bugfix: subsecond time properties generated by imfile, imklog and internal messages could be slightly inconsistent +- added capability to support multiple module search pathes. Thank + to Marius Tomaschewski for providing the patch. --------------------------------------------------------------------------- Version 3.21.5 [DEVEL] (rgerhards), 2008-09-30 - performance optimization: unnecessary time() calls during message diff --git a/configure.ac b/configure.ac index fea7c063..4d74c957 100644 --- a/configure.ac +++ b/configure.ac @@ -156,6 +156,28 @@ fi +# Additional module directories +AC_ARG_WITH(moddirs, + [AS_HELP_STRING([--with-moddirs=DIRS],[Additional module search paths appended to @<:@$libdir/rsyslog@:>@])], + [_save_IFS=$IFS ; IFS=$PATH_SEPARATOR ; moddirs="" + for w in ${with_moddirs} ; + do + case $w in + "") continue ;; */) ;; *) w="${w}/" ;; + esac + for m in ${moddirs} ; + do + test "x$w" = "x${libdir}/${PACKAGE}/" || \ + test "x$w" = "x$m" || test "x$w" = "x/" && \ + continue 2 + done + case $moddirs in + "") moddirs="$w" ;; *) moddirs="${moddirs}:${w}" ;; + esac + done ; IFS=$_save_IFS],[moddirs=""] +) +AM_CONDITIONAL(WITH_MODDIRS, test x$moddirs != x) +AC_SUBST(moddirs) # Large file support AC_ARG_ENABLE(largefile, diff --git a/runtime/Makefile.am b/runtime/Makefile.am index 81a9d5bd..8dd8ad12 100644 --- a/runtime/Makefile.am +++ b/runtime/Makefile.am @@ -83,7 +83,11 @@ librsyslog_la_SOURCES = \ # the files with ../ we need to work on - so that they either become part of the # runtime or will no longer be needed. -- rgerhards, 2008-06-13 +if WITH_MODDIRS +librsyslog_la_CPPFLAGS = -D_PATH_MODDIR=\"$(pkglibdir)/:$(moddirs)\" $(pthreads_cflags) +else librsyslog_la_CPPFLAGS = -D_PATH_MODDIR=\"$(pkglibdir)/\" -I$(top_srcdir) $(pthreads_cflags) +endif #librsyslog_la_LDFLAGS = -module -avoid-version librsyslog_la_LIBADD = $(dl_libs) $(rt_libs) diff --git a/runtime/modules.c b/runtime/modules.c index ceb4768c..d5730ede 100644 --- a/runtime/modules.c +++ b/runtime/modules.c @@ -570,6 +570,8 @@ Load(uchar *pModName) int bHasExtension; void *pModHdlr, *pModInit; modInfo_t *pModInfo; + uchar *pModDirCurr, *pModDirNext; + int iLoadCnt; assert(pModName != NULL); dbgprintf("Requested to load module '%s'\n", pModName); @@ -591,48 +593,84 @@ Load(uchar *pModName) pModInfo = GetNxt(pModInfo); } - /* now build our load module name */ - if(*pModName == '/') { - *szPath = '\0'; /* we do not need to append the path - its already in the module name */ - iPathLen = 0; - } else { - *szPath = '\0'; - strncat((char *) szPath, (pModDir == NULL) ? _PATH_MODDIR : (char*) pModDir, sizeof(szPath) - 1); - iPathLen = strlen((char*) szPath); - if((szPath[iPathLen - 1] != '/')) { - if((iPathLen <= sizeof(szPath) - 2)) { - szPath[iPathLen++] = '/'; - szPath[iPathLen] = '\0'; - } else { - errmsg.LogError(0, RS_RET_MODULE_LOAD_ERR_PATHLEN, "could not load module '%s', path too long\n", pModName); + pModDirCurr = (uchar *)((pModDir == NULL) ? _PATH_MODDIR : (char *)pModDir); + pModDirNext = NULL; + pModHdlr = NULL; + iLoadCnt = 0; + do { + /* now build our load module name */ + if(*pModName == '/') { + *szPath = '\0'; /* we do not need to append the path - its already in the module name */ + iPathLen = 0; + } else { + *szPath = '\0'; + + iPathLen = strlen((char *)pModDirCurr); + pModDirNext = (uchar *)strchr((char *)pModDirCurr, ':'); + if(pModDirNext) + iPathLen = (size_t)(pModDirNext - pModDirCurr); + + if(iPathLen == 0) { + if(pModDirNext) { + pModDirCurr = pModDirNext + 1; + continue; + } + break; + } else if(iPathLen > sizeof(szPath) - 1) { + errmsg.LogError(0, NO_ERRCODE, "could not load module '%s', module path too long\n", pModName); ABORT_FINALIZE(RS_RET_MODULE_LOAD_ERR_PATHLEN); } + + strncat((char *) szPath, (char *)pModDirCurr, iPathLen); + iPathLen = strlen((char*) szPath); + + if(pModDirNext) + pModDirCurr = pModDirNext + 1; + + if((szPath[iPathLen - 1] != '/')) { + if((iPathLen <= sizeof(szPath) - 2)) { + szPath[iPathLen++] = '/'; + szPath[iPathLen] = '\0'; + } else { + errmsg.LogError(0, RS_RET_MODULE_LOAD_ERR_PATHLEN, "could not load module '%s', path too long\n", pModName); + ABORT_FINALIZE(RS_RET_MODULE_LOAD_ERR_PATHLEN); + } + } } - } - /* ... add actual name ... */ - strncat((char *) szPath, (char *) pModName, sizeof(szPath) - iPathLen - 1); + /* ... add actual name ... */ + strncat((char *) szPath, (char *) pModName, sizeof(szPath) - iPathLen - 1); + + /* now see if we have an extension and, if not, append ".so" */ + if(!bHasExtension) { + /* we do not have an extension and so need to add ".so" + * TODO: I guess this is highly importable, so we should change the + * algo over time... -- rgerhards, 2008-03-05 + */ + /* ... so now add the extension */ + strncat((char *) szPath, ".so", sizeof(szPath) - strlen((char*) szPath) - 1); + iPathLen += 3; + } - /* now see if we have an extension and, if not, append ".so" */ - if(!bHasExtension) { - /* we do not have an extension and so need to add ".so" - * TODO: I guess this is highly importable, so we should change the - * algo over time... -- rgerhards, 2008-03-05 - */ - /* ... so now add the extension */ - strncat((char *) szPath, ".so", sizeof(szPath) - strlen((char*) szPath) - 1); - iPathLen += 3; - } + if(iPathLen + strlen((char*) pModName) >= sizeof(szPath)) { + errmsg.LogError(0, RS_RET_MODULE_LOAD_ERR_PATHLEN, "could not load module '%s', path too long\n", pModName); + ABORT_FINALIZE(RS_RET_MODULE_LOAD_ERR_PATHLEN); + } - if(iPathLen + strlen((char*) pModName) >= sizeof(szPath)) { - errmsg.LogError(0, RS_RET_MODULE_LOAD_ERR_PATHLEN, "could not load module '%s', path too long\n", pModName); - ABORT_FINALIZE(RS_RET_MODULE_LOAD_ERR_PATHLEN); - } + /* complete load path constructed, so ... GO! */ + dbgprintf("loading module '%s'\n", szPath); + pModHdlr = dlopen((char *) szPath, RTLD_NOW); + iLoadCnt++; + + } while(pModHdlr == NULL && *pModName != '/' && pModDirNext); - /* complete load path constructed, so ... GO! */ - dbgprintf("loading module '%s'\n", szPath); - if(!(pModHdlr = dlopen((char *) szPath, RTLD_NOW))) { - errmsg.LogError(0, RS_RET_MODULE_LOAD_ERR_DLOPEN, "could not load module '%s', dlopen: %s\n", szPath, dlerror()); + if(!pModHdlr) { + if(iLoadCnt) { + errmsg.LogError(0, RS_RET_MODULE_LOAD_ERR_DLOPEN, "could not load module '%s', dlopen: %s\n", szPath, dlerror()); + } else { + errmsg.LogError(0, NO_ERRCODE, "could not load module '%s', ModDir was '%s'\n", szPath, + ((pModDir == NULL) ? _PATH_MODDIR : (char *)pModDir)); + } ABORT_FINALIZE(RS_RET_MODULE_LOAD_ERR_DLOPEN); } if(!(pModInit = dlsym(pModHdlr, "modInit"))) { -- cgit From 0039fc839131ce059cd08401c1751913d6293098 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Tue, 21 Oct 2008 13:33:52 +0200 Subject: bugfix: (potentially big) memory leak on HUP - if queues could not be drained before timeout - thanks to David Lang for pointing this out - added link to german-language forum to doc set --- ChangeLog | 2 ++ doc/manual.html | 13 ++++++------- runtime/queue.c | 45 ++++++++++++++++++++++++++++++++------------- 3 files changed, 40 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index d4ddca1c..876c6d2b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,8 @@ Version 3.19.12 [BETA] (rgerhards), 2008-10-16 now is). - increased maximum size of a configuration statement to 4K (was 1K) - imported all fixes from the stable branch (quite a lot) +- bugfix: (potentially big) memory leak on HUP if queues could not be + drained before timeout - thanks to David Lang for pointing this out --------------------------------------------------------------------------- Version 3.19.11 [BETA] (rgerhards), 2008-08-25 This is a refresh of the beta. No beta-specific fixes have been added. diff --git a/doc/manual.html b/doc/manual.html index 4490f653..f1e2640b 100644 --- a/doc/manual.html +++ b/doc/manual.html @@ -84,13 +84,12 @@ wiki, a community resource which includes rsyslog online documentation (most current version only) -

  • rsyslog -discussion forum - use this for technical support
  • -
  • rsyslog -change log
  • -
  • rsyslog -FAQ
  • syslog -device configuration guide (off-site)
  • +
  • rsyslog discussion forum - use this for technical support
  • +
  • rsyslog change log
  • +
  • rsyslog FAQ
  • +
  • syslog device configuration guide (off-site)
  • +
  • rsyslog discussion forum - use this for technical support
  • +
  • deutsches rsyslog forum (forum in German language)
  • And don't forget about the rsyslog mailing list. If you are interested in the "backstage", you diff --git a/runtime/queue.c b/runtime/queue.c index 0768cd77..9f9943bc 100644 --- a/runtime/queue.c +++ b/runtime/queue.c @@ -87,6 +87,30 @@ ENDfunc return pThis->iQueueSize + pThis->iUngottenObjs; } + +/* This function drains the queue in cases where this needs to be done. The most probable + * reason is a HUP which needs to discard data (because the queue is configured to be lossy). + * During a shutdown, this is typically not needed, as the OS frees up ressources and does + * this much quicker than when we clean up ourselvs. -- rgerhards, 2008-10-21 + * This function returns void, as it makes no sense to communicate an error back, even if + * it happens. + */ +static inline void queueDrain(queue_t *pThis) +{ + void *pUsr; + + ASSERT(pThis != NULL); + + /* iQueueSize is not decremented by qDel(), so we need to do it ourselves */ + while(pThis->iQueueSize-- > 0) { + pThis->qDel(pThis, &pUsr); + if(pUsr != NULL) { + objDestruct(pUsr); + } + } +} + + /* --------------- code for disk-assisted (DA) queue modes -------------------- */ @@ -195,14 +219,6 @@ queueTurnOffDAMode(queue_t *pThis) } } - /* TODO: we have a *really biiiiig* memory leak here: if the queue could not be persisted, all of - * its data elements are still in memory. That doesn't really matter if we are terminated, but on - * HUP this memory leaks. We MUST add a loop of destructor calls here. However, this takes time - * (possibly a lot), so it is probably best to have a config variable for that. - * Something for 3.11.1! - * rgerhards, 2008-01-30 - */ - RETiRet; } @@ -460,12 +476,15 @@ static rsRetVal qDestructFixedArray(queue_t *pThis) ASSERT(pThis != NULL); + queueDrain(pThis); /* discard any remaining queue entries */ + if(pThis->tVars.farray.pBuf != NULL) free(pThis->tVars.farray.pBuf); RETiRet; } + static rsRetVal qAddFixedArray(queue_t *pThis, void* in) { DEFiRet; @@ -569,11 +588,11 @@ static rsRetVal qConstructLinkedList(queue_t *pThis) static rsRetVal qDestructLinkedList(queue_t __attribute__((unused)) *pThis) { DEFiRet; - - /* with the linked list type, there is nothing to do here. The - * reason is that the Destructor is only called after all entries - * have bene taken off the queue. In this case, there is nothing - * dynamic left with the linked list. + + queueDrain(pThis); /* discard any remaining queue entries */ + + /* with the linked list type, there is nothing left to do here. The + * reason is that there are no dynamic elements for the list itself. */ RETiRet; -- cgit From 162c9e91e970cc9475bc86ffd00fd1d939e1e487 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Wed, 22 Oct 2008 10:08:10 +0200 Subject: preparing for 3.21.6 plus solving a compile problem for im3195 (which is not used in practice, thus this did not show up before...) --- ChangeLog | 4 +++- configure.ac | 2 +- doc/manual.html | 2 +- plugins/im3195/im3195.c | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 97acfd46..c4a668b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,11 +1,13 @@ --------------------------------------------------------------------------- -Version 3.21.6 [DEVEL] (rgerhards), 2008-10-?? +Version 3.21.6 [DEVEL] (rgerhards), 2008-10-22 - consolidated time calls during msg object creation, improves performance and consistency +- bugfix: solved a segfault condition - bugfix: subsecond time properties generated by imfile, imklog and internal messages could be slightly inconsistent - added capability to support multiple module search pathes. Thank to Marius Tomaschewski for providing the patch. +- bugfix: im3195 did no longer compile --------------------------------------------------------------------------- Version 3.21.5 [DEVEL] (rgerhards), 2008-09-30 - performance optimization: unnecessary time() calls during message diff --git a/configure.ac b/configure.ac index 4d74c957..69744c8f 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.61) -AC_INIT([rsyslog],[3.21.5],[rsyslog@lists.adiscon.com]) +AC_INIT([rsyslog],[3.21.6],[rsyslog@lists.adiscon.com]) AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([ChangeLog]) AC_CONFIG_HEADERS([config.h]) diff --git a/doc/manual.html b/doc/manual.html index a2f34a89..884c43c0 100644 --- a/doc/manual.html +++ b/doc/manual.html @@ -16,7 +16,7 @@ relay chains while at the same time being very easy to setup for the novice user. And as we know what enterprise users really need, there is also professional rsyslog support available directly from the source!

    -

    This documentation is for version 3.21.5 (devel branch) of rsyslog. +

    This documentation is for version 3.21.6 (devel branch) of rsyslog. Visit the rsyslog status page to obtain current version information and project status.

    If you like rsyslog, you might diff --git a/plugins/im3195/im3195.c b/plugins/im3195/im3195.c index 32dd8dc1..1c2502fe 100644 --- a/plugins/im3195/im3195.c +++ b/plugins/im3195/im3195.c @@ -83,7 +83,7 @@ void OnReceive(srAPIObj __attribute__((unused)) *pMyAPI, srSLMGObj* pSLMG) srSLMGGetRawMSG(pSLMG, &pszRawMsg); parseAndSubmitMessage(fromHost, fromHostIP, pszRawMsg, strlen((char*)pszRawMsg), - MSG_PARSE_HOSTNAME, NOFLAG, eFLOWCTL_FULL_DELAY); + MSG_PARSE_HOSTNAME, NOFLAG, eFLOWCTL_FULL_DELAY, (uchar*)"im3195"); } -- cgit