<div dir="ltr"><h1>3.7.1</h1><h2>New dependencies</h2><p style="font-size:12.8000001907349px">OpenSSL is now a required dependency for syslog-ng because the newly added <br><code>hostid</code> and <code>uniqid</code> features requires a CPRNG provided by OpenSSL.<br>Therefore non-embedded crypto lib is not a real option, so the support of <br>having such a crypto lib discontinued and all SSL-dependent features enabled<br>by default.</p><h2>Library updates</h2><ul style="font-size:12.8000001907349px"><li style="margin-left:15px">Minimal libriemann-client version bumped from 1.0.0 to 1.6.0.</li><li style="margin-left:15px">Added support for the monolithic libsystemd library (systemd 209).</li><li style="margin-left:15px">RabbitMQ submodule upgraded.</li></ul><h2>Features</h2><h3>Language bindings</h3><ul style="font-size:12.8000001907349px"><li style="margin-left:15px"><p>Java-destination driver ported from syslog-ng-incubator.<br>Purpose of having Java destination driver is to make it possible<br>to implement destination drivers in the Java language (and using<br>&#39;official&#39; Java client libraries).</p></li><li style="margin-left:15px"><p>Python language support is ported from syslog-ng incubator and <br>has been completely reworked. Now, it is possible to implement template<br>functions in Python language and also destination drivers.<br>Main purpose of supporting Python language is to implement a nice<br>interactive syslog-ng config debugger for syslog-ng.</p></li></ul><h3>New drivers</h3><h4 style="font-size:12.8000001907349px">New Java destination drivers</h4><p style="font-size:12.8000001907349px">ElastiSearch, Kafka and HDFS destination drivers are implemented by using<br>the &#39;official&#39; Java client libraries and syslog-ng provides a way to set<br>their own, native configuration file. Log messages generated by the client <br>Java libraries are redirected to syslog-ng via our own Log4JAppender which<br>means that those logs are available as internal syslog-ng messages.</p><ul style="font-size:12.8000001907349px"><li style="margin-left:15px">ElasticSearch</li><li style="margin-left:15px">Kafka</li><li style="margin-left:15px">Hadoop/HDFS</li><li style="margin-left:15px">HTTP</li></ul><h3>Parsers</h3><ul style="font-size:12.8000001907349px"><li style="margin-left:15px"><p>Added a <code>geoip()</code> parser, that can look up the country code and<br>latitude/longitude information from an IPv4 address. For lat/long to<br>work, one will need the City database.</p></li><li style="margin-left:15px"><p>New parser, <code>extract-solaris-msgid()</code> added for automatically extracts<br>(parses &amp; removes) the msgid portion of Solaris messages.</p></li><li style="margin-left:15px"><p>Extended the set of supported characters to every printable ASCII&#39;s except<br><code>.</code>, <code>[</code> and <code>]</code> in <code>extract-prefix</code> for <code>json-parser()</code>.</p></li><li style="margin-left:15px"><p>Added string-delimiters option to csvparser to support multi character<br>delimiters in CSV parsing.</p></li><li style="margin-left:15px"><p>A kv-parser() introduced for WELF (WebTrens Enhanced Log Format) that <br>implements key=value parsing. The kv-parser() tries to extract <br>key=value formatted name-value pairs from the input string.</p></li><li style="margin-left:15px"><p>value-pairs: make it possible to pass --key as a positional argument<br>From now it is possible to use value-pairs expressions like this:<br><br>$(format-json MSG DATE)<br><br>instead of<br><br>$(format-json --key MSG --key DATE)</p></li></ul><h3>Filters</h3><ul style="font-size:12.8000001907349px"><li style="margin-left:15px">Added IPv6 netmask filter for selecting only messages sent by a host whose IP address belongs to the specified IPv6 subnet.</li></ul><h3>Macros</h3><ul style="font-size:12.8000001907349px"><li style="margin-left:15px"><p>Added a new macro, called HOSTID which is a 32-bit number generated by<br>a cryptographically secure PRNG. Its purpose is to identify the<br>syslog-ng host, thus it is the same for every message generated on the same<br>host.</p></li><li style="margin-left:15px"><p>Added a new macro, called UNIQID which is a practically unique ID generated<br>from the <code>HOSTID</code> and the <code>RCPTID</code> in the format of <code>HOSTID@RCPTID</code>. <br>Uniqid is a derived value: it is built up from the always available hostid<br>and the optional rcptid. In other words: uniqid is an extension over rcptid.<br>For that reason <code>use-rcptid</code> has been deprecated and <code>use-uniqid</code> could be<br>use instead.</p></li></ul><h3>Templates</h3><ul style="font-size:12.8000001907349px"><li style="margin-left:15px"><p>welf was renamed to kvformat<br>As this reflects the purpose of this module much better, WELF is just<br>one of the format it has support for.</p></li><li style="margin-left:15px"><p>$(format-cim) template function added into an SCL module.</p></li><li style="margin-left:15px">It is possible to create templates without braces.</li></ul><h3>SMTP destination</h3><ul style="font-size:12.8000001907349px"><li style="margin-left:15px">The <code>afsmtp</code> driver now supports templatable recipients field. Just like the subject() and body() fields, now the address containing parameters of to(), from(), cc() and bcc() can contain macros.</li></ul><h3>Unix Domain Sockets</h3><ul style="font-size:12.8000001907349px"><li style="margin-left:15px"><p>Added pass-unix-credentials() global option for enabling/disabling unix <br>credentials passing on those platforms which has this feature. By default<br>it is enabled.</p></li><li style="margin-left:15px"><p>Added create-dirs() option to unix-*() sources for creating the<br>containing directories for Unix domain sockets.</p></li></ul><h3>Riemann destination</h3><ul style="font-size:12.8000001907349px"><li style="margin-left:15px"><p>Added batched event sending support for riemann destination driver which<br>makes the riemann destination respect flush-lines(), and send event<br>in batches of configurable amount (defaults to 1). In case of an error,<br>all messages within the batch will be dropped. Dropped messages, and<br>messages that result in formatting errors do not count towards the batch<br>size. There is no timeout, but messages will be flushed upon deinit.</p></li><li style="margin-left:15px"><p>A timeout() option added to the Riemann destination.</p></li></ul><h3>PatternDB</h3><ul style="font-size:12.8000001907349px"><li style="margin-left:15px">Earlier, in patterndb, the first applicable rule won, even if it was only a partial match. This means that when rules overlapped, the shorter match would have been found, if it was the first to be loaded. A strong preference introduced for rules that match the input string completely. The load order is still applicable though, it is possible to create two distinct rules that would match the same input, in those cases the first one to be loaded wins.</li></ul><h3>Miscellaneous features</h3><ul style="font-size:12.8000001907349px"><li style="margin-left:15px"><p>New builtin interactive syslog-ng.conf debugger implemented for syslog-ng.<br>The debugger has a Python frontend which contains a full Completer<br>(just press TABs and works like bash)</p></li><li style="margin-left:15px"><p>Added a reset option to syslog-ng-ctl stats. With this option the non-stored<br>stats counters can be zeroed.</p></li><li style="margin-left:15px"><p>New parameter added to loggen: --permanent (-T) wich is for sending logs <br>indefinitely.</p></li><li style="margin-left:15px"><p>Loggen uses the proper timezone offset in generated message.</p></li><li style="margin-left:15px"><p>The ssl_options inside tls() extended with the following set:<br>no-sslv2, no-sslv3, no-tlsv1, no-tlsv11, no-tlsv12.</p></li><li style="margin-left:15px"><p>Added syslog-debug bundle generator script to make it easier to reproduce bugs<br>by collecting debug related information, like:</p><ul><li style="margin-left:15px">process information gathering</li><li style="margin-left:15px">syscall tracing (strace/truss)</li><li style="margin-left:15px">configuration gathering</li><li style="margin-left:15px">selinux related information gathering</li><li style="margin-left:15px">solaris information gathering (sysdef, kstat, showrev, release)</li><li style="margin-left:15px">get information about syslog-ng svr4 solaris packages, if possible</li></ul></li></ul><h2>Bugfixes</h2><ul style="font-size:12.8000001907349px"><li style="margin-left:15px"><p>New utf8 string sanitizers instead of old broken one.</p></li><li style="margin-left:15px"><p>syslog-ng won&#39;t send SIGTERM when <code>getpgid()</code> fails in program destination<br>(<code>afprog</code>).</p></li><li style="margin-left:15px"><p>In some cases program destination respawned during syslog-ng stop/restart<br>(<code>afprog</code>).</p></li><li style="margin-left:15px"><p>syslog-ng generates mark messages when <code>mark-mode</code> is set<br>to <code>host-idle</code>.</p></li><li style="margin-left:15px"><p>Using msg_control only when credential passing is supported in socket <br>destination (<code>afsocket</code>).</p></li><li style="margin-left:15px"><p>Writer is replaced only when protocol changed during reload in socket<br>destination (<code>afsocket</code>).</p></li><li style="margin-left:15px"><p>Fix spinning on EOF for <code>unix-stream()</code> sockets. Root cause of the spinning<br>was that a unix-dgram socket was created even in case of unix-stream.</p></li><li style="margin-left:15px"><p>When the configured host was not available during the initialization of<br><code>afsocket</code> destination syslog-ng just didn&#39;t start. From now, syslog-ng<br>starts in that case and will retry connecting to the host periodically.</p></li><li style="margin-left:15px"><p>Fixed BSD year inference in syslogformat. When the difference between the<br>current month and the month part of the timestamp of an incoming logmessage<br>in BSD format (which has no year part) was greater than 1 then syslog-ng<br>computed the year badly.</p></li><li style="margin-left:15px"><p>In some cases, localtime related macros had a wrong value(eg.:$YEAR).</p></li><li style="margin-left:15px"><p>TLS support added to Riemann destination</p></li><li style="margin-left:15px"><p>Excluded &quot;tags&quot; from Riemann destination driver as an attribute which <br>conflicts with reserved keyword</p></li><li style="margin-left:15px"><p>When a not writeable/non-existent file becomes writeable/exists later,<br>syslog-ng recognize it (with the help of reopen-timer) and delivers messages<br>to the file without dropping those which were received while the file was<br>not available (<code>affile</code>).</p></li><li style="margin-left:15px"><p>Fixed a crash around affile at the first message delivery when templates<br>were used (<code>affile</code>).</p></li><li style="margin-left:15px"><p>Fixed a configure error around libsystemd-journal.</p></li><li style="margin-left:15px"><p>Removed syslog.socket from service file on systems using systemd.<br>Syslog-ng reads the messages directly from journal on systems with systemd.</p></li><li style="margin-left:15px"><p>Fixed compilation where the monolitic libsystemd was not available.</p></li><li style="margin-left:15px"><p>Fixed compilation failure on OpenBSD.</p></li><li style="margin-left:15px"><p>AMQP connection process fixed.</p></li><li style="margin-left:15px"><p>Added DOS/Windows line ending support in config.</p></li><li style="margin-left:15px"><p>Retries fixed in SQL destination. In some circumstances when<br><code>retry_sql_inserts</code> was set to 1, after an insertion failure all incoming<br>messages were dropped.</p></li><li style="margin-left:15px"><p>Transaction handling fixed in SQL destination. In some circumstances when<br>both select and insert commands were run within a single transaction and<br>the select failed (eg.: in case of mssql), the log messages related to<br>the insert commands, broken by the invalid transaction, were lost.</p></li><li style="margin-left:15px"><p>Fixed a memleak in SQL destination driver.<br>The memleak occured during one of the transaction failures.</p></li><li style="margin-left:15px"><p>Memory leak around reload and internal queueing mechanism has been fixed.</p></li><li style="margin-left:15px"><p>Fixed a potential abort when the localhost name cannot be detected.</p></li><li style="margin-left:15px"><p>Security issue fixed around $HOST.<br>Tech details:<br>When the name of the host is too long, the buffer we use to format the<br>chained hostname is truncated. However snprintf() returns the length the<br>result would be if no truncation happened, thus we will read uninitialized<br>bytes off the stack when we use that pointer to set $HOST<br>with log_msg_set_value().</p><p>There can be some security implications, like reading values from the stack<br>that can help to craft further exploits, especially in the presense of<br>address space randomization. It can also cause a DoS if the hostname length<br>is soo large that we would read over the top-of-the-stack, which is probably<br>not mmapped causing a SIGSEGV.</p></li><li style="margin-left:15px"><p>Journal entries containing name-value pairs without &#39;=&#39; caused syslog-ng<br>to crash. Instead of crashing, syslog-ng just drop these nv pairs.</p></li><li style="margin-left:15px"><p>Fixed the encoding of characters below 32 if escaping is enabled in <br>templates. Templated outputs never contained references to characters below<br>32, essentially they were dropped from the output for two reasons:</p><ul><li style="margin-left:15px">the prefixing backslash was removed from the code</li><li style="margin-left:15px">the format_uint32_padded() function produced no outputs in base 8</li></ul></li><li style="margin-left:15px"><p>Fixed afstomp destination port issue. It always tried to connect to the port 0.</p></li><li style="margin-left:15px"><p>Fixed memleak in db-parser which could happen at every reload.</p></li><li style="margin-left:15px"><p>Fixed a class of rule conflicts in db-parser:<br>Because an error in the pdb load algorithms, some rules would conflict which<br>shouldn&#39;t have done that. The problem was that several programs would use <br>the same RADIX tree to store their patterns. Merging independent programs <br>meant that if they the same pattern listed, it would clash, even though<br><br>their $PROGRAM is different.</p><p>There were multiple issues:</p><ul><li style="margin-left:15px"><p>we looked up pattern string directly, even they might have contained<br><a href="https://github.com/parser" target="_blank">@parser</a>@ references. It was simply not designed that way and only<br><br>worked as long as we didn&#39;t have the possibility to use parsers<br><br>in program names</p></li><li style="margin-left:15px"><p>we could merge programs with the same prefix, e.g.<br>su, supervise/syslog-ng and supervise/logindexd would clash, on &quot;su&quot;,<br>which is a common prefix for all three.</p></li></ul><p>The solution involved in using a separate hash table for loading, which<br>at the end is turned into the radix tree.</p></li><li style="margin-left:15px"><p>pdbtool match when used with the --debug-pattern option used a low-level<br>lookup function, that didn&#39;t perform all the db-parser actions specified<br>in the rule</p></li><li style="margin-left:15px"><p>Max packet length for spoof source is set to 1024 (previously : 256).</p></li><li style="margin-left:15px"><p>A certificate which is not contained by the list of fingerprints is<br>rejected from now.</p></li><li style="margin-left:15px"><p>Hostname check in tls certificate is case insensitive from now.</p></li><li style="margin-left:15px"><p>There is a use-case where user wants to ignore an assignment to a name-value<br>pair. (eg.: when using <code>csv-parser()</code>, sometimes we get a column we really<br>want to drop instead of adding it to the message). In previous versions an<br>error message was printed out:<br>&#39;Name-value pairs cannot have a zero-length name&#39;.<br>That error message has been removed.</p></li><li style="margin-left:15px"><p>Fixed a docbook related compilation error: there was a hardcoded path that<br>caused build to fail if docbook is not on that path. Debian based<br>platforms did not affected by this problem.<br>Now a new option was created for <code>./configure</code> that is <code>--enable-manpages</code><br>that enables the generation of manpages using docbook from online source.<br>&#39;--with-docbook=PATH&#39; gives you the opportunity to specify the path for<br>your own installed docbook.</p></li></ul><h2>Credits</h2><p style="font-size:12.8000001907349px">syslog-ng is developed as a community project, and as such it relies<br>on volunteers, to do the work necessarily to produce syslog-ng.</p><p style="font-size:12.8000001907349px">Reporting bugs, testing changes, writing code or simply providing<br>feedback are all important contributions, so please if you are a user<br>of syslog-ng, contribute.</p><p style="font-size:12.8000001907349px">We would like to thank the following people for their contribution:</p><p style="font-size:12.8000001907349px">Adam Arsenault, Adam Istvan Mozes, Alex Badics, Andras Mitzki, <br>Balazs Scheidler, Bence Tamas Gedai, Ben Kibbey, Botond Borsits, Fabien Wernli,<br>Gergely Nagy, Gergo Nagy, Gyorgy Pasztor, Kristof Havasi, Laszlo Budai,<br>Manikandan-Selvaganesh, Michael Sterrett, Peter Czanik, Robert Fekete, <br>Sean Hussey, Tibor Benke, Toralf Förster, Viktor Juhasz, Viktor Tusa, <br>Vincent Bernat, Zdenek Styblik, Zoltan Fried, Zoltan Pallagi.</p><p style="color:rgb(102,102,102)">—<br><a href="https://github.com/balabit/syslog-ng/releases/tag/syslog-ng-3.7.1" target="_blank">View it on GitHub</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/AGRToMXn0A4UBbtopoyd4ErqtSvrnEXPks5ooeq6gaJpZM4Fs24G.gif" width="1" class="CToWUd"></p></div>