From 29867b5cc18d25191fbbdcc4af4f79cc3a4da43e Mon Sep 17 00:00:00 2001
From: Michael Biebl
Date: Thu, 13 Mar 2014 17:57:11 +0100
Subject: Imported Upstream version 7.6.1
---
ChangeLog | 349 +++++
Makefile.am | 26 +-
Makefile.in | 47 +-
README | 62 +-
action.c | 160 ++-
action.h | 19 +-
compat/Makefile.in | 23 +-
config.h.in | 12 +
configure | 547 +++++++-
configure.ac | 118 +-
dirty.h | 6 +-
doc/Makefile.am | 19 +
doc/Makefile.in | 23 +
doc/build_from_repo.html | 2 +-
doc/debug.html | 13 +-
doc/dev_oplugins.html | 40 +-
doc/dev_queue.html | 10 +-
doc/droppriv.html | 2 +-
doc/features.html | 4 +-
doc/free_support.html | 2 +-
doc/global.html | 35 +-
doc/history.html | 2 +-
doc/im3195.html | 2 +-
doc/imfile.html | 14 +
doc/imjournal.html | 16 +
doc/imklog.html | 2 +-
doc/imkmsg.html | 2 +-
doc/impstats.html | 32 +-
doc/imptcp.html | 18 +-
doc/imrelp.html | 83 +-
doc/imsolaris.html | 2 +-
doc/imtcp.html | 28 +-
doc/imudp.html | 70 +-
doc/imuxsock.html | 4 +-
doc/licensing.html | 2 +-
doc/log_rotation_fix_size.html | 6 +-
doc/lookup_tables.html | 2 +-
doc/manual.html | 2 +-
doc/messageparser.html | 42 +-
doc/mmanon.html | 6 +
doc/mmcount.html | 58 +
doc/mmfields.html | 91 ++
doc/mmjsonparse.html | 10 +
doc/mmnormalize.html | 2 +-
doc/mmpstrucdata.html | 82 ++
doc/mmrfc5424addhmac.html | 88 ++
doc/mmsequence.html | 148 ++
doc/mmsnmptrapd.html | 8 +-
doc/mmutf8fix.html | 105 ++
doc/modules.html | 2 +-
doc/multi_ruleset.html | 16 +-
doc/multi_ruleset_legacy_format.html | 28 +-
doc/ns_gtls.html | 4 +-
doc/omelasticsearch.html | 177 +++
doc/omfile.html | 62 +-
doc/omfwd.html | 86 +-
doc/ommongodb.html | 60 +
doc/omprog.html | 31 +-
doc/omrelp.html | 79 +-
doc/omruleset.html | 14 +
doc/queue_parameters.html | 116 ++
doc/rainerscript.html | 51 +-
doc/rainerscript_call.html | 51 +
doc/rsyslog_conf_actions.html | 39 +-
doc/rsyslog_conf_basic_structure.html | 2 +-
doc/rsyslog_conf_global.html | 4 +
doc/rsyslog_conf_modules.html | 9 +
doc/rsyslog_secure_tls.html | 114 ++
doc/tls_cert_ca.html | 155 +++
doc/tls_cert_client.html | 78 ++
doc/tls_cert_errmsgs.html | 13 -
doc/tls_cert_machine.html | 169 +++
doc/tls_cert_scenario.html | 50 +
doc/tls_cert_server.html | 114 ++
doc/tls_cert_summary.html | 53 +
doc/tls_cert_udp_relay.html | 92 ++
grammar/Makefile.in | 23 +-
grammar/lexer.c | 1951 ++++++++++++++-------------
grammar/lexer.l | 8 +-
grammar/parserif.h | 2 +-
grammar/rainerscript.c | 418 +++++-
grammar/rainerscript.h | 18 +-
java/Makefile.in | 4 +
plugins/im3195/Makefile.in | 23 +-
plugins/imdiag/Makefile.in | 23 +-
plugins/imfile/Makefile.in | 23 +-
plugins/imfile/imfile.c | 192 ++-
plugins/imgssapi/Makefile.in | 23 +-
plugins/imjournal/Makefile.in | 23 +-
plugins/imjournal/imjournal.c | 127 +-
plugins/imklog/Makefile.in | 23 +-
plugins/imkmsg/Makefile.in | 23 +-
plugins/immark/Makefile.in | 23 +-
plugins/impstats/Makefile.in | 23 +-
plugins/impstats/impstats.c | 121 +-
plugins/imptcp/Makefile.in | 23 +-
plugins/imptcp/imptcp.c | 194 ++-
plugins/imrelp/Makefile.in | 23 +-
plugins/imrelp/imrelp.c | 236 +++-
plugins/imsolaris/Makefile.in | 23 +-
plugins/imtcp/Makefile.in | 23 +-
plugins/imtcp/imtcp.c | 18 +-
plugins/imttcp/Makefile.in | 23 +-
plugins/imudp/Makefile.in | 23 +-
plugins/imudp/imudp.c | 428 ++++--
plugins/imuxsock/Makefile.in | 23 +-
plugins/imuxsock/imuxsock.c | 161 +--
plugins/imzmq3/Makefile.in | 23 +-
plugins/mmanon/Makefile.in | 23 +-
plugins/mmaudit/Makefile.in | 23 +-
plugins/mmcount/Makefile.am | 8 +
plugins/mmcount/Makefile.in | 639 +++++++++
plugins/mmcount/mmcount.c | 342 +++++
plugins/mmfields/Makefile.am | 8 +
plugins/mmfields/Makefile.in | 639 +++++++++
plugins/mmfields/mmfields.c | 274 ++++
plugins/mmjsonparse/Makefile.in | 23 +-
plugins/mmnormalize/Makefile.in | 23 +-
plugins/mmpstrucdata/Makefile.am | 8 +
plugins/mmpstrucdata/Makefile.in | 640 +++++++++
plugins/mmpstrucdata/mmpstrucdata.c | 402 ++++++
plugins/mmrfc5424addhmac/Makefile.am | 8 +
plugins/mmrfc5424addhmac/Makefile.in | 642 +++++++++
plugins/mmrfc5424addhmac/mmrfc5424addhmac.c | 379 ++++++
plugins/mmsequence/Makefile.am | 8 +
plugins/mmsequence/Makefile.in | 639 +++++++++
plugins/mmsequence/mmsequence.c | 396 ++++++
plugins/mmsnmptrapd/Makefile.in | 23 +-
plugins/mmutf8fix/Makefile.am | 8 +
plugins/mmutf8fix/Makefile.in | 639 +++++++++
plugins/mmutf8fix/mmutf8fix.c | 318 +++++
plugins/omelasticsearch/Makefile.in | 55 +-
plugins/omelasticsearch/omelasticsearch.c | 19 +-
plugins/omgssapi/Makefile.in | 23 +-
plugins/omhdfs/Makefile.in | 23 +-
plugins/omhiredis/Makefile.in | 23 +-
plugins/omjournal/Makefile.in | 23 +-
plugins/omjournal/omjournal.c | 2 +-
plugins/omlibdbi/Makefile.in | 23 +-
plugins/ommail/Makefile.in | 23 +-
plugins/ommongodb/Makefile.in | 23 +-
plugins/ommongodb/ommongodb.c | 25 +-
plugins/ommysql/Makefile.in | 23 +-
plugins/ommysql/ommysql.c | 50 +-
plugins/omoracle/Makefile.in | 23 +-
plugins/ompgsql/Makefile.in | 23 +-
plugins/ompgsql/ompgsql.c | 6 +-
plugins/omprog/Makefile.in | 23 +-
plugins/omprog/omprog.c | 129 +-
plugins/omrabbitmq/Makefile.in | 23 +-
plugins/omrelp/Makefile.in | 23 +-
plugins/omrelp/omrelp.c | 212 ++-
plugins/omruleset/Makefile.in | 23 +-
plugins/omsnmp/Makefile.in | 23 +-
plugins/omstdout/Makefile.in | 23 +-
plugins/omtesting/Makefile.in | 23 +-
plugins/omudpspoof/Makefile.in | 23 +-
plugins/omudpspoof/omudpspoof.c | 8 +-
plugins/omuxsock/Makefile.in | 23 +-
plugins/omzmq3/Makefile.in | 23 +-
plugins/pmaixforwardedfrom/Makefile.in | 23 +-
plugins/pmcisconames/Makefile.in | 23 +-
plugins/pmlastmsg/Makefile.in | 23 +-
plugins/pmlastmsg/pmlastmsg.c | 2 +-
plugins/pmrfc3164sd/Makefile.in | 23 +-
plugins/pmrfc3164sd/pmrfc3164sd.c | 2 +-
plugins/pmsnare/Makefile.in | 23 +-
plugins/sm_cust_bindcdr/Makefile.in | 23 +-
runtime/Makefile.am | 6 +-
runtime/Makefile.in | 151 ++-
runtime/conf.c | 105 --
runtime/conf.h | 1 -
runtime/cryprov.h | 17 +-
runtime/datetime.c | 9 +
runtime/datetime.h | 1 +
runtime/debug.c | 6 +-
runtime/debug.h | 4 +
runtime/errmsg.c | 98 +-
runtime/errmsg.h | 9 +-
runtime/glbl.c | 108 +-
runtime/glbl.h | 10 +-
runtime/libgcry.c | 350 ++++-
runtime/libgcry.h | 23 +-
runtime/lmcry_gcry.c | 86 +-
runtime/lookup.c | 374 +++++
runtime/lookup.h | 57 +
runtime/modules.h | 4 -
runtime/msg.c | 579 ++++----
runtime/msg.h | 47 +-
runtime/net.c | 35 +-
runtime/net.h | 2 +-
runtime/nspoll.c | 25 +-
runtime/nspoll.h | 4 +-
runtime/nssel.c | 24 +
runtime/nssel.h | 4 +-
runtime/queue.c | 298 +++-
runtime/queue.h | 13 +-
runtime/rsconf.c | 168 +--
runtime/rsconf.h | 2 +
runtime/rsyslog.c | 22 +-
runtime/rsyslog.h | 70 +-
runtime/ruleset.c | 52 +-
runtime/ruleset.h | 2 +-
runtime/srutils.c | 2 +
runtime/statsobj.c | 35 +-
runtime/statsobj.h | 14 +-
runtime/stream.c | 111 +-
runtime/stream.h | 6 +-
runtime/stringbuf.c | 26 +-
runtime/stringbuf.h | 1 -
runtime/typedefs.h | 59 +
runtime/wti.c | 6 +-
runtime/wti.h | 1 +
runtime/wtp.c | 13 +-
runtime/wtp.h | 2 -
tcps_sess.c | 2 +
tcpsrv.c | 36 +-
tcpsrv.h | 10 +-
template.c | 114 +-
template.h | 6 +-
tests/Makefile.am | 28 +
tests/Makefile.in | 69 +-
tests/chkseq.c | 29 +-
tests/daqueue-persist.sh | 1 +
tests/diskqueue.sh | 1 +
tests/mmpstrucdata.sh | 12 +
tests/rcvr_fail_restore.sh | 2 +
tests/rfc5424parser.sh | 12 +
tests/rs_optimizer_pri.sh | 17 +
tests/rscript_eq.sh | 13 +
tests/rscript_ge.sh | 13 +
tests/rscript_gt.sh | 13 +
tests/rscript_le.sh | 13 +
tests/rscript_lt.sh | 13 +
tests/rscript_ne.sh | 13 +
tests/stop-msgvar.sh | 12 +
tests/tcpflood.c | 28 +-
tests/testsuites/mmpstrucdata.conf | 12 +
tests/testsuites/rfc5424parser.conf | 10 +
tests/testsuites/rs_optimizer_pri.conf | 8 +
tests/testsuites/rscript_eq.conf | 14 +
tests/testsuites/rscript_ge.conf | 13 +
tests/testsuites/rscript_gt.conf | 12 +
tests/testsuites/rscript_le.conf | 12 +
tests/testsuites/rscript_lt.conf | 12 +
tests/testsuites/rscript_ne.conf | 18 +
tests/testsuites/stop-localvar.conf | 8 +-
tests/testsuites/stop-msgvar.conf | 21 +
tools/Makefile.am | 2 +-
tools/Makefile.in | 28 +-
tools/omfile.c | 45 +-
tools/omfwd.c | 216 ++-
tools/ompipe.c | 8 +-
tools/pmrfc3164.c | 4 +-
tools/pmrfc5424.c | 2 +-
tools/rsyslogd.8 | 4 +
tools/syslogd.c | 127 +-
257 files changed, 16504 insertions(+), 3198 deletions(-)
create mode 100644 doc/mmcount.html
create mode 100644 doc/mmfields.html
create mode 100644 doc/mmpstrucdata.html
create mode 100644 doc/mmrfc5424addhmac.html
create mode 100644 doc/mmsequence.html
create mode 100644 doc/mmutf8fix.html
create mode 100644 doc/omelasticsearch.html
create mode 100644 doc/ommongodb.html
create mode 100644 doc/queue_parameters.html
create mode 100644 doc/rainerscript_call.html
create mode 100644 doc/rsyslog_secure_tls.html
create mode 100644 doc/tls_cert_ca.html
create mode 100644 doc/tls_cert_client.html
create mode 100644 doc/tls_cert_machine.html
create mode 100644 doc/tls_cert_scenario.html
create mode 100644 doc/tls_cert_server.html
create mode 100644 doc/tls_cert_summary.html
create mode 100644 doc/tls_cert_udp_relay.html
create mode 100644 plugins/mmcount/Makefile.am
create mode 100644 plugins/mmcount/Makefile.in
create mode 100644 plugins/mmcount/mmcount.c
create mode 100644 plugins/mmfields/Makefile.am
create mode 100644 plugins/mmfields/Makefile.in
create mode 100644 plugins/mmfields/mmfields.c
create mode 100644 plugins/mmpstrucdata/Makefile.am
create mode 100644 plugins/mmpstrucdata/Makefile.in
create mode 100644 plugins/mmpstrucdata/mmpstrucdata.c
create mode 100644 plugins/mmrfc5424addhmac/Makefile.am
create mode 100644 plugins/mmrfc5424addhmac/Makefile.in
create mode 100644 plugins/mmrfc5424addhmac/mmrfc5424addhmac.c
create mode 100644 plugins/mmsequence/Makefile.am
create mode 100644 plugins/mmsequence/Makefile.in
create mode 100644 plugins/mmsequence/mmsequence.c
create mode 100644 plugins/mmutf8fix/Makefile.am
create mode 100644 plugins/mmutf8fix/Makefile.in
create mode 100644 plugins/mmutf8fix/mmutf8fix.c
create mode 100644 runtime/lookup.c
create mode 100644 runtime/lookup.h
create mode 100755 tests/mmpstrucdata.sh
create mode 100755 tests/rfc5424parser.sh
create mode 100755 tests/rs_optimizer_pri.sh
create mode 100755 tests/rscript_eq.sh
create mode 100755 tests/rscript_ge.sh
create mode 100755 tests/rscript_gt.sh
create mode 100755 tests/rscript_le.sh
create mode 100755 tests/rscript_lt.sh
create mode 100755 tests/rscript_ne.sh
create mode 100755 tests/stop-msgvar.sh
create mode 100644 tests/testsuites/mmpstrucdata.conf
create mode 100644 tests/testsuites/rfc5424parser.conf
create mode 100644 tests/testsuites/rs_optimizer_pri.conf
create mode 100644 tests/testsuites/rscript_eq.conf
create mode 100644 tests/testsuites/rscript_ge.conf
create mode 100644 tests/testsuites/rscript_gt.conf
create mode 100644 tests/testsuites/rscript_le.conf
create mode 100644 tests/testsuites/rscript_lt.conf
create mode 100644 tests/testsuites/rscript_ne.conf
create mode 100644 tests/testsuites/stop-msgvar.conf
diff --git a/ChangeLog b/ChangeLog
index 5d95d9f..b62f863 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,353 @@
---------------------------------------------------------------------------
+Version 7.6.1 [v7.6-stable] 2014-03-13
+- added "action.reportSuspension" action parameter
+ This now permits to control handling on a per-action basis rather to
+ the previous "global setting only".
+- "action resumed" message now also specifies module type
+ which makes troubleshooting a bit easier. Note that we cannot output all
+ the config details (like destination etc) as this would require much more
+ elaborate code changes, which we at least do not like to do in the
+ stable version.
+- better and more consistent action naming, action queues now always
+ contain the word "queue" after the action name
+- add support for "tls-less" librelp
+ we now require librelp 1.2.3, as we need the new error code definition
+ See also: https://github.com/rsyslog/librelp/issues/1
+- build system improvements
+ * autoconf subdir option
+ * support for newer json-c packages
+ Thanks to Michael Biebl for the patches.
+- imjournal enhancements:
+ * log entries with empty message field are no longer ignored
+ * invalid facility and severity values are replaced by defaults
+ * new config parameters to set default facility and severity
+ Thanks to Tomas Heinrich for implementing this
+- bugfix: ompipe did resume itself even when it was still in error
+ See: https://github.com/rsyslog/rsyslog/issues/35
+ Thanks to github user schplat for reporting
+- bugfix: "action xxx suspended" did report incorrect error code
+- bugfix: ommongodb's template parameter was mandatory but should have
+ been optional
+ Thanks to Alain for the analysis and the patch.
+- bugfix: only partial doc was put into distribution tarball
+ Thanks to Michael Biebl for alerting us.
+ see also: https://github.com/rsyslog/rsyslog/issues/31
+- bugfix: async ruleset did process already-deleted messages
+ Thanks to John Novotny for the patch.
+---------------------------------------------------------------------------
+Version 7.6.0 [v7.6-stable] 2014-02-12
+This starts a new stable branch based on 7.5.8 plus the following changes:
+- bugfix: imuxsock input parameters were not accepted
+ due to copy&paste error. Thanks to Andy Goldstein for the fix.
+- added ProcessInternalMessages global system parameter
+ This permits to inject rsyslog status messages into *another* main
+ syslogd or the journal.
+- new dependency: liblogging-stdlog (for submitting to external logger)
+- bugfix: json templates are improperly created
+ Strings miss the terminating NUL character, which obviously can lead
+ to all sorts of problems.
+ See also: https://github.com/rsyslog/rsyslog/issues/27
+ Thanks to Alain for the analysis and the patch.
+- ompgsql bugfix: improper handling of auto-backgrounding mode
+ If rsyslog was set to auto-background itself (default code behaviour, but
+ many distros now turn it off for good reason), ompgsql could not
+ properly connect. This could even lead to a segfault. The core reason
+ was that a PG session handle was kept open over a fork, something that
+ is explicitely forbidden in the PG API.
+ Thanks to Alain for the analysis and the patch.
+---------------------------------------------------------------------------
+Version 7.5.8 [v7-release candidate] 2014-01-09
+- add exec_template() RainerScript function
+- add debug.onShutdown and debug.logFile global paramters
+ These enebale the new "debug on shutdown" mode, which can be used to
+ track hard to find problems that occur during system shutdown.
+- Add directives for numerically specifying GIDs/UIDs
+ The already present directives (FileOwner, FileGroup, DirOwner,
+ DirGroup) translate names to numerical IDs, which depends on the user
+ information being available during rsyslog's startup. This can fail if
+ the information is obtained over a network or from a service such as
+ SSSD. The new directives provide a way to specify the numerical IDs
+ directly and bypass the lookup.
+ Thanks to Tomas Heinrich for the patch.
+- actions now report if they suspend and resume themselves
+ this is by default on and controllable by the action.reportSuspension
+ global parameter
+- bugfix: omelasticsearch fail.es stats counter was improperly maintained
+- bugfix: mmrfc5424addhmac: "key" parameter was not properly processed
+- add new impstats action counters:
+ * suspended
+ * suspended.duration
+ * resumed
+---------------------------------------------------------------------------
+Version 7.5.7 [v7-devel] 2013-11-25
+- queue defaults have changed
+ * high water mark is now dynamically 90% of queue size
+ * low water makr is now dynamically 70% of queue size
+ * queue.discardMark is now dynamically 98% of queue size
+ * queue.workerThreadMinimumMessage set to queue.size / num workers
+ For queues with very low queue.maxSize (< 100), "emergency" defaults
+ will be used.
+- worker thread pool handling has been improved
+ Among others, permits pool to actually shrink (was quite hard with
+ previous implementation. This will also improve performance and/or
+ lower system overhead on busy systems.
+ Thanks to Pavel Levshin for the enhancement.
+- bugfix: mmpstrucdata generated inaccessible properties
+- bugfix: RainerScript optimizer did not optimize PRI filters
+ things like "if $syslogfacility-text == "local3"" were not converted
+ to PRIFILT. This was a regression introduced in 7.5.6.
+- bugfix: legacy directive $ActionQueueWorkerThreads was not honored
+- bugfix: segfault on startup when certain script constructs are used
+ e.g. "if not $msg ..."
+- bugfix: ommysql lost configfile/section parameters after first close
+ This means that when a connection was broken, it was probably
+ re-instantiated with different parameters than configured.
+- bugfix: regression in template processing with subtrees in templates
+ Thanks to Pavel Levshin for the fix
+- bugfix: regular worker threads are not properly (re)started if DA
+ mode is active.
+ This occurs only under rare conditions, but definitely is a bug that
+ needed to be addressed. It probably is present since version 4.
+ Note that this patch has not been applied to v7.4-stable, as it
+ is very unlikely to happen and the fix itself has some regression
+ potential (the fix looks very solid, but it addresses a core component).
+ Thanks to Pavel Levshin for the fix
+- now emit warning message if om with msg passing mode uses action queue
+ These can modify the message, and this causes races.
+- bugfix: $SystemLogUseSysTimeStamp/$SystemLogUsePIDFromSystem did not work
+ Thanks to Tomas Heinrich for the patch.
+---------------------------------------------------------------------------
+Version 7.5.6 [devel] 2013-10-29
+- impstats: add capability to bind to a ruleset
+- improved performance of RainerScript variable access
+ by refactoring the whole body of variable handling code. This also
+ solves some of the anomalies experienced in some versions of rsyslog.
+ All variable types are now handled in unified code, including
+ access via templates.
+- RainerScript: make use of 64 bit for numbers where available
+ Thanks to Pavel Levshin for enhancement.
+- slight performance optimization if GCC is used
+ We give branch prediction hints for the frequent RETiRet macro which is
+ used for error handling. Some slight performance gain is to be expected
+ from that.
+- removed global variable support
+ The original idea was not well thought out and global variables, as
+ implemented, worked far different from what anybody would expect. As
+ such, we consider the current approach as an experiment that did not
+ work out and opt to removing it, clearing the way for a better future
+ solution. Note: global vars were introduced in 7.5.3 on Sept, 11th 2013.
+- new module mmsequence, primarily used for action load balancing
+ Thanks to Pavel Levshin for contributing this module.
+- bugfix: unset statement always worked on message var, even if local
+ var was given
+- imudp: support for binding to ruleset added
+- bugfix: segfault if variable was assigned to non-container subtree
+ Thanks to Pavel Levshin for the fix
+- bugfix: imuxsock did not suport addtl sockets if syssock was disabled
+ Thanks to Pavel Levshin for the fix
+- bugfix: running imupd on multiple threads lead to segfault if recvmmsg
+ is available
+- bugfix: imudp when using recvmmsg could report wrong sender IP
+- bugfix: segfault if re_extract() function was used and no match found
+- bugfix: omelasticsearch did not compile on platforms without atomic
+ instructions
+- bugfix: potential misadressing on startup if property-filter was used
+ This could happen if the property name was longer than 127 chars, a case
+ that would not happen in practice.
+- bugfix: invalid property filter was not properly disabled in ruleset
+ Note: the cosmetic memory leak introduced with that patch in 7.4.5 is
+ now also fixed.
+- imported bugfixes from 7.4.6 stable release
+---------------------------------------------------------------------------
+Version 7.5.5 [devel] 2013-10-16
+- imfile: permit to monitor an unlimited number of files
+- imptcp: add "defaultTZ" input parameter
+- imudp: support for multiple receiver threads added
+- imudp: add "dfltTZ" input config parameter
+- bugfix: memory leak in mmnormalize
+- bugfix: mmutf8fix did not properly handle invalid UTF-8 at END of message
+ if the very last character sequence was too long, this was not detected
+ Thanks to Risto Vaarandi for reporting this problem.
+- mmanon: removed the check for specific "terminator characters" after
+ last octet. As it turned out, this didn't work in practice as there
+ was an enormous set of potential terminator chars -- so removing
+ them was the best thing to do. Note that this may change behaviour of
+ existing installations. Yet, we still consider this an important
+ bugfix, that should be applied to the stable branch.
+ closes: http://bugzilla.adiscon.com/show_bug.cgi?id=477
+ Thanks to Muri Cicanor for initiating the discussion
+- now requires libestr 0.1.7 as early versions had a nasty bug in
+ string comparisons
+- bugfix: mmanon did not detect all IP addresses in rewrite mode
+ The problem occured if two IPs were close to each other and the first one
+ was shrunk.
+ closes: http://bugzilla.adiscon.com/show_bug.cgi?id=485
+ Thanks to micah-at-riseup.net for reporting this bug
+- bugfix: mmanon sometimes used invalid replacement char in simple mode
+ depending on configuration sequence, the replacement character was set
+ to 's' instead of the correct value. Most importantly, it was set to
+ 's' if simple mode was selected and no replacement char set.
+ closes: http://bugzilla.adiscon.com/show_bug.cgi?id=484
+ Thanks to micah-at-riseup.net for reporting this bug
+- bugfix: memory leak in mmnormalize
+- bugfix: array-based ==/!= comparisions lead to invalid results
+ This was a regression introduced in 7.3.5 bei the PRI optimizer
+---------------------------------------------------------------------------
+Version 7.5.4 [devel] 2013-10-07
+- mmpstrucdata: new module to parse RFC5424 structured data into json
+ message properties
+- change main/ruleset queue defaults to be more enterprise-like
+ new defaults are queue.size 100,000 max workers 2, worker
+ activation after 40,000 msgs are queued, batch size 256. These settings
+ are much more useful for enterprises and will not hurt low-end systems
+ that much. This is part of our re-focus on enterprise needs.
+- omfwd: new action parameter "maxErrorMessages" added
+- omfile: new module parameters to set action defaults added
+ * dirCreateMode
+ * fileCreateMode
+- mmutf8fix: new module to fix invalid UTF-8 sequences
+- imuxsock: handle unlimited number of additional listen sockets
+- doc: improve usability by linking to relevant web ressources
+ The idea is to enable users to quickly find additional information,
+ samples, HOWTOs and the like on the main site.
+ At the same time, (very) slightly remove memory footprint when
+ few listeners are monitored.
+- bugfix: omfwd parameter streamdrivermmode was not properly handled
+ it was always overwritten by whatever value was set via the
+ legacy directive $ActionSendStreamDriverMode
+- imtcp: add streamdriver.name module parameter
+ permits overriding the system default stream driver (gtls, ptcp)
+- bugfix: build system: libgcrypt.h needed even if libgrcypt was disabled
+ Thanks to Jonny Törnbom for reporting this problem
+- imported bugfixes from 7.4.4
+---------------------------------------------------------------------------
+Version 7.5.3 [devel] 2013-09-11
+- imfile: support for escaping LF characters added
+ embedded LF in syslog messages cause a lot of trouble. imfile now has
+ the capability to escape them to "#012" (just like the regular control
+ character escape option). This requires new-style input statements to be
+ used. If legacy configuration statements are used, LF escaping is always
+ turned off to preserve compatibility.
+ NOTE: if input() statements were already used, there is a CHANGE OF
+ BEHAVIOUR: starting with this version, escaping is enabled by
+ default. So if you do not want it, you need to add
+ escapeLF="off"
+ to the input statement. Given the trouble LFs cause and the fact
+ that the majority of installations still use legacy config, we
+ considered this behaviour change acceptable and useful.
+ see also: http://blog.gerhards.net/2013/09/imfile-multi-line-messages.html
+- add support for global and local variables
+- bugfix: queue file size was not correctly processed
+ this could lead to using one queue file per message for sizes >2GiB
+ Thanks to Tomas Heinrich for the patch.
+- add main_queue() configuration object to configure main message queue
+- bugfix: stream compression in imptcp caused timestamp to be corrupted
+- imudp: add ability to specify SO_RCVBUF size (rcvbufSize parameter)
+- imudp: use inputname for statistics, if configured
+- impstats: add process resource usage counters [via getrusage()]
+- impstats: add paramter "resetCounters" to report delta values
+ possible for most, but not all, counters. See doc for details.
+- librelp 1.2.0 is now required
+- make use of new librelp generic error reporting facility
+ This leads to more error messages being passed to the user and
+ thus simplified troubleshooting.
+- bugfix: very small memory leak in imrelp
+ more or less cosmetic, a single memory block was not freed, but this
+ only happens immediately before termination (when the OS automatically
+ frees all memory). Still an annoyance e.g. in valgrind.
+- fix compile problem in debug build
+- imported fixes from 7.4.4
+---------------------------------------------------------------------------
+Version 7.5.2 [devel] 2013-07-04
+- librelp 1.1.4 is now required
+ We use API extensions for better error reporting and higher performance.
+- omrelp: use transactional mode to make imrelp emit bulk sends
+- omrelp: add "windowSize" parameter to set custom RELP window size
+- bugfix: double-free in omelasticsearch
+ closes: http://bugzilla.adiscon.com/show_bug.cgi?id=461
+ a security advisory for this bug is available at:
+ http://www.lsexperts.de/advisories/lse-2013-07-03.txt
+ CVE: CVE-2013-4758
+ PLEASE NOTE: This issue only existed if omelasticsearch was used
+ in a non-default configuration, where the "errorfile" parameter
+ was specified. Without that parameter set, the bug could not
+ be triggered.
+ Thanks to Markus Vervier and Marius Ionescu for providing a detailled
+ bug report. Special thanks to Markus for coordinating his security
+ advisory with us.
+- doc: fixed various typos
+ closes: http://bugzilla.adiscon.com/show_bug.cgi?id=391
+ Thanks to Georgi Georgiev for the patch.
+---------------------------------------------------------------------------
+Version 7.5.1 [devel] 2013-06-26
+- librelp 1.1.3 is required - older versions can lead to a segfault
+- add mmfields, which among others supports easy parsing of CEF messages
+- omrelp:
+ * new parameter "compression.prioritystring" to control encryption
+ parameters used by GnuTLS
+- imrelp:
+ * new parameter "compression.dhbits" to control the number of
+ bits being used for Diffie-Hellman key generation
+ * new parameter "compression.prioritystring" to control encryption
+ parameters used by GnuTLS
+ * support for impstats added
+ * support for setting permitted peers (client authentication) added
+ * bugfix: potential segfault at startup on invalid config parameters
+- imjournal: imported patches from 7.4.1
+- omprog: add support for command line parameters
+- added experimental TCP stream compression (imptcp only, currently)
+- added BSD-specific syslog facilities
+ * "console"
+ * "bsd_security" - this is called "security" under BSD, but that name
+ was unfortunately already taken by some standard facility. So I
+ did the (hopefully) second-best thing and renamed it a little.
+- imported fixes from 7.4.2 (especially build problems on FreeBSD)
+- bugfix: imptcp did not properly initialize compression status variable
+ could lead to segfault if stream:always compression mode was selected
+---------------------------------------------------------------------------
+Version 7.5.0 [devel] 2013-06-11
+- imrelp: implement "ruleset" module parameter
+- imrelp/omrelp: add TLS & compression (zip) support
+- omrelp: add "rebindInterval" parameter
+- add -S command line option to specify IP address to use for RELP client
+ connections
+ Thanks to Axel Rau for the patch.
+---------------------------------------------------------------------------
+Version 7.4.11 [v7.4-stable] *never released*
+- imjournal enhancements:
+ * log entries with empty message field are no longer ignored
+ * invalid facility and severity values are replaced by defaults
+ * new config parameters to set default facility and severity
+ Thanks to Tomas Heinrich for implementing this
+---------------------------------------------------------------------------
+Version 7.4.10 [v7.4-stable] 2014-02-12
+- bugfix: json templates are improperly created
+ Strings miss the terminating NUL character, which obviously can lead
+ to all sorts of problems.
+ See also: https://github.com/rsyslog/rsyslog/issues/27
+ Thanks to Alain for the analysis and the patch.
+- ompgsql bugfix: improper handling of auto-backgrounding mode
+ If rsyslog was set to auto-background itself (default code behaviour, but
+ many distros now turn it off for good reason), ompgsql could not
+ properly connect. This could even lead to a segfault. The core reason
+ was that a PG session handle was kept open over a fork, something that
+ is explicitely forbidden in the PG API.
+ Thanks to Alain for the analysis and the patch.
+---------------------------------------------------------------------------
+Version 7.4.9 [v7.4-stable] 2014-01-22
+- added ProcessInternalMessages global system parameter
+ This permits to inject rsyslog status messages into *another* main
+ syslogd or the journal.
+- new dependency: liblogging-stdlog (for submitting to external logger)
+- bugfix: imuxsock input parameters were not accepted
+ due to copy&paste error. Thanks to Andy Goldstein for the fix.
+- bugfix: potential double-free in RainerScript equal comparison
+ happens if the left-hand operand is JSON object and the right-hand
+ operand is a non-string that does not convert to a number (for
+ example, it can be another JSON object, probably the only case that
+ could happen in practice). This is very unlikely to be triggered.
+- bugfix: some RainerScript Json(Variable)/string comparisons were wrong
+---------------------------------------------------------------------------
Version 7.4.8 [v7.4-stable] 2014-01-08
- rsgtutil provides better error messages on unfinished signature blocks
- bugfix: guard against control characters in internal (error) messages
diff --git a/Makefile.am b/Makefile.am
index 567b876..6eb7b5b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -241,6 +241,30 @@ if ENABLE_MMANON
SUBDIRS += plugins/mmanon
endif
+if ENABLE_MMUTF8FIX
+SUBDIRS += plugins/mmutf8fix
+endif
+
+if ENABLE_MMCOUNT
+SUBDIRS += plugins/mmcount
+endif
+
+if ENABLE_MMSEQUENCE
+SUBDIRS += plugins/mmsequence
+endif
+
+if ENABLE_MMFIELDS
+SUBDIRS += plugins/mmfields
+endif
+
+if ENABLE_MMPSTRUCDATA
+SUBDIRS += plugins/mmpstrucdata
+endif
+
+if ENABLE_MMRFC5424ADDHMAC
+SUBDIRS += plugins/mmrfc5424addhmac
+endif
+
if ENABLE_ORACLE
SUBDIRS += plugins/omoracle
endif
@@ -290,5 +314,5 @@ DISTCHECK_CONFIGURE_FLAGS= --enable-gssapi_krb5 \
--with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir)
# temporarily disable these checks for make distcheck 2012-09-06 rgerhards
# --enable-extended-tests \
-# --enable-pgsql \
+# --enable-pgsql
ACLOCAL_AMFLAGS = -I m4
diff --git a/Makefile.in b/Makefile.in
index b30910c..60d2eb4 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -85,8 +85,14 @@ sbin_PROGRAMS =
@ENABLE_MMJSONPARSE_TRUE@am__append_42 = plugins/mmjsonparse
@ENABLE_MMAUDIT_TRUE@am__append_43 = plugins/mmaudit
@ENABLE_MMANON_TRUE@am__append_44 = plugins/mmanon
-@ENABLE_ORACLE_TRUE@am__append_45 = plugins/omoracle
-@ENABLE_GUI_TRUE@am__append_46 = java
+@ENABLE_MMUTF8FIX_TRUE@am__append_45 = plugins/mmutf8fix
+@ENABLE_MMCOUNT_TRUE@am__append_46 = plugins/mmcount
+@ENABLE_MMSEQUENCE_TRUE@am__append_47 = plugins/mmsequence
+@ENABLE_MMFIELDS_TRUE@am__append_48 = plugins/mmfields
+@ENABLE_MMPSTRUCDATA_TRUE@am__append_49 = plugins/mmpstrucdata
+@ENABLE_MMRFC5424ADDHMAC_TRUE@am__append_50 = plugins/mmrfc5424addhmac
+@ENABLE_ORACLE_TRUE@am__append_51 = plugins/omoracle
+@ENABLE_GUI_TRUE@am__append_52 = java
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
@@ -231,6 +237,8 @@ DIST_SUBDIRS = doc compat runtime grammar . plugins/immark \
plugins/imptcp plugins/imttcp plugins/imdiag plugins/ommail \
plugins/omprog plugins/im3195 plugins/mmnormalize \
plugins/mmjsonparse plugins/mmaudit plugins/mmanon \
+ plugins/mmutf8fix plugins/mmcount plugins/mmsequence \
+ plugins/mmfields plugins/mmpstrucdata plugins/mmrfc5424addhmac \
plugins/omoracle java tests
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
@@ -337,6 +345,8 @@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBLOGGING_CFLAGS = @LIBLOGGING_CFLAGS@
LIBLOGGING_LIBS = @LIBLOGGING_LIBS@
+LIBLOGGING_STDLOG_CFLAGS = @LIBLOGGING_STDLOG_CFLAGS@
+LIBLOGGING_STDLOG_LIBS = @LIBLOGGING_STDLOG_LIBS@
LIBLOGNORM_CFLAGS = @LIBLOGNORM_CFLAGS@
LIBLOGNORM_LIBS = @LIBLOGNORM_LIBS@
LIBM = @LIBM@
@@ -361,6 +371,8 @@ NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
+OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
+OPENSSL_LIBS = @OPENSSL_LIBS@
ORACLE_CFLAGS = @ORACLE_CFLAGS@
ORACLE_LIBS = @ORACLE_LIBS@
OTOOL = @OTOOL@
@@ -532,7 +544,9 @@ SUBDIRS = doc compat runtime grammar . plugins/immark plugins/imuxsock \
$(am__append_37) $(am__append_38) $(am__append_39) \
$(am__append_40) $(am__append_41) $(am__append_42) \
$(am__append_43) $(am__append_44) $(am__append_45) \
- $(am__append_46) tests
+ $(am__append_46) $(am__append_47) $(am__append_48) \
+ $(am__append_49) $(am__append_50) $(am__append_51) \
+ $(am__append_52) tests
# make sure "make distcheck" tries to build all modules. This means that
# a developer must always have an environment where every supporting library
@@ -569,6 +583,10 @@ DISTCHECK_CONFIGURE_FLAGS = --enable-gssapi_krb5 \
--enable-valgrind \
--with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir)
+# temporarily disable these checks for make distcheck 2012-09-06 rgerhards
+# --enable-extended-tests \
+# --enable-pgsql
+ACLOCAL_AMFLAGS = -I m4
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
@@ -716,22 +734,25 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lmtcpsrv_la-tcpsrv.Plo@am__quote@
.c.o:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
@@ -1257,10 +1278,6 @@ uninstall-am: uninstall-nodist_systemdsystemunitDATA \
@HAVE_SYSTEMD_TRUE@%.service: %.service.in
@HAVE_SYSTEMD_TRUE@ $(AM_V_GEN)sed -e 's,@sbindir\@,$(sbindir),g' $< > $@
-# temporarily disable these checks for make distcheck 2012-09-06 rgerhards
-# --enable-extended-tests \
-# --enable-pgsql \
-#ACLOCAL_AMFLAGS = -I m4
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/README b/README
index 3ac466d..eb8c158 100644
--- a/README
+++ b/README
@@ -1,61 +1 @@
-rsyslog - what's it?
-====================
-
-rsyslog is a high-performance, modular system event processor. While it started
-as a regular syslogd, it has evolved into a kind of swiss army knife of logging,
-being able to accept inputs from a wide variety of sources, transform them, and
-output to the results to diverse destinations.
-
-Rsyslog can deliver over one million messages (V7, December 2013) to local
-destinations when limited processing is applied. Even with remote destinations
-and more elaborate processing the performance is usually considered "stunning".
-
-Project Philosophy
-==================
-We are an open source project in all aspects and very open to outside feedback
-and contribution. We base our work on standards and try to solve all real-world
-needs (of course, we occasionally fail tackeling actually all needs ;)). While
-the project is primarily sponsored by Adiscon, technical development is
-independent from company goals and most decisions are solely based on mailing
-list discussion results. There is an active commuity around rsyslog.
-
-There is no such thing like being an official member of the rsyslog team. The
-closest to that is being subscribed to the mailing list:
- http://lists.adiscon.net/mailman/listinfo/rsyslog
-
-This method of open discussions is modelled after the IETF process, which is
-probably the best-known and most successive collaborative standards body.
-
-Project Funding
-===============
-Rsyslog's main sponsor Adiscon tries to fund rsyslog by selling custom
-development and support contracts. Adiscon does NOT license rsyslog under a
-commercial license (this is simply impossible for anyone due to rsyslog's
-license structure).
-
-Any third party is obviously also free to offer custom development, support
-and rsyslog consulting. We gladly merge result of such third-party work into
-the main repository (assuming it matches the few essential things written
-down in our contribution policy).
-
-Contributions
-=============
-Contributions to rsyslog are very welcome. To learn more about how
-to contribute, please visit
- http://www.rsyslog.com/how-to-contribute-to-rsyslog/
-
-Note that the rsyslog team usually has a very long todo list. Help
-with that list is much appreicated.
-
-Documentation
-=============
-The main rsyslog documenation is available in html format. To read
-it, point your web browser to ./doc/manual.html. Alternatively,
-you can view the documentation for *the most recent rsyslog version*
-online at
- http://www.rsyslog.com/doc
-
-Development Model
-=================
-Rsyslog uses the integration manager workflow as described here:
- http://git-scm.com/book/en/Distributed-Git-Distributed-Workflows
+see README.md
diff --git a/action.c b/action.c
index 3961159..d16269d 100644
--- a/action.c
+++ b/action.c
@@ -69,7 +69,7 @@
* beast.
* rgerhards, 2011-06-15
*
- * Copyright 2007-2011 Rainer Gerhards and Adiscon GmbH.
+ * Copyright 2007-2013 Rainer Gerhards and Adiscon GmbH.
*
* This file is part of rsyslog.
*
@@ -114,6 +114,7 @@
#include "unicode-helper.h"
#include "atomic.h"
#include "ruleset.h"
+#include "parserif.h"
#include "statsobj.h"
#define NO_TIME_PROVIDED 0 /* indicate we do not provide any cached time */
@@ -179,6 +180,8 @@ configSettings_t cs_save; /* our saved (scope!) config settings */
* counting. -- rgerhards, 2008-01-29
*/
static int iActionNbr = 0;
+int bActionReportSuspension = 1;
+int bActionReportSuspensionCont = 0;
/* tables for interfacing with the v6 config system */
static struct cnfparamdescr cnfparamdescr[] = {
@@ -191,6 +194,8 @@ static struct cnfparamdescr cnfparamdescr[] = {
{ "action.execonlywhenpreviousissuspended", eCmdHdlrBinary, 0 }, /* legacy: actionexeconlywhenpreviousissuspended */
{ "action.repeatedmsgcontainsoriginalmsg", eCmdHdlrBinary, 0 }, /* legacy: repeatedmsgcontainsoriginalmsg */
{ "action.resumeretrycount", eCmdHdlrInt, 0 }, /* legacy: actionresumeretrycount */
+ { "action.reportsuspension", eCmdHdlrBinary, 0 },
+ { "action.reportsuspensioncontinuation", eCmdHdlrBinary, 0 },
{ "action.resumeinterval", eCmdHdlrInt, 0 }
};
static struct cnfparamblk pblk =
@@ -253,8 +258,8 @@ actionResetQueueParams(void)
cs.ActionQueType = QUEUETYPE_DIRECT; /* type of the main message queue above */
cs.iActionQueueSize = 1000; /* size of the main message queue above */
cs.iActionQueueDeqBatchSize = 16; /* default batch size */
- cs.iActionQHighWtrMark = 800; /* high water mark for disk-assisted queues */
- cs.iActionQLowWtrMark = 200; /* low water mark for disk-assisted queues */
+ cs.iActionQHighWtrMark = -1; /* high water mark for disk-assisted queues */
+ cs.iActionQLowWtrMark = -1; /* low water mark for disk-assisted queues */
cs.iActionQDiscardMark = 980; /* begin to discard messages */
cs.iActionQDiscardSeverity = 8; /* discard warning and above */
cs.iActionQueueNumWorkers = 1; /* number of worker threads for the mm queue above */
@@ -265,7 +270,7 @@ actionResetQueueParams(void)
cs.iActionQtoActShutdown = 1000; /* action shutdown (in phase 2) */
cs.iActionQtoEnq = 50; /* timeout for queue enque */
cs.iActionQtoWrkShutdown = 60000; /* timeout for worker thread shutdown */
- cs.iActionQWrkMinMsgs = 100; /* minimum messages per worker needed to start a new one */
+ cs.iActionQWrkMinMsgs = -1; /* minimum messages per worker needed to start a new one */
cs.bActionQSaveOnShutdown = 1; /* save queue on shutdown (when DA enabled)? */
cs.iActionQueMaxDiskSpace = 0;
cs.iActionQueueDeqSlowdown = 0;
@@ -340,6 +345,9 @@ rsRetVal actionConstruct(action_t **ppThis)
pThis->iSecsExecOnceInterval = 0;
pThis->bExecWhenPrevSusp = 0;
pThis->bRepMsgHasMsg = 0;
+ pThis->bReportSuspension = -1; /* indicate "not yet set" */
+ pThis->bReportSuspensionCont = -1; /* indicate "not yet set" */
+ pThis->bJustResumed = 0;
pThis->tLastOccur = datetime.GetTime(NULL); /* done once per action on startup only */
pthread_mutex_init(&pThis->mutActExec, NULL);
pthread_mutex_init(&pThis->mutAction, NULL);
@@ -357,7 +365,7 @@ finalize_it:
/* action construction finalizer
*/
rsRetVal
-actionConstructFinalize(action_t *pThis, struct cnfparamvals *queueParams)
+actionConstructFinalize(action_t *pThis, struct nvlst *lst)
{
DEFiRet;
uchar pszAName[64]; /* friendly name of our action */
@@ -371,35 +379,40 @@ actionConstructFinalize(action_t *pThis, struct cnfparamvals *queueParams)
/* generate a friendly name for us action stats */
if(pThis->pszName == NULL) {
snprintf((char*) pszAName, sizeof(pszAName)/sizeof(uchar), "action %d", iActionNbr);
- } else {
- ustrncpy(pszAName, pThis->pszName, sizeof(pszAName));
- pszAName[sizeof(pszAName)-1] = '\0'; /* to be on the save side */
+ pThis->pszName = ustrdup(pszAName);
}
/* support statistics gathering */
CHKiRet(statsobj.Construct(&pThis->statsobj));
- CHKiRet(statsobj.SetName(pThis->statsobj, pszAName));
+ CHKiRet(statsobj.SetName(pThis->statsobj, pThis->pszName));
STATSCOUNTER_INIT(pThis->ctrProcessed, pThis->mutCtrProcessed);
CHKiRet(statsobj.AddCounter(pThis->statsobj, UCHAR_CONSTANT("processed"),
- ctrType_IntCtr, &pThis->ctrProcessed));
+ ctrType_IntCtr, CTR_FLAG_RESETTABLE, &pThis->ctrProcessed));
STATSCOUNTER_INIT(pThis->ctrFail, pThis->mutCtrFail);
CHKiRet(statsobj.AddCounter(pThis->statsobj, UCHAR_CONSTANT("failed"),
- ctrType_IntCtr, &pThis->ctrFail));
+ ctrType_IntCtr, CTR_FLAG_RESETTABLE, &pThis->ctrFail));
+
+ STATSCOUNTER_INIT(pThis->ctrSuspend, pThis->mutCtrSuspend);
+ CHKiRet(statsobj.AddCounter(pThis->statsobj, UCHAR_CONSTANT("suspended"),
+ ctrType_IntCtr, CTR_FLAG_RESETTABLE, &pThis->ctrSuspend));
+ STATSCOUNTER_INIT(pThis->ctrSuspendDuration, pThis->mutCtrSuspendDuration);
+ CHKiRet(statsobj.AddCounter(pThis->statsobj, UCHAR_CONSTANT("suspended.duration"),
+ ctrType_IntCtr, 0, &pThis->ctrSuspendDuration));
+
+ STATSCOUNTER_INIT(pThis->ctrResume, pThis->mutCtrResume);
+ CHKiRet(statsobj.AddCounter(pThis->statsobj, UCHAR_CONSTANT("resumed"),
+ ctrType_IntCtr, CTR_FLAG_RESETTABLE, &pThis->ctrResume));
CHKiRet(statsobj.ConstructFinalize(pThis->statsobj));
/* create our queue */
/* generate a friendly name for the queue */
- if(pThis->pszName == NULL) {
- snprintf((char*) pszAName, sizeof(pszAName)/sizeof(uchar), "action %d queue",
- iActionNbr);
- } else {
- ustrncpy(pszAName, pThis->pszName, sizeof(pszAName));
- pszAName[63] = '\0'; /* to be on the save side */
- }
+ snprintf((char*) pszAName, sizeof(pszAName)/sizeof(uchar), "%s queue",
+ pThis->pszName);
+
/* now check if we can run the action in "firehose mode" during stage one of
* its processing (that is before messages are enqueued into the action q).
* This is only possible if some features, which require strict sequence, are
@@ -432,7 +445,7 @@ actionConstructFinalize(action_t *pThis, struct cnfparamvals *queueParams)
obj.SetName((obj_t*) pThis->pQueue, pszAName);
qqueueSetpAction(pThis->pQueue, pThis);
- if(queueParams == NULL) { /* use legacy params? */
+ if(lst == NULL) { /* use legacy params? */
/* ... set some properties ... */
# define setQPROP(func, directive, data) \
CHKiRet_Hdlr(func(pThis->pQueue, data)) { \
@@ -467,7 +480,7 @@ actionConstructFinalize(action_t *pThis, struct cnfparamvals *queueParams)
} else {
/* we have v6-style config params */
qqueueSetDefaultsActionQueue(pThis->pQueue);
- qqueueApplyCnfParam(pThis->pQueue, queueParams);
+ qqueueApplyCnfParam(pThis->pQueue, lst);
}
# undef setQPROP
@@ -476,6 +489,12 @@ actionConstructFinalize(action_t *pThis, struct cnfparamvals *queueParams)
qqueueDbgPrint(pThis->pQueue);
DBGPRINTF("Action %p: queue %p created\n", pThis, pThis->pQueue);
+
+ if(pThis->eParamPassing == ACT_MSG_PASSING && pThis->pQueue->qType != QUEUETYPE_DIRECT) {
+ parser_warnmsg("module %s with message passing mode uses "
+ "non-direct queue. This most probably leads to undesired "
+ "results", (char*)modGetName(pThis->pMod));
+ }
/* and now reset the queue params (see comment in its function header!) */
actionResetQueueParams();
@@ -598,7 +617,7 @@ static void actionDisable(action_t *pThis)
}
-/* Suspend action, this involves changing the acton state as well
+/* Suspend action, this involves changing the action state as well
* as setting the next retry time.
* if we have more than 10 retries, we prolong the
* retry interval. If something is really stalled, it will
@@ -606,17 +625,48 @@ static void actionDisable(action_t *pThis)
* CPU time. TODO: maybe a config option for that?
* rgerhards, 2007-08-02
*/
-static inline void actionSuspend(action_t *pThis)
+static inline void
+actionSuspend(action_t * const pThis)
{
time_t ttNow;
+ int suspendDuration;
+ char timebuf[32];
+
+ /* we need to defer setting the action's own bReportSuspension state until
+ * after the full config has been processed. So the most simple case to do
+ * that is here. It's not a performance problem, as it happens infrequently.
+ * it's not a threading race problem, as always the same value will be written.
+ */
+ if(pThis->bReportSuspension == -1)
+ pThis->bReportSuspension = bActionReportSuspension;
+ if(pThis->bReportSuspensionCont == -1) {
+ pThis->bReportSuspensionCont = bActionReportSuspensionCont;
+ if(pThis->bReportSuspensionCont == -1)
+ pThis->bReportSuspension = 1;
+ }
/* note: we can NOT use a cached timestamp, as time may have evolved
* since caching, and this would break logic (and it actually did so!)
*/
datetime.GetTime(&ttNow);
- pThis->ttResumeRtry = ttNow + pThis->iResumeInterval * (pThis->iNbrResRtry / 10 + 1);
+ suspendDuration = pThis->iResumeInterval * (pThis->iNbrResRtry / 10 + 1);
+ pThis->ttResumeRtry = ttNow + suspendDuration;
actionSetState(pThis, ACT_STATE_SUSP);
- DBGPRINTF("action suspended, earliest retry=%d\n", (int) pThis->ttResumeRtry);
+ pThis->ctrSuspendDuration += suspendDuration;
+ if(pThis->iNbrResRtry == 0) {
+ STATSCOUNTER_INC(pThis->ctrSuspend, pThis->mutCtrSuspend);
+ }
+ if( pThis->bReportSuspensionCont
+ || (pThis->bReportSuspension && pThis->iNbrResRtry == 0) ) {
+ ctime_r(&pThis->ttResumeRtry, timebuf);
+ timebuf[strlen(timebuf)-1] = '\0'; /* strip LF */
+ errmsg.LogMsg(0, RS_RET_SUSPENDED, LOG_WARNING,
+ "action '%s' suspended, next retry is %s",
+ pThis->pszName, timebuf);
+ }
+ DBGPRINTF("action '%s' suspended, earliest retry=%lld (now %lld), iNbrResRtry %d\n",
+ pThis->pszName, (long long) pThis->ttResumeRtry, (long long) ttNow,
+ pThis->iNbrResRtry);
}
@@ -647,9 +697,9 @@ actionDoRetry(action_t *pThis, int *pbShutdownImmediate)
iRetries = 0;
while((*pbShutdownImmediate == 0) && pThis->eState == ACT_STATE_RTRY) {
- DBGPRINTF("actionDoRetry: enter loop, iRetries=%d\n", iRetries);
+ DBGPRINTF("actionDoRetry: %s enter loop, iRetries=%d\n", pThis->pszName, iRetries);
iRet = pThis->pMod->tryResume(pThis->pModData);
- DBGPRINTF("actionDoRetry: action->tryResume returned %d\n", iRet);
+ DBGPRINTF("actionDoRetry: %s action->tryResume returned %d\n", pThis->pszName, iRet);
if((pThis->iResumeOKinRow > 9) && (pThis->iResumeOKinRow % 10 == 0)) {
bTreatOKasSusp = 1;
pThis->iResumeOKinRow = 0;
@@ -657,16 +707,20 @@ actionDoRetry(action_t *pThis, int *pbShutdownImmediate)
bTreatOKasSusp = 0;
}
if((iRet == RS_RET_OK) && (!bTreatOKasSusp)) {
- DBGPRINTF("actionDoRetry: had success RDY again (iRet=%d)\n", iRet);
+ DBGPRINTF("actionDoRetry: %s had success RDY again (iRet=%d)\n",
+ pThis->pszName, iRet);
+ pThis->bJustResumed = 1;
actionSetState(pThis, ACT_STATE_RDY);
} else if(iRet == RS_RET_SUSPENDED || bTreatOKasSusp) {
/* max retries reached? */
- DBGPRINTF("actionDoRetry: check for max retries, iResumeRetryCount %d, iRetries %d\n",
- pThis->iResumeRetryCount, iRetries);
+ DBGPRINTF("actionDoRetry: %s check for max retries, iResumeRetryCount "
+ "%d, iRetries %d\n",
+ pThis->pszName, pThis->iResumeRetryCount, iRetries);
if((pThis->iResumeRetryCount != -1 && iRetries >= pThis->iResumeRetryCount)) {
actionSuspend(pThis);
+ if(pThis->iNbrResRtry < 20)
+ ++pThis->iNbrResRtry;
} else {
- ++pThis->iNbrResRtry;
++iRetries;
iSleepPeriod = pThis->iResumeInterval;
srSleep(iSleepPeriod, 0);
@@ -901,6 +955,25 @@ static rsRetVal releaseBatch(action_t *pAction, batch_t *pBatch)
done: RETiRet;
}
+/* This is used in resume processing. We only finally know that a resume
+ * worked when we have been able to actually process a messages. As such,
+ * we need to do some cleanup and status tracking in that case.
+ */
+static void
+actionSetActionWorked(action_t *__restrict__ const pThis)
+{
+ pThis->iResumeOKinRow = 0; /* we had a successful call! */
+
+ if(pThis->bJustResumed) {
+ /* OK, we *really* could resume, so tell user! */
+ if(pThis->bReportSuspension) {
+ errmsg.LogMsg(0, RS_RET_RESUMED, LOG_INFO, "action '%s' "
+ "resumed (module '%s')",
+ pThis->pszName, pThis->pMod->pszName);
+ }
+ pThis->bJustResumed = 0;
+ }
+}
/* call the DoAction output plugin entry point
* rgerhards, 2008-01-28
@@ -920,16 +993,16 @@ actionCallDoAction(action_t *pThis, msg_t *pMsg, void *actParams)
switch(iRet) {
case RS_RET_OK:
actionCommitted(pThis);
- pThis->iResumeOKinRow = 0; /* we had a successful call! */
+ actionSetActionWorked(pThis); /* we had a successful call! */
break;
case RS_RET_DEFER_COMMIT:
- pThis->iResumeOKinRow = 0; /* we had a successful call! */
+ actionSetActionWorked(pThis); /* we had a successful call! */
/* we are done, action state remains the same */
break;
case RS_RET_PREVIOUS_COMMITTED:
/* action state remains the same, but we had a commit. */
pThis->bHadAutoCommit = 1;
- pThis->iResumeOKinRow = 0; /* we had a successful call! */
+ actionSetActionWorked(pThis); /* we had a successful call! */
break;
case RS_RET_SUSPENDED:
actionRetry(pThis);
@@ -1770,6 +1843,10 @@ actionApplyCnfParam(action_t *pAction, struct cnfparamvals *pvals)
pAction->bRepMsgHasMsg = pvals[i].val.d.n;
} else if(!strcmp(pblk.descr[i].name, "action.resumeretrycount")) {
pAction->iResumeRetryCount = pvals[i].val.d.n;
+ } else if(!strcmp(pblk.descr[i].name, "action.reportsuspension")) {
+ pAction->bReportSuspension = (int) pvals[i].val.d.n;
+ } else if(!strcmp(pblk.descr[i].name, "action.reportsuspensioncontinuation")) {
+ pAction->bReportSuspensionCont = (int) pvals[i].val.d.n;
} else if(!strcmp(pblk.descr[i].name, "action.resumeinterval")) {
pAction->iResumeInterval = pvals[i].val.d.n;
} else {
@@ -1789,7 +1866,7 @@ actionApplyCnfParam(action_t *pAction, struct cnfparamvals *pvals)
rsRetVal
addAction(action_t **ppAction, modInfo_t *pMod, void *pModData,
omodStringRequest_t *pOMSR, struct cnfparamvals *actParams,
- struct cnfparamvals *queueParams, int bSuspended)
+ struct nvlst *lst, int bSuspended)
{
DEFiRet;
int i;
@@ -1882,7 +1959,7 @@ addAction(action_t **ppAction, modInfo_t *pMod, void *pModData,
if(bSuspended)
actionSuspend(pAction);
- CHKiRet(actionConstructFinalize(pAction, queueParams));
+ CHKiRet(actionConstructFinalize(pAction, lst));
/* TODO: if we exit here, we have a memory leak... */
@@ -1941,26 +2018,19 @@ rsRetVal
actionNewInst(struct nvlst *lst, action_t **ppAction)
{
struct cnfparamvals *paramvals;
- struct cnfparamvals *queueParams;
modInfo_t *pMod;
uchar *cnfModName = NULL;
omodStringRequest_t *pOMSR;
void *pModData;
action_t *pAction;
- int typeIdx;
DEFiRet;
paramvals = nvlstGetParams(lst, &pblk, NULL);
if(paramvals == NULL) {
- ABORT_FINALIZE(RS_RET_ERR);
+ ABORT_FINALIZE(RS_RET_PARAM_ERROR);
}
dbgprintf("action param blk after actionNewInst:\n");
cnfparamsPrint(&pblk, paramvals);
- typeIdx = cnfparamGetIdx(&pblk, "type");
- if(paramvals[typeIdx].bUsed == 0) {
- errmsg.LogError(0, RS_RET_CONF_RQRD_PARAM_MISSING, "action type missing");
- ABORT_FINALIZE(RS_RET_CONF_RQRD_PARAM_MISSING); // TODO: move this into rainerscript handlers
- }
cnfModName = (uchar*)es_str2cstr(paramvals[cnfparamGetIdx(&pblk, ("type"))].val.d.estr, NULL);
if((pMod = module.FindWithCnfName(loadConf, cnfModName, eMOD_OUT)) == NULL) {
errmsg.LogError(0, RS_RET_MOD_UNKNOWN, "module name '%s' is unknown", cnfModName);
@@ -1972,9 +2042,7 @@ actionNewInst(struct nvlst *lst, action_t **ppAction)
FINALIZE; /* iRet is already set to error state */
}
- qqueueDoCnfParams(lst, &queueParams);
-
- if((iRet = addAction(&pAction, pMod, pModData, pOMSR, paramvals, queueParams,
+ if((iRet = addAction(&pAction, pMod, pModData, pOMSR, paramvals, lst,
(iRet == RS_RET_SUSPENDED)? 1 : 0)) == RS_RET_OK) {
/* check if the module is compatible with select features
* (currently no such features exist) */
diff --git a/action.h b/action.h
index dfafe30..54c9b77 100644
--- a/action.h
+++ b/action.h
@@ -28,11 +28,10 @@
#include "syslogd-types.h"
#include "queue.h"
-/* external data - this is to be removed when we change the action
- * object interface (will happen some time..., at latest when the
- * config file format is changed). -- rgerhards, 2008-01-28
- */
+/* external data */
extern int glbliActionResumeRetryCount;
+extern int bActionReportSuspension;
+extern int bActionReportSuspensionCont;
typedef enum {
@@ -53,6 +52,9 @@ struct action_s {
time_t tLastExec; /* time this action was last executed */
sbool bExecWhenPrevSusp;/* execute only when previous action is suspended? */
sbool bWriteAllMarkMsgs;/* should all mark msgs be written (not matter how recent the action was executed)? */
+ sbool bReportSuspension;/* should suspension (and reactivation) of the action reported */
+ sbool bReportSuspensionCont;
+ sbool bJustResumed; /* set when tryResume returned OK, but no message yet actually written */
int iSecsExecOnceInterval; /* if non-zero, minimum seconds to wait until action is executed again */
action_state_t eState; /* current state of action */
sbool bHadAutoCommit; /* did an auto-commit happen during doAction()? */
@@ -79,19 +81,22 @@ struct action_s {
qqueue_t *pQueue; /* action queue */
pthread_mutex_t mutAction; /* primary action mutex */
pthread_mutex_t mutActExec; /* mutex to guard actual execution of doAction for single-threaded modules */
- uchar *pszName; /* action name (for documentation) */
+ uchar *pszName; /* action name */
DEF_ATOMIC_HELPER_MUT(mutCAS);
/* for statistics subsystem */
statsobj_t *statsobj;
STATSCOUNTER_DEF(ctrProcessed, mutCtrProcessed);
STATSCOUNTER_DEF(ctrFail, mutCtrFail);
+ STATSCOUNTER_DEF(ctrSuspend, mutCtrSuspend);
+ STATSCOUNTER_DEF(ctrSuspendDuration, mutCtrSuspendDuration);
+ STATSCOUNTER_DEF(ctrResume, mutCtrResume);
};
/* function prototypes
*/
rsRetVal actionConstruct(action_t **ppThis);
-rsRetVal actionConstructFinalize(action_t *pThis, struct cnfparamvals *queueParams);
+rsRetVal actionConstructFinalize(action_t *pThis, struct nvlst *lst);
rsRetVal actionDestruct(action_t *pThis);
rsRetVal actionDbgPrint(action_t *pThis);
rsRetVal actionSetGlobalResumeInterval(int iNewVal);
@@ -99,7 +104,7 @@ rsRetVal actionDoAction(action_t *pAction);
rsRetVal actionWriteToAction(action_t *pAction, msg_t *pMsg);
rsRetVal actionCallHUPHdlr(action_t *pAction);
rsRetVal actionClassInit(void);
-rsRetVal addAction(action_t **ppAction, modInfo_t *pMod, void *pModData, omodStringRequest_t *pOMSR, struct cnfparamvals *actParams, struct cnfparamvals *queueParams, int bSuspended);
+rsRetVal addAction(action_t **ppAction, modInfo_t *pMod, void *pModData, omodStringRequest_t *pOMSR, struct cnfparamvals *actParams, struct nvlst *lst, int bSuspended);
rsRetVal activateActions(void);
rsRetVal actionNewInst(struct nvlst *lst, action_t **ppAction);
rsRetVal actionProcessCnf(struct cnfobj *o);
diff --git a/compat/Makefile.in b/compat/Makefile.in
index 35efead..ecc8220 100644
--- a/compat/Makefile.in
+++ b/compat/Makefile.in
@@ -155,6 +155,8 @@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBLOGGING_CFLAGS = @LIBLOGGING_CFLAGS@
LIBLOGGING_LIBS = @LIBLOGGING_LIBS@
+LIBLOGGING_STDLOG_CFLAGS = @LIBLOGGING_STDLOG_CFLAGS@
+LIBLOGGING_STDLOG_LIBS = @LIBLOGGING_STDLOG_LIBS@
LIBLOGNORM_CFLAGS = @LIBLOGNORM_CFLAGS@
LIBLOGNORM_LIBS = @LIBLOGNORM_LIBS@
LIBM = @LIBM@
@@ -179,6 +181,8 @@ NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
+OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
+OPENSSL_LIBS = @OPENSSL_LIBS@
ORACLE_CFLAGS = @ORACLE_CFLAGS@
ORACLE_LIBS = @ORACLE_LIBS@
OTOOL = @OTOOL@
@@ -337,22 +341,25 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compat_la-getifaddrs.Plo@am__quote@
.c.o:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
diff --git a/config.h.in b/config.h.in
index 1eab168..55166f6 100644
--- a/config.h.in
+++ b/config.h.in
@@ -36,6 +36,9 @@
/* Define to 1 if you have the `basename' function. */
#undef HAVE_BASENAME
+/* Define to 1 if compiler supports __builtin_expect */
+#undef HAVE_BUILTIN_EXPECT
+
/* Define to 1 if your system has a working `chown' function. */
#undef HAVE_CHOWN
@@ -100,9 +103,15 @@
/* Define to 1 if you have the header file. */
#undef HAVE_INTTYPES_H
+/* Define to 1 if you have the `json_object_new_int64' function. */
+#undef HAVE_JSON_OBJECT_NEW_INT64
+
/* Define to 1 if you have the header file. */
#undef HAVE_LIBGEN_H
+/* Define to 1 if you have the `json-c' library (-ljson-c). */
+#undef HAVE_LIBJSON_C
+
/* Define to 1 if you have the header file. */
#undef HAVE_LIBNET_H
@@ -162,6 +171,9 @@
and to 0 otherwise. */
#undef HAVE_REALLOC
+/* Define to 1 if you have the `recvmmsg' function. */
+#undef HAVE_RECVMMSG
+
/* Define to 1 if you have the `regcomp' function. */
#undef HAVE_REGCOMP
diff --git a/configure b/configure
index 255cdb5..324913f 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for rsyslog 7.4.8.
+# Generated by GNU Autoconf 2.68 for rsyslog 7.6.1.
#
# Report bugs to .
#
@@ -570,8 +570,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='rsyslog'
PACKAGE_TARNAME='rsyslog'
-PACKAGE_VERSION='7.4.8'
-PACKAGE_STRING='rsyslog 7.4.8'
+PACKAGE_VERSION='7.6.1'
+PACKAGE_STRING='rsyslog 7.6.1'
PACKAGE_BUGREPORT='rsyslog@lists.adiscon.com'
PACKAGE_URL=''
@@ -690,6 +690,20 @@ ENABLE_RELP_FALSE
ENABLE_RELP_TRUE
RELP_LIBS
RELP_CFLAGS
+ENABLE_MMRFC5424ADDHMAC_FALSE
+ENABLE_MMRFC5424ADDHMAC_TRUE
+OPENSSL_LIBS
+OPENSSL_CFLAGS
+ENABLE_MMPSTRUCDATA_FALSE
+ENABLE_MMPSTRUCDATA_TRUE
+ENABLE_MMFIELDS_FALSE
+ENABLE_MMFIELDS_TRUE
+ENABLE_MMSEQUENCE_FALSE
+ENABLE_MMSEQUENCE_TRUE
+ENABLE_MMCOUNT_FALSE
+ENABLE_MMCOUNT_TRUE
+ENABLE_MMUTF8FIX_FALSE
+ENABLE_MMUTF8FIX_TRUE
ENABLE_MMANON_FALSE
ENABLE_MMANON_TRUE
ENABLE_MMAUDIT_FALSE
@@ -802,6 +816,8 @@ RT_LIBS
SOL_LIBS
JSON_C_LIBS
JSON_C_CFLAGS
+LIBLOGGING_STDLOG_LIBS
+LIBLOGGING_STDLOG_CFLAGS
LIBESTR_LIBS
LIBESTR_CFLAGS
PKG_CONFIG_LIBDIR
@@ -977,6 +993,12 @@ enable_mmnormalize
enable_mmjsonparse
enable_mmaudit
enable_mmanon
+enable_mmutf8fix
+enable_mmcount
+enable_mmsequence
+enable_mmfields
+enable_mmpstrucdata
+enable_mmrfc5424addhmac
enable_relp
enable_guardtime
enable_cached_man_pages
@@ -1024,6 +1046,8 @@ PKG_CONFIG_PATH
PKG_CONFIG_LIBDIR
LIBESTR_CFLAGS
LIBESTR_LIBS
+LIBLOGGING_STDLOG_CFLAGS
+LIBLOGGING_STDLOG_LIBS
JSON_C_CFLAGS
JSON_C_LIBS
LIBSYSTEMD_JOURNAL_CFLAGS
@@ -1038,6 +1062,8 @@ LIBEE_CFLAGS
LIBEE_LIBS
LIBLOGNORM_CFLAGS
LIBLOGNORM_LIBS
+OPENSSL_CFLAGS
+OPENSSL_LIBS
RELP_CFLAGS
RELP_LIBS
GUARDTIME_CFLAGS
@@ -1594,7 +1620,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures rsyslog 7.4.8 to adapt to many kinds of systems.
+\`configure' configures rsyslog 7.6.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1664,7 +1690,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of rsyslog 7.4.8:";;
+ short | recursive ) echo "Configuration of rsyslog 7.6.1:";;
esac
cat <<\_ACEOF
@@ -1722,6 +1748,14 @@ Optional Features:
--enable-mmjsonparse Enable building mmjsonparse support [default=no]
--enable-mmaudit Enable building mmaudit support [default=no]
--enable-mmanon Enable building mmanon support [default=no]
+ --enable-mmutf8fix Enable building mmutf8fix support [default=no]
+ --enable-mmcount Enable message counting [default=no]
+ --enable-mmsequence Enable sequence generator [default=no]
+ --enable-mmfields Enable building mmfields support [default=no]
+ --enable-mmpstrucdata Enable building mmpstrucdata support [default=no]
+ --enable-mmrfc5424addhmac
+ Enable building mmrfc5424addhmac support
+ [default=no]
--enable-relp Enable RELP support [default=no]
--enable-guardtime Enable log file signing support (via GuardTime)
[default=no]
@@ -1795,6 +1829,10 @@ Some influential environment variables:
C compiler flags for LIBESTR, overriding pkg-config
LIBESTR_LIBS
linker flags for LIBESTR, overriding pkg-config
+ LIBLOGGING_STDLOG_CFLAGS
+ C compiler flags for LIBLOGGING_STDLOG, overriding pkg-config
+ LIBLOGGING_STDLOG_LIBS
+ linker flags for LIBLOGGING_STDLOG, overriding pkg-config
JSON_C_CFLAGS
C compiler flags for JSON_C, overriding pkg-config
JSON_C_LIBS linker flags for JSON_C, overriding pkg-config
@@ -1818,6 +1856,10 @@ Some influential environment variables:
C compiler flags for LIBLOGNORM, overriding pkg-config
LIBLOGNORM_LIBS
linker flags for LIBLOGNORM, overriding pkg-config
+ OPENSSL_CFLAGS
+ C compiler flags for OPENSSL, overriding pkg-config
+ OPENSSL_LIBS
+ linker flags for OPENSSL, overriding pkg-config
RELP_CFLAGS C compiler flags for RELP, overriding pkg-config
RELP_LIBS linker flags for RELP, overriding pkg-config
GUARDTIME_CFLAGS
@@ -1909,7 +1951,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-rsyslog configure 7.4.8
+rsyslog configure 7.6.1
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2488,7 +2530,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by rsyslog $as_me 7.4.8, which was
+It was created by rsyslog $as_me 7.6.1, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@@ -3303,7 +3345,7 @@ fi
# Define the identity of the package.
PACKAGE='rsyslog'
- VERSION='7.4.8'
+ VERSION='7.6.1'
cat >>confdefs.h <<_ACEOF
@@ -13294,6 +13336,97 @@ $as_echo "yes" >&6; }
fi
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBLOGGING_STDLOG" >&5
+$as_echo_n "checking for LIBLOGGING_STDLOG... " >&6; }
+
+if test -n "$LIBLOGGING_STDLOG_CFLAGS"; then
+ pkg_cv_LIBLOGGING_STDLOG_CFLAGS="$LIBLOGGING_STDLOG_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblogging-stdlog >= 1.0.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "liblogging-stdlog >= 1.0.1") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBLOGGING_STDLOG_CFLAGS=`$PKG_CONFIG --cflags "liblogging-stdlog >= 1.0.1" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$LIBLOGGING_STDLOG_LIBS"; then
+ pkg_cv_LIBLOGGING_STDLOG_LIBS="$LIBLOGGING_STDLOG_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblogging-stdlog >= 1.0.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "liblogging-stdlog >= 1.0.1") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBLOGGING_STDLOG_LIBS=`$PKG_CONFIG --libs "liblogging-stdlog >= 1.0.1" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ LIBLOGGING_STDLOG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "liblogging-stdlog >= 1.0.1" 2>&1`
+ else
+ LIBLOGGING_STDLOG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "liblogging-stdlog >= 1.0.1" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$LIBLOGGING_STDLOG_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (liblogging-stdlog >= 1.0.1) were not met:
+
+$LIBLOGGING_STDLOG_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables LIBLOGGING_STDLOG_CFLAGS
+and LIBLOGGING_STDLOG_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables LIBLOGGING_STDLOG_CFLAGS
+and LIBLOGGING_STDLOG_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see .
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ LIBLOGGING_STDLOG_CFLAGS=$pkg_cv_LIBLOGGING_STDLOG_CFLAGS
+ LIBLOGGING_STDLOG_LIBS=$pkg_cv_LIBLOGGING_STDLOG_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JSON_C" >&5
$as_echo_n "checking for JSON_C... " >&6; }
@@ -13549,6 +13682,64 @@ $as_echo "yes" >&6; }
fi
+# if int64 is supported, use it
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for json_object_new_object in -ljson-c" >&5
+$as_echo_n "checking for json_object_new_object in -ljson-c... " >&6; }
+if ${ac_cv_lib_json_c_json_object_new_object+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ljson-c $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char json_object_new_object ();
+int
+main ()
+{
+return json_object_new_object ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_json_c_json_object_new_object=yes
+else
+ ac_cv_lib_json_c_json_object_new_object=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_json_c_json_object_new_object" >&5
+$as_echo "$ac_cv_lib_json_c_json_object_new_object" >&6; }
+if test "x$ac_cv_lib_json_c_json_object_new_object" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBJSON_C 1
+_ACEOF
+
+ LIBS="-ljson-c $LIBS"
+
+fi
+
+for ac_func in json_object_new_int64
+do :
+ ac_fn_c_check_func "$LINENO" "json_object_new_int64" "ac_cv_func_json_object_new_int64"
+if test "x$ac_cv_func_json_object_new_int64" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_JSON_OBJECT_NEW_INT64 1
+_ACEOF
+
+fi
+done
+
+
case "${host}" in
*-*-linux*)
@@ -15145,7 +15336,7 @@ fi
done
-for ac_func in flock basename alarm clock_gettime gethostbyname gethostname gettimeofday localtime_r memset mkdir regcomp select setsid socket strcasecmp strchr strdup strerror strndup strnlen strrchr strstr strtol strtoul uname ttyname_r getline malloc_trim prctl epoll_create epoll_create1 fdatasync syscall lseek64
+for ac_func in flock recvmmsg basename alarm clock_gettime gethostbyname gethostname gettimeofday localtime_r memset mkdir regcomp select setsid socket strcasecmp strchr strdup strerror strndup strnlen strrchr strstr strtol strtoul uname ttyname_r getline malloc_trim prctl epoll_create epoll_create1 fdatasync syscall lseek64
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -15299,6 +15490,33 @@ $as_echo "no; defined as 64" >&6; }
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Check for __builtin_expect()
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_expect()" >&5
+$as_echo_n "checking for __builtin_expect()... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+return __builtin_expect(main != 0, 1)
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+$as_echo "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
# check for availability of atomic operations
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler provides atomic builtins" >&5
$as_echo_n "checking whether the compiler provides atomic builtins... " >&6; }
@@ -18311,6 +18529,239 @@ fi
+# mmutf8fix
+# Check whether --enable-mmutf8fix was given.
+if test "${enable_mmutf8fix+set}" = set; then :
+ enableval=$enable_mmutf8fix; case "${enableval}" in
+ yes) enable_mmutf8fix="yes" ;;
+ no) enable_mmutf8fix="no" ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-mmutf8fix" "$LINENO" 5 ;;
+ esac
+else
+ enable_mmutf8fix=no
+
+fi
+
+ if test x$enable_mmutf8fix = xyes; then
+ ENABLE_MMUTF8FIX_TRUE=
+ ENABLE_MMUTF8FIX_FALSE='#'
+else
+ ENABLE_MMUTF8FIX_TRUE='#'
+ ENABLE_MMUTF8FIX_FALSE=
+fi
+
+
+
+# mmcount
+# Check whether --enable-mmcount was given.
+if test "${enable_mmcount+set}" = set; then :
+ enableval=$enable_mmcount; case "${enableval}" in
+ yes) enable_mmcount="yes" ;;
+ no) enable_mmcount="no" ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-mmcount" "$LINENO" 5 ;;
+ esac
+else
+ enable_mmcount=no
+
+fi
+
+ if test x$enable_mmcount = xyes; then
+ ENABLE_MMCOUNT_TRUE=
+ ENABLE_MMCOUNT_FALSE='#'
+else
+ ENABLE_MMCOUNT_TRUE='#'
+ ENABLE_MMCOUNT_FALSE=
+fi
+
+
+
+# mmsequence
+# Check whether --enable-mmsequence was given.
+if test "${enable_mmsequence+set}" = set; then :
+ enableval=$enable_mmsequence; case "${enableval}" in
+ yes) enable_mmsequence="yes" ;;
+ no) enable_mmsequence="no" ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-mmsequence" "$LINENO" 5 ;;
+ esac
+else
+ enable_mmsequence=no
+
+fi
+
+ if test x$enable_mmsequence = xyes; then
+ ENABLE_MMSEQUENCE_TRUE=
+ ENABLE_MMSEQUENCE_FALSE='#'
+else
+ ENABLE_MMSEQUENCE_TRUE='#'
+ ENABLE_MMSEQUENCE_FALSE=
+fi
+
+
+
+# mmfields
+# Check whether --enable-mmfields was given.
+if test "${enable_mmfields+set}" = set; then :
+ enableval=$enable_mmfields; case "${enableval}" in
+ yes) enable_mmfields="yes" ;;
+ no) enable_mmfields="no" ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-mmfields" "$LINENO" 5 ;;
+ esac
+else
+ enable_mmfields=no
+
+fi
+
+ if test x$enable_mmfields = xyes; then
+ ENABLE_MMFIELDS_TRUE=
+ ENABLE_MMFIELDS_FALSE='#'
+else
+ ENABLE_MMFIELDS_TRUE='#'
+ ENABLE_MMFIELDS_FALSE=
+fi
+
+
+# mmpstrucdata
+# Check whether --enable-mmpstrucdata was given.
+if test "${enable_mmpstrucdata+set}" = set; then :
+ enableval=$enable_mmpstrucdata; case "${enableval}" in
+ yes) enable_mmpstrucdata="yes" ;;
+ no) enable_mmpstrucdata="no" ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-mmpstrucdata" "$LINENO" 5 ;;
+ esac
+else
+ enable_mmpstrucdata=no
+
+fi
+
+ if test x$enable_mmpstrucdata = xyes; then
+ ENABLE_MMPSTRUCDATA_TRUE=
+ ENABLE_MMPSTRUCDATA_FALSE='#'
+else
+ ENABLE_MMPSTRUCDATA_TRUE='#'
+ ENABLE_MMPSTRUCDATA_FALSE=
+fi
+
+
+
+# mmrfc5424addhmac
+# Check whether --enable-mmrfc5424addhmac was given.
+if test "${enable_mmrfc5424addhmac+set}" = set; then :
+ enableval=$enable_mmrfc5424addhmac; case "${enableval}" in
+ yes) enable_mmrfc5424addhmac="yes" ;;
+ no) enable_mmrfc5424addhmac="no" ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-mmrfc5424addhmac" "$LINENO" 5 ;;
+ esac
+else
+ enable_mmrfc5424addhmac=no
+
+fi
+
+if test "x$enable_mmrfc5424addhmac" = "xyes"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OPENSSL" >&5
+$as_echo_n "checking for OPENSSL... " >&6; }
+
+if test -n "$OPENSSL_CFLAGS"; then
+ pkg_cv_OPENSSL_CFLAGS="$OPENSSL_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl >= 0.9.7\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "openssl >= 0.9.7") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_OPENSSL_CFLAGS=`$PKG_CONFIG --cflags "openssl >= 0.9.7" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$OPENSSL_LIBS"; then
+ pkg_cv_OPENSSL_LIBS="$OPENSSL_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl >= 0.9.7\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "openssl >= 0.9.7") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_OPENSSL_LIBS=`$PKG_CONFIG --libs "openssl >= 0.9.7" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ OPENSSL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "openssl >= 0.9.7" 2>&1`
+ else
+ OPENSSL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "openssl >= 0.9.7" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$OPENSSL_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (openssl >= 0.9.7) were not met:
+
+$OPENSSL_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables OPENSSL_CFLAGS
+and OPENSSL_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables OPENSSL_CFLAGS
+and OPENSSL_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see .
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ OPENSSL_CFLAGS=$pkg_cv_OPENSSL_CFLAGS
+ OPENSSL_LIBS=$pkg_cv_OPENSSL_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+#AC_CHECK_LIB([crypto],[CRYPTO_new_ex_data], [], [AC_MSG_ERROR([OpenSSL libraries required])])
+#AC_CHECK_LIB([ssl],[SSL_library_init], [], [AC_MSG_ERROR([OpenSSL libraries required])])
+#AC_CHECK_HEADERS([openssl/crypto.h openssl/x509.h openssl/pem.h openssl/ssl.h openssl/err.h],[],[AC_MSG_ERROR([OpenSSL headers required])])
+fi
+ if test x$enable_mmrfc5424addhmac = xyes; then
+ ENABLE_MMRFC5424ADDHMAC_TRUE=
+ ENABLE_MMRFC5424ADDHMAC_FALSE='#'
+else
+ ENABLE_MMRFC5424ADDHMAC_TRUE='#'
+ ENABLE_MMRFC5424ADDHMAC_FALSE=
+fi
+
+
+
# RELP support
# Check whether --enable-relp was given.
if test "${enable_relp+set}" = set; then :
@@ -18334,12 +18785,12 @@ if test -n "$RELP_CFLAGS"; then
pkg_cv_RELP_CFLAGS="$RELP_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"relp >= 1.0.3\""; } >&5
- ($PKG_CONFIG --exists --print-errors "relp >= 1.0.3") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"relp >= 1.2.3\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "relp >= 1.2.3") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_RELP_CFLAGS=`$PKG_CONFIG --cflags "relp >= 1.0.3" 2>/dev/null`
+ pkg_cv_RELP_CFLAGS=`$PKG_CONFIG --cflags "relp >= 1.2.3" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -18351,12 +18802,12 @@ if test -n "$RELP_LIBS"; then
pkg_cv_RELP_LIBS="$RELP_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"relp >= 1.0.3\""; } >&5
- ($PKG_CONFIG --exists --print-errors "relp >= 1.0.3") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"relp >= 1.2.3\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "relp >= 1.2.3") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_RELP_LIBS=`$PKG_CONFIG --libs "relp >= 1.0.3" 2>/dev/null`
+ pkg_cv_RELP_LIBS=`$PKG_CONFIG --libs "relp >= 1.2.3" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -18377,14 +18828,14 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- RELP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "relp >= 1.0.3" 2>&1`
+ RELP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "relp >= 1.2.3" 2>&1`
else
- RELP_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "relp >= 1.0.3" 2>&1`
+ RELP_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "relp >= 1.2.3" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$RELP_PKG_ERRORS" >&5
- as_fn_error $? "Package requirements (relp >= 1.0.3) were not met:
+ as_fn_error $? "Package requirements (relp >= 1.2.3) were not met:
$RELP_PKG_ERRORS
@@ -18635,12 +19086,12 @@ if test -n "$LIBLOGGING_CFLAGS"; then
pkg_cv_LIBLOGGING_CFLAGS="$LIBLOGGING_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblogging >= 0.7.1\""; } >&5
- ($PKG_CONFIG --exists --print-errors "liblogging >= 0.7.1") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblogging-rfc3195 >= 1.0.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "liblogging-rfc3195 >= 1.0.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_LIBLOGGING_CFLAGS=`$PKG_CONFIG --cflags "liblogging >= 0.7.1" 2>/dev/null`
+ pkg_cv_LIBLOGGING_CFLAGS=`$PKG_CONFIG --cflags "liblogging-rfc3195 >= 1.0.1" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -18652,12 +19103,12 @@ if test -n "$LIBLOGGING_LIBS"; then
pkg_cv_LIBLOGGING_LIBS="$LIBLOGGING_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblogging >= 0.7.1\""; } >&5
- ($PKG_CONFIG --exists --print-errors "liblogging >= 0.7.1") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblogging-rfc3195 >= 1.0.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "liblogging-rfc3195 >= 1.0.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_LIBLOGGING_LIBS=`$PKG_CONFIG --libs "liblogging >= 0.7.1" 2>/dev/null`
+ pkg_cv_LIBLOGGING_LIBS=`$PKG_CONFIG --libs "liblogging-rfc3195 >= 1.0.1" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -18678,14 +19129,14 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- LIBLOGGING_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "liblogging >= 0.7.1" 2>&1`
+ LIBLOGGING_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "liblogging-rfc3195 >= 1.0.1" 2>&1`
else
- LIBLOGGING_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "liblogging >= 0.7.1" 2>&1`
+ LIBLOGGING_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "liblogging-rfc3195 >= 1.0.1" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$LIBLOGGING_PKG_ERRORS" >&5
- as_fn_error $? "Package requirements (liblogging >= 0.7.1) were not met:
+ as_fn_error $? "Package requirements (liblogging-rfc3195 >= 1.0.1) were not met:
$LIBLOGGING_PKG_ERRORS
@@ -19974,7 +20425,7 @@ fi
# END HIREDIS SUPPORT
-ac_config_files="$ac_config_files Makefile runtime/Makefile compat/Makefile grammar/Makefile tools/Makefile doc/Makefile plugins/imudp/Makefile plugins/imtcp/Makefile plugins/im3195/Makefile plugins/imgssapi/Makefile plugins/imuxsock/Makefile plugins/imjournal/Makefile plugins/immark/Makefile plugins/imklog/Makefile plugins/imkmsg/Makefile plugins/omhdfs/Makefile plugins/omprog/Makefile plugins/omstdout/Makefile plugins/omjournal/Makefile plugins/pmrfc3164sd/Makefile plugins/pmlastmsg/Makefile plugins/pmcisconames/Makefile plugins/pmsnare/Makefile plugins/pmaixforwardedfrom/Makefile plugins/omruleset/Makefile plugins/omuxsock/Makefile plugins/imfile/Makefile plugins/imsolaris/Makefile plugins/imptcp/Makefile plugins/imttcp/Makefile plugins/impstats/Makefile plugins/imrelp/Makefile plugins/imdiag/Makefile plugins/imzmq3/Makefile plugins/omtesting/Makefile plugins/omgssapi/Makefile plugins/ommysql/Makefile plugins/ompgsql/Makefile plugins/omrelp/Makefile plugins/omlibdbi/Makefile plugins/ommail/Makefile plugins/omsnmp/Makefile plugins/omoracle/Makefile plugins/omudpspoof/Makefile plugins/ommongodb/Makefile plugins/omhiredis/Makefile plugins/omzmq3/Makefile plugins/omrabbitmq/Makefile plugins/mmnormalize/Makefile plugins/mmjsonparse/Makefile plugins/mmaudit/Makefile plugins/mmanon/Makefile plugins/omelasticsearch/Makefile plugins/sm_cust_bindcdr/Makefile plugins/mmsnmptrapd/Makefile java/Makefile tests/Makefile"
+ac_config_files="$ac_config_files Makefile runtime/Makefile compat/Makefile grammar/Makefile tools/Makefile doc/Makefile plugins/imudp/Makefile plugins/imtcp/Makefile plugins/im3195/Makefile plugins/imgssapi/Makefile plugins/imuxsock/Makefile plugins/imjournal/Makefile plugins/immark/Makefile plugins/imklog/Makefile plugins/imkmsg/Makefile plugins/omhdfs/Makefile plugins/omprog/Makefile plugins/omstdout/Makefile plugins/omjournal/Makefile plugins/pmrfc3164sd/Makefile plugins/pmlastmsg/Makefile plugins/pmcisconames/Makefile plugins/pmsnare/Makefile plugins/pmaixforwardedfrom/Makefile plugins/omruleset/Makefile plugins/omuxsock/Makefile plugins/imfile/Makefile plugins/imsolaris/Makefile plugins/imptcp/Makefile plugins/imttcp/Makefile plugins/impstats/Makefile plugins/imrelp/Makefile plugins/imdiag/Makefile plugins/imzmq3/Makefile plugins/omtesting/Makefile plugins/omgssapi/Makefile plugins/ommysql/Makefile plugins/ompgsql/Makefile plugins/omrelp/Makefile plugins/omlibdbi/Makefile plugins/ommail/Makefile plugins/omsnmp/Makefile plugins/omoracle/Makefile plugins/omudpspoof/Makefile plugins/ommongodb/Makefile plugins/omhiredis/Makefile plugins/omzmq3/Makefile plugins/omrabbitmq/Makefile plugins/mmnormalize/Makefile plugins/mmjsonparse/Makefile plugins/mmaudit/Makefile plugins/mmanon/Makefile plugins/mmutf8fix/Makefile plugins/mmcount/Makefile plugins/mmsequence/Makefile plugins/mmfields/Makefile plugins/mmpstrucdata/Makefile plugins/mmrfc5424addhmac/Makefile plugins/omelasticsearch/Makefile plugins/sm_cust_bindcdr/Makefile plugins/mmsnmptrapd/Makefile java/Makefile tests/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -20241,6 +20692,30 @@ if test -z "${ENABLE_MMANON_TRUE}" && test -z "${ENABLE_MMANON_FALSE}"; then
as_fn_error $? "conditional \"ENABLE_MMANON\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${ENABLE_MMUTF8FIX_TRUE}" && test -z "${ENABLE_MMUTF8FIX_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_MMUTF8FIX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_MMCOUNT_TRUE}" && test -z "${ENABLE_MMCOUNT_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_MMCOUNT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_MMSEQUENCE_TRUE}" && test -z "${ENABLE_MMSEQUENCE_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_MMSEQUENCE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_MMFIELDS_TRUE}" && test -z "${ENABLE_MMFIELDS_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_MMFIELDS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_MMPSTRUCDATA_TRUE}" && test -z "${ENABLE_MMPSTRUCDATA_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_MMPSTRUCDATA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_MMRFC5424ADDHMAC_TRUE}" && test -z "${ENABLE_MMRFC5424ADDHMAC_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_MMRFC5424ADDHMAC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${ENABLE_RELP_TRUE}" && test -z "${ENABLE_RELP_FALSE}"; then
as_fn_error $? "conditional \"ENABLE_RELP\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -20766,7 +21241,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by rsyslog $as_me 7.4.8, which was
+This file was extended by rsyslog $as_me 7.6.1, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -20832,7 +21307,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-rsyslog config.status 7.4.8
+rsyslog config.status 7.6.1
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
@@ -21293,6 +21768,12 @@ do
"plugins/mmjsonparse/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/mmjsonparse/Makefile" ;;
"plugins/mmaudit/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/mmaudit/Makefile" ;;
"plugins/mmanon/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/mmanon/Makefile" ;;
+ "plugins/mmutf8fix/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/mmutf8fix/Makefile" ;;
+ "plugins/mmcount/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/mmcount/Makefile" ;;
+ "plugins/mmsequence/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/mmsequence/Makefile" ;;
+ "plugins/mmfields/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/mmfields/Makefile" ;;
+ "plugins/mmpstrucdata/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/mmpstrucdata/Makefile" ;;
+ "plugins/mmrfc5424addhmac/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/mmrfc5424addhmac/Makefile" ;;
"plugins/omelasticsearch/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/omelasticsearch/Makefile" ;;
"plugins/sm_cust_bindcdr/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/sm_cust_bindcdr/Makefile" ;;
"plugins/mmsnmptrapd/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/mmsnmptrapd/Makefile" ;;
@@ -22673,6 +23154,8 @@ echo " uuid support enabled: $enable_uuid"
echo " Log file signing support: $enable_guardtime"
echo " Log file encryption support: $enable_libgcrypt"
echo " anonymization support enabled: $enable_mmanon"
+echo " message counting support enabled: $enable_mmcount"
+echo " mmfields enabled: $enable_mmfields"
echo
echo "---{ input plugins }---"
echo " Klog functionality enabled: $enable_klog ($os_type)"
@@ -22711,6 +23194,10 @@ echo " mmnormalize module will be compiled: $enable_mmnormalize"
echo " mmjsonparse module will be compiled: $enable_mmjsonparse"
echo " mmjaduit module will be compiled: $enable_mmaudit"
echo " mmsnmptrapd module will be compiled: $enable_mmsnmptrapd"
+echo " mmutf8fix enabled: $enable_mmutf8fix"
+echo " mmrfc5424addhmac enabled: $enable_mmrfc5424addhmac"
+echo " mmpstrucdata enabled: $enable_mmpstrucdata"
+echo " mmsequence enabled: $enable_mmsequence"
echo
echo "---{ strgen modules }---"
echo " sm_cust_bindcdr module will be compiled: $enable_sm_cust_bindcdr"
diff --git a/configure.ac b/configure.ac
index d2a8891..5feb6f5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,8 +2,8 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
-AC_INIT([rsyslog],[7.4.8],[rsyslog@lists.adiscon.com])
-AM_INIT_AUTOMAKE
+AC_INIT([rsyslog],[7.6.1],[rsyslog@lists.adiscon.com])
+AM_INIT_AUTOMAKE([subdir-objects])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
@@ -33,10 +33,15 @@ PKG_PROG_PKG_CONFIG
# modules we require
PKG_CHECK_MODULES(LIBESTR, libestr >= 0.1.9)
+PKG_CHECK_MODULES(LIBLOGGING_STDLOG, liblogging-stdlog >= 1.0.1)
PKG_CHECK_MODULES([JSON_C], [json],, [
PKG_CHECK_MODULES([JSON_C], [json-c])
])
+# if int64 is supported, use it
+AC_CHECK_LIB(json-c, json_object_new_object,,)
+AC_CHECK_FUNCS(json_object_new_int64,,)
+
case "${host}" in
*-*-linux*)
AC_DEFINE([OS_LINUX], [1], [Indicator for a Linux OS])
@@ -121,7 +126,7 @@ AC_TYPE_SIGNAL
AC_FUNC_STAT
AC_FUNC_STRERROR_R
AC_FUNC_VPRINTF
-AC_CHECK_FUNCS([flock basename alarm clock_gettime gethostbyname gethostname gettimeofday localtime_r memset mkdir regcomp select setsid socket strcasecmp strchr strdup strerror strndup strnlen strrchr strstr strtol strtoul uname ttyname_r getline malloc_trim prctl epoll_create epoll_create1 fdatasync syscall lseek64])
+AC_CHECK_FUNCS([flock recvmmsg basename alarm clock_gettime gethostbyname gethostname gettimeofday localtime_r memset mkdir regcomp select setsid socket strcasecmp strchr strdup strerror strndup strnlen strrchr strstr strtol strtoul uname ttyname_r getline malloc_trim prctl epoll_create epoll_create1 fdatasync syscall lseek64])
# getifaddrs is in libc (mostly) or in libsocket (eg Solaris 11) or not defined (eg Solaris 10)
AC_SEARCH_LIBS([getifaddrs], [socket], [AC_DEFINE(HAVE_GETIFADDRS, [1], [set define])])
@@ -153,6 +158,14 @@ AC_TRY_COMPILE([
AC_MSG_RESULT(no; defined as 64)
)
+# Check for __builtin_expect()
+AC_MSG_CHECKING([for __builtin_expect()])
+AC_LINK_IFELSE([AC_LANG_PROGRAM(, return __builtin_expect(main != 0, 1))],
+ [AC_DEFINE(HAVE_BUILTIN_EXPECT, 1,
+ Define to 1 if compiler supports __builtin_expect)
+ AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])])
+
# check for availability of atomic operations
RS_ATOMIC_OPERATIONS
RS_ATOMIC_OPERATIONS_64BIT
@@ -964,6 +977,89 @@ AC_ARG_ENABLE(mmanon,
AM_CONDITIONAL(ENABLE_MMANON, test x$enable_mmanon = xyes)
+# mmutf8fix
+AC_ARG_ENABLE(mmutf8fix,
+ [AS_HELP_STRING([--enable-mmutf8fix],[Enable building mmutf8fix support @<:@default=no@:>@])],
+ [case "${enableval}" in
+ yes) enable_mmutf8fix="yes" ;;
+ no) enable_mmutf8fix="no" ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-mmutf8fix) ;;
+ esac],
+ [enable_mmutf8fix=no]
+)
+AM_CONDITIONAL(ENABLE_MMUTF8FIX, test x$enable_mmutf8fix = xyes)
+
+
+# mmcount
+AC_ARG_ENABLE(mmcount,
+ [AS_HELP_STRING([--enable-mmcount],[Enable message counting @<:@default=no@:>@])],
+ [case "${enableval}" in
+ yes) enable_mmcount="yes" ;;
+ no) enable_mmcount="no" ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-mmcount) ;;
+ esac],
+ [enable_mmcount=no]
+)
+AM_CONDITIONAL(ENABLE_MMCOUNT, test x$enable_mmcount = xyes)
+
+
+# mmsequence
+AC_ARG_ENABLE(mmsequence,
+ [AS_HELP_STRING([--enable-mmsequence],[Enable sequence generator @<:@default=no@:>@])],
+ [case "${enableval}" in
+ yes) enable_mmsequence="yes" ;;
+ no) enable_mmsequence="no" ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-mmsequence) ;;
+ esac],
+ [enable_mmsequence=no]
+)
+AM_CONDITIONAL(ENABLE_MMSEQUENCE, test x$enable_mmsequence = xyes)
+
+
+# mmfields
+AC_ARG_ENABLE(mmfields,
+ [AS_HELP_STRING([--enable-mmfields],[Enable building mmfields support @<:@default=no@:>@])],
+ [case "${enableval}" in
+ yes) enable_mmfields="yes" ;;
+ no) enable_mmfields="no" ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-mmfields) ;;
+ esac],
+ [enable_mmfields=no]
+)
+AM_CONDITIONAL(ENABLE_MMFIELDS, test x$enable_mmfields = xyes)
+
+# mmpstrucdata
+AC_ARG_ENABLE(mmpstrucdata,
+ [AS_HELP_STRING([--enable-mmpstrucdata],[Enable building mmpstrucdata support @<:@default=no@:>@])],
+ [case "${enableval}" in
+ yes) enable_mmpstrucdata="yes" ;;
+ no) enable_mmpstrucdata="no" ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-mmpstrucdata) ;;
+ esac],
+ [enable_mmpstrucdata=no]
+)
+AM_CONDITIONAL(ENABLE_MMPSTRUCDATA, test x$enable_mmpstrucdata = xyes)
+
+
+# mmrfc5424addhmac
+AC_ARG_ENABLE(mmrfc5424addhmac,
+ [AS_HELP_STRING([--enable-mmrfc5424addhmac],[Enable building mmrfc5424addhmac support @<:@default=no@:>@])],
+ [case "${enableval}" in
+ yes) enable_mmrfc5424addhmac="yes" ;;
+ no) enable_mmrfc5424addhmac="no" ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-mmrfc5424addhmac) ;;
+ esac],
+ [enable_mmrfc5424addhmac=no]
+)
+if test "x$enable_mmrfc5424addhmac" = "xyes"; then
+ PKG_CHECK_MODULES(OPENSSL, openssl >= 0.9.7)
+#AC_CHECK_LIB([crypto],[CRYPTO_new_ex_data], [], [AC_MSG_ERROR([OpenSSL libraries required])])
+#AC_CHECK_LIB([ssl],[SSL_library_init], [], [AC_MSG_ERROR([OpenSSL libraries required])])
+#AC_CHECK_HEADERS([openssl/crypto.h openssl/x509.h openssl/pem.h openssl/ssl.h openssl/err.h],[],[AC_MSG_ERROR([OpenSSL headers required])])
+fi
+AM_CONDITIONAL(ENABLE_MMRFC5424ADDHMAC, test x$enable_mmrfc5424addhmac = xyes)
+
+
# RELP support
AC_ARG_ENABLE(relp,
[AS_HELP_STRING([--enable-relp],[Enable RELP support @<:@default=no@:>@])],
@@ -975,7 +1071,7 @@ AC_ARG_ENABLE(relp,
[enable_relp=no]
)
if test "x$enable_relp" = "xyes"; then
- PKG_CHECK_MODULES(RELP, relp >= 1.0.3)
+ PKG_CHECK_MODULES(RELP, relp >= 1.2.3)
fi
AM_CONDITIONAL(ENABLE_RELP, test x$enable_relp = xyes)
@@ -1031,7 +1127,7 @@ AC_ARG_ENABLE(rfc3195,
[enable_rfc3195=no]
)
if test "x$enable_rfc3195" = "xyes"; then
- PKG_CHECK_MODULES(LIBLOGGING, liblogging >= 0.7.1)
+ PKG_CHECK_MODULES(LIBLOGGING, liblogging-rfc3195 >= 1.0.1)
fi
AM_CONDITIONAL(ENABLE_RFC3195, test x$enable_rfc3195 = xyes)
@@ -1480,6 +1576,12 @@ AC_CONFIG_FILES([Makefile \
plugins/mmjsonparse/Makefile \
plugins/mmaudit/Makefile \
plugins/mmanon/Makefile \
+ plugins/mmutf8fix/Makefile \
+ plugins/mmcount/Makefile \
+ plugins/mmsequence/Makefile \
+ plugins/mmfields/Makefile \
+ plugins/mmpstrucdata/Makefile \
+ plugins/mmrfc5424addhmac/Makefile \
plugins/omelasticsearch/Makefile \
plugins/sm_cust_bindcdr/Makefile \
plugins/mmsnmptrapd/Makefile \
@@ -1503,6 +1605,8 @@ echo " uuid support enabled: $enable_uuid"
echo " Log file signing support: $enable_guardtime"
echo " Log file encryption support: $enable_libgcrypt"
echo " anonymization support enabled: $enable_mmanon"
+echo " message counting support enabled: $enable_mmcount"
+echo " mmfields enabled: $enable_mmfields"
echo
echo "---{ input plugins }---"
echo " Klog functionality enabled: $enable_klog ($os_type)"
@@ -1541,6 +1645,10 @@ echo " mmnormalize module will be compiled: $enable_mmnormalize"
echo " mmjsonparse module will be compiled: $enable_mmjsonparse"
echo " mmjaduit module will be compiled: $enable_mmaudit"
echo " mmsnmptrapd module will be compiled: $enable_mmsnmptrapd"
+echo " mmutf8fix enabled: $enable_mmutf8fix"
+echo " mmrfc5424addhmac enabled: $enable_mmrfc5424addhmac"
+echo " mmpstrucdata enabled: $enable_mmpstrucdata"
+echo " mmsequence enabled: $enable_mmsequence"
echo
echo "---{ strgen modules }---"
echo " sm_cust_bindcdr module will be compiled: $enable_sm_cust_bindcdr"
diff --git a/dirty.h b/dirty.h
index 13f76d3..d4bd6ff 100644
--- a/dirty.h
+++ b/dirty.h
@@ -5,7 +5,7 @@
* yet a runtime library, because it depends on some functionality
* residing somewhere else.
*
- * Copyright 2007, 2008 Rainer Gerhards and Adiscon GmbH.
+ * Copyright 2007-2013 Rainer Gerhards and Adiscon GmbH.
*
* This file is part of rsyslog.
*
@@ -32,10 +32,10 @@ rsRetVal multiSubmitMsg2(multi_submit_t *pMultiSub); /* friends only! */
rsRetVal submitMsg2(msg_t *pMsg);
rsRetVal __attribute__((deprecated)) submitMsg(msg_t *pMsg);
rsRetVal multiSubmitFlush(multi_submit_t *pMultiSub);
-rsRetVal logmsgInternal(int iErr, int pri, const uchar *const msg, int flags);
+rsRetVal logmsgInternal(const int iErr, const int pri, const uchar *const msg, int flags);
rsRetVal __attribute__((deprecated)) parseAndSubmitMessage(uchar *hname, uchar *hnameIP, uchar *msg, int len, int flags, flowControl_t flowCtlTypeu, prop_t *pInputName, struct syslogTime *stTime, time_t ttGenTime, ruleset_t *pRuleset);
rsRetVal diagGetMainMsgQSize(int *piSize); /* for imdiag */
-rsRetVal createMainQueue(qqueue_t **ppQueue, uchar *pszQueueName, struct cnfparamvals *queueParams);
+rsRetVal createMainQueue(qqueue_t **ppQueue, uchar *pszQueueName, struct nvlst *lst);
extern int MarkInterval;
extern qqueue_t *pMsgQueue; /* the main message queue */
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 56176d1..6e521c7 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -37,6 +37,15 @@ html_files = \
omjournal.html \
imjournal.html \
mmanon.html \
+ mmsequence.html \
+ mmcount.html \
+ mmfields.html \
+ mmrfc5424addhmac.html \
+ mmutf8fix.html \
+ omelasticsearch.html \
+ ommongodb.html \
+ queue_parameters.html \
+ mmpstrucdata.html \
omusrmsg.html \
omstdout.html \
omudpspoof.html \
@@ -61,6 +70,15 @@ html_files = \
src/queueWorkerLogic.dia \
queueWorkerLogic.jpg \
queueWorkerLogic_small.jpg \
+ rsyslog_secure_tls.html \
+ tls_cert_ca.html \
+ tls_cert_client.html \
+ tls_cert_errmsgs.html \
+ tls_cert_machine.html \
+ tls_cert_scenario.html \
+ tls_cert_server.html \
+ tls_cert_summary.html \
+ tls_cert_udp_relay.html \
tls_cert_100.jpg \
tls_cert_ca.jpg \
tls_cert.jpg \
@@ -146,6 +164,7 @@ html_files = \
rsyslog_conf_basic_structure.html \
rsyslog_conf_sysklogd_compatibility.html \
imkmsg.html \
+ rainerscript_call.html \
src/classes.dia
grfx_files = \
diff --git a/doc/Makefile.in b/doc/Makefile.in
index ce66409..4b0a551 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -121,6 +121,8 @@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBLOGGING_CFLAGS = @LIBLOGGING_CFLAGS@
LIBLOGGING_LIBS = @LIBLOGGING_LIBS@
+LIBLOGGING_STDLOG_CFLAGS = @LIBLOGGING_STDLOG_CFLAGS@
+LIBLOGGING_STDLOG_LIBS = @LIBLOGGING_STDLOG_LIBS@
LIBLOGNORM_CFLAGS = @LIBLOGNORM_CFLAGS@
LIBLOGNORM_LIBS = @LIBLOGNORM_LIBS@
LIBM = @LIBM@
@@ -145,6 +147,8 @@ NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
+OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
+OPENSSL_LIBS = @OPENSSL_LIBS@
ORACLE_CFLAGS = @ORACLE_CFLAGS@
ORACLE_LIBS = @ORACLE_LIBS@
OTOOL = @OTOOL@
@@ -282,6 +286,15 @@ html_files = \
omjournal.html \
imjournal.html \
mmanon.html \
+ mmsequence.html \
+ mmcount.html \
+ mmfields.html \
+ mmrfc5424addhmac.html \
+ mmutf8fix.html \
+ omelasticsearch.html \
+ ommongodb.html \
+ queue_parameters.html \
+ mmpstrucdata.html \
omusrmsg.html \
omstdout.html \
omudpspoof.html \
@@ -306,6 +319,15 @@ html_files = \
src/queueWorkerLogic.dia \
queueWorkerLogic.jpg \
queueWorkerLogic_small.jpg \
+ rsyslog_secure_tls.html \
+ tls_cert_ca.html \
+ tls_cert_client.html \
+ tls_cert_errmsgs.html \
+ tls_cert_machine.html \
+ tls_cert_scenario.html \
+ tls_cert_server.html \
+ tls_cert_summary.html \
+ tls_cert_udp_relay.html \
tls_cert_100.jpg \
tls_cert_ca.jpg \
tls_cert.jpg \
@@ -391,6 +413,7 @@ html_files = \
rsyslog_conf_basic_structure.html \
rsyslog_conf_sysklogd_compatibility.html \
imkmsg.html \
+ rainerscript_call.html \
src/classes.dia
grfx_files = \
diff --git a/doc/build_from_repo.html b/doc/build_from_repo.html
index 6e018a5..121db57 100644
--- a/doc/build_from_repo.html
+++ b/doc/build_from_repo.html
@@ -8,7 +8,7 @@ distribution tarball to generate it. But there may be situations where it is des
to build directly from the source repository. This is useful for people who would like to
participate in development or who would like to use the latest, not-yet-released code.
The later may especially be the case if you are asked to try out an experimental version.
-Building from the repsitory is not much different than building from the source
+
Building from the repository is not much different than building from the source
tarball, but some files are missing because they are output files and thus do not
belong into the repository.
Obtaining the Source
diff --git a/doc/debug.html b/doc/debug.html
index 229aeb0..9f05c68 100644
--- a/doc/debug.html
+++ b/doc/debug.html
@@ -27,7 +27,7 @@ be replaced by something else.
There are two environment variables that set several debug settings:
- The "RSYSLOG_DEBUGLOG" (sample: RSYSLOG_DEBUGLOG="/path/to/debuglog/")
-writes (allmost)
+writes (almost)
all debug message to the specified log file in addition to stdout. Some
system messages (e.g. segfault or abort message) are not written to the
file as we can not capture them.
@@ -133,7 +133,7 @@ turned on.
threads and their calling stack by sending SIGUSR2. However, the usefulness of that
information is very much depending on rsyslog compile-time settings, must importantly
the --enable-rtinst configure flag. Note that activating this option causes additional overhead
-and slows down rsyslgod considerable. So if you do that, you need to check if it is
+and slows down rsyslogd considerable. So if you do that, you need to check if it is
capable to handle the workload. Also, threading behavior is modified by the
runtime instrumentation.
Sending SIGUSR2 writes new process state information to the log file each time
@@ -143,13 +143,13 @@ some diagnostic information on the current processing state. In that case, turni
on the mutex debugging options (see above) is probably useful.
Interpreting the Logs
Debug logs are primarily meant for rsyslog developers. But they may still provide valuable
-information to users. Just be warned that logs sometimes contains informaton the looks like
+information to users. Just be warned that logs sometimes contains information the looks like
an error, but actually is none. We put a lot of extra information into the logs, and there
are some cases where it is OK for an error to happen, we just wanted to record it inside
the log. The code handles many cases automatically. So, in short, the log may not make sense to
you, but it (hopefully) makes sense to a developer. Note that we developers often need
many lines of the log file, it is relatively rare that a problem can be diagnosed by
-looking at just a couple of (hundered) log records.
+looking at just a couple of (hundred) log records.
Security Risks
The debug log will reveal potentially sensible information, including user accounts and
passwords, to anyone able to read the log file. As such, it is recommended to properly
@@ -159,8 +159,9 @@ attack or try to hide some information from the log file. As such, it is suggest
enable DebugOnDemand mode only for a reason. Note that when no debug mode is enabled,
SIGUSR1 and SIGUSR2 are completely ignored.
When running in any of the debug modes (including on demand mode), an interactive
-instance of rsyslogd can be aborted by pressing ctl-c.
-
See Also
+instance of rsyslogd can be aborted by pressing ctrl-c.
+
+
See Also
diff --git a/doc/dev_oplugins.html b/doc/dev_oplugins.html
index 4a9cd15..bd2bfc3 100644
--- a/doc/dev_oplugins.html
+++ b/doc/dev_oplugins.html
@@ -15,13 +15,15 @@ and pointers than to have nothing.
The best to get started with rsyslog plugin development is by looking at
existing plugins. All that start with "om" are output modules. That
means they are primarily thought of being message sinks. In theory, however, output
-plugins may aggergate other functionality, too. Nobody has taken this route so far
+plugins may aggregate other functionality, too. Nobody has taken this route so far
so if you would like to do that, it is highly suggested to post your plan on the
rsyslog mailing list, first (so that we can offer advise).
The rsyslog distribution tarball contains the omstdout plugin which is extremely well
targeted for getting started. Just note that this plugin itself is not meant for
production use. But it is very simplistic and so a really good starting point to
-grasp the core ideas.
+grasp the core ideas. Also, it supports two different parameter-passing modes and
+offers some light functionality. Note, however, that in order to use omstdout as is, you
+need to run rsyslog interactively as otherwise stdout is redirected.
In any case, you should also read the comments in ./runtime/module-template.h.
Output plugins are build based on a large set of code-generating macros. These
macros handle most of the plumbing needed by the interface. As long as no
@@ -44,7 +46,7 @@ that shares a single instanceData structure.
So as long as you do not mess around with global data, you do not need
to think about multithreading (and can apply a purely sequential programming
methodology).
-
Please note that duringt the configuraton parsing stage of execution, access to
+
Please note that during the configuration parsing stage of execution, access to
global variables for the configuration system is safe. In that stage, the core will
only call sequentially into the plugin.
Getting Message Data
@@ -69,7 +71,7 @@ get it into the core (so far, we could accept all such suggestions - no promise,
request access to the template components. The typical use case seems to be databases, where
you would like to access properties via specific fields. With that mode, you receive a
char ** array, where each array element points to one field from the template (from
-left to right). Fields start at arrray index 0 and a NULL pointer means you have
+left to right). Fields start at array index 0 and a NULL pointer means you have
reached the end of the array (the typical Unix "poor man's linked list in an array"
design). Note, however, that each of the individual components is a string. It is
not a date stamp, number or whatever, but a string. This is because rsyslog processes
@@ -132,19 +134,19 @@ for example in MongoDB or ElasticSearch.
a single-message interface was supported.
With the single message plugin interface, each message is passed via a separate call to the plugin.
Most importantly, the rsyslog engine assumes that each call to the plugin is a complete transaction
-and as such assumes that messages be properly commited after the plugin returns to the engine.
+and as such assumes that messages be properly committed after the plugin returns to the engine.
With the batching interface, rsyslog employs something along the line of
"transactions". Obviously, the rsyslog core can not make non-transactional outputs
to be fully transactional. But what it can is support that the output tells the core which
-messages have been commited by the output and which not yet. The core can than take care
-of those uncommited messages when problems occur. For example, if a plugin has received
-50 messages but not yet told the core that it commited them, and then returns an error state, the
+messages have been committed by the output and which not yet. The core can than take care
+of those uncommitted messages when problems occur. For example, if a plugin has received
+50 messages but not yet told the core that it committed them, and then returns an error state, the
core assumes that all these 50 messages were not written to the output. The core then
-requeues all 50 messages and does the usual retry processing. Once the output plugin tells the
+re-queues all 50 messages and does the usual retry processing. Once the output plugin tells the
core that it is ready again to accept messages, the rsyslog core will provide it with these 50
-not yet commited messages again (actually, at this point, the rsyslog core no longer knows that
-it is re-submiting the messages). If, in contrary, the plugin had told rsyslog that 40 of these 50
-messages were commited (before it failed), then only 10 would have been requeued and resubmitted.
+not yet committed messages again (actually, at this point, the rsyslog core no longer knows that
+it is re-submitting the messages). If, in contrary, the plugin had told rsyslog that 40 of these 50
+messages were committed (before it failed), then only 10 would have been re-queued and resubmitted.
In order to provide an efficient implementation, there are some (mild) constraints in that
transactional model: first of all, rsyslog itself specifies the ultimate transaction boundaries.
That is, it tells the plugin when a transaction begins and when it must finish. The plugin
@@ -155,7 +157,7 @@ transaction support. Note that batch sizes are variable within the range of 1 to
maximum limit. Most importantly, that means that plugins may receive batches of single messages,
so they are required to commit each message individually. If the plugin tries to be "smarter"
than the rsyslog engine and does not commit messages in those cases (for example), the plugin
-puts message stream integrity at risk: once rsyslog has notified the plugin of transacton end,
+puts message stream integrity at risk: once rsyslog has notified the plugin of transaction end,
it discards all messages as it considers them committed and save. If now something goes wrong,
the rsyslog core does not try to recover lost messages (and keep in mind that "goes wrong"
includes such uncontrollable things like connection loss to a database server). So it is
@@ -170,8 +172,8 @@ This is also under evaluation and, once decided, the core will offer an interfac
to preserve message stream integrity for properly-crafted plugins).
The second restriction is that if a plugin makes commits in between (what is perfectly
legal) those commits must be in-order. So if a commit is made for message ten out of 50,
-this means that messages one to nine are also commited. It would be possible to remove
-this restriction, but we have decided to deliberately introduce it to simpify things.
+this means that messages one to nine are also committed. It would be possible to remove
+this restriction, but we have decided to deliberately introduce it to simplify things.
Output Plugin Transaction Interface
In order to keep compatible with existing output plugins (and because it introduces
no complexity), the transactional plugin interface is build on the traditional
@@ -231,7 +233,7 @@ But they convey additional information about the commit status as follows:
RS_RET_OK |
-The record and all previous inside the batch has been commited.
+ | The record and all previous inside the batch has been committed.
Note: this definition is what makes integrating plugins without the
transaction being/end calls so easy - this is the traditional "success" return
state and if every call returns it, there is no need for actually calling
@@ -239,7 +241,7 @@ state and if every call returns it, there is no need for actually calling
|
RS_RET_DEFER_COMMIT |
-The record has been processed, but is not yet commited. This is the
+ | The record has been processed, but is not yet committed. This is the
expected state for transactional-aware plugins. |
@@ -248,7 +250,7 @@ expected state for transactional-aware plugins.
current one not yet. This state is introduced to support sources that fill up
buffers and commit once a buffer is completely filled. That may occur halfway
in the next record, so it may be important to be able to tell the
-engine the everything up to the previouos record is commited
+engine the everything up to the previous record is committed
Note that the typical calling cycle is beginTransaction()
,
@@ -269,7 +271,7 @@ exists. So we introduce it with that release. What the means is if a rsyslog cor
not provide this query interface, it is a core that was build before batching support
was available. So the absence of a query interface indicates that the transactional
interface is not available. One might now be tempted the think there is no need to do
-the actual check, but is is recommended to ask the rsyslog engine explicitely if
+the actual check, but is is recommended to ask the rsyslog engine explicitly if
the transactional interface is present and will be honored. This enables us to
create versions in the future which have, for whatever reason we do not yet know, no
support for this interface.
diff --git a/doc/dev_queue.html b/doc/dev_queue.html
index bf2af7f..6d5fe73 100644
--- a/doc/dev_queue.html
+++ b/doc/dev_queue.html
@@ -80,7 +80,7 @@ and terminating while waiting on the primary queue to fill. In practice, this is
highly unlikely (but only for the main message queue) because rsyslog issues a
startup message. HOWEVER, we can not rely on that, it would introduce a race. If
the primary rsyslog thread (the one that issues the message) is scheduled very
-late and there is a low inactivty timeout for queue workers, the queue worker
+late and there is a low inactivity timeout for queue workers, the queue worker
may terminate before the startup message is issued. And if the on-disk queue
holds only a few messages, it may become empty before the DA worker is
re-initiated again. So it is possible that the DA run mode termination criteria
@@ -105,7 +105,7 @@ clean shutdown of the DA queue).
One might think that it would be more natural for the DA queue to detect
being idle and shut down itself. However, there are some issues associated with
that. Most importantly, all queue worker threads need to be shut down during
-queue destruction. Only after that has happend, final destruction steps can
+queue destruction. Only after that has happened, final destruction steps can
happen (else we would have a myriad of races). However, it is the DA queues
worker thread that detects it is empty (empty queue detection always happens at
the consumer side and must so). That would lead to the DA queue worker thread to
@@ -115,7 +115,7 @@ destructed). Obviously, this does not work out (and I didn't even mention the
other issues - so let's forget about it). As such, the thread that enqueues
messages must destruct the queue - and that is the primary queue's DA worker
thread.
-There are some subleties due to thread synchronization and the fact that the
+
There are some subtleties due to thread synchronization and the fact that the
DA consumer may not be running (in a case-2 startup). So it is not
trivial to reliably change the queue back from DA run mode to regular run mode.
The priority is a clean switch. We accept the fact that there may be situations
@@ -132,7 +132,7 @@ most probably even lead to worse performance under regular conditions).
Case 2 is unlikely, but may happen (see info above on a case 2 startup).
The DA worker may also not wait at all, because it is actively
-executing and shuffeling messages between the queues. In that case, however, the
+executing and shuffling messages between the queues. In that case, however, the
program flow passes both of the two wait conditions but simply does not wait.
Finally, the DA worker may be inactive (again, with a case-2 startup).
In that case no work(er) at all is executed. Most importantly, without the DA
@@ -247,4 +247,4 @@ no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be
viewed at
http://www.gnu.org/copyleft/fdl.html.