Hello community, here is the log from the commit of package rsyslog for openSUSE:Factory checked in at 2013-11-04 07:09:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rsyslog (Old) and /work/SRC/openSUSE:Factory/.rsyslog.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rsyslog" Changes: -------- --- /work/SRC/openSUSE:Factory/rsyslog/rsyslog.changes 2013-10-29 11:04:24.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.rsyslog.new/rsyslog.changes 2013-11-04 07:09:09.000000000 +0100 @@ -1,0 +2,14 @@ +Thu Oct 31 20:20:51 UTC 2013 - [email protected] + +- update to 7.4.6 [v7.4-stable] [bnc#848574] +- bugfix: potential abort during HUP +- bugfix: imtcp flowControl parameter incorrectly defaulted to "off" +- now requires libestr 0.1.9 for number handling in RainerScript +- bugfix: memory leak in strlen() RainerScript function +- bugfix: buffer overrun if re_extract function was called for submatch 50 +- bugfix: memleak in re_extract() function +- bugfix: potential abort in RainerScript optimizer +- bugfix: memory leak in omhiredis +- bugfix: segfault if variable was assigned to non-container subtree + +------------------------------------------------------------------- @@ -4 +18 @@ -- update to 7.4.5 [v7.5-stable] +- update to 7.4.5 [v7.4-stable] Old: ---- rsyslog-7.4.5.tar.gz New: ---- rsyslog-7.4.6.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rsyslog.spec ++++++ --- /var/tmp/diff_new_pack.55Yw8D/_old 2013-11-04 07:09:10.000000000 +0100 +++ /var/tmp/diff_new_pack.55Yw8D/_new 2013-11-04 07:09:10.000000000 +0100 @@ -20,7 +20,7 @@ Summary: The enhanced syslogd for Linux and Unix License: (GPL-3.0+ and Apache-2.0) Group: System/Daemons -Version: 7.4.5 +Version: 7.4.6 Release: 0 %if 0%{?suse_version} >= 1210 %bcond_without systemd @@ -152,10 +152,10 @@ # but json check is unconditional %if 0%{?suse_version} >= 1210 BuildRequires: pkgconfig(json) >= 0.9 -BuildRequires: pkgconfig(libestr) >= 0.1.8 +BuildRequires: pkgconfig(libestr) >= 0.1.9 %else BuildRequires: libee-devel -BuildRequires: libestr-devel >= 0.1.8 +BuildRequires: libestr-devel >= 0.1.9 BuildRequires: libjson-devel %endif %if 0%{?suse_version} >= 1220 ++++++ rsyslog-7.4.5.tar.gz -> rsyslog-7.4.6.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsyslog-7.4.5/ChangeLog new/rsyslog-7.4.6/ChangeLog --- old/rsyslog-7.4.5/ChangeLog 2013-10-16 12:43:18.000000000 +0200 +++ new/rsyslog-7.4.6/ChangeLog 2013-10-29 16:09:36.000000000 +0100 @@ -1,4 +1,34 @@ --------------------------------------------------------------------------- +Version 7.4.6 [v7.4-stable] 2013-10-31 +- bugfix: potential abort during HUP + This could happen when one of imklog, imzmq3, imkmsg, impstats, + imjournal, or imuxsock were under heavy load during a HUP. + closes: http://bugzilla.adiscon.com/show_bug.cgi?id=489 + Thanks to Guy Rozendorn for reporting the problem and Peval Levhshin for + his analysis. +- bugfix: imtcp flowControl parameter incorrectly defaulted to "off" + This could cause message loss on systems under heavy load and was + a change-of-behaviour to previous version. This is a regression + most probably introduced in 5.9.0 (but did not try hard to find the + exact point of its introduction). +- now requires libestr 0.1.9 as earlier versions lead to problems with + number handling in RainerScript +- bugfix: memory leak in strlen() RainerScript function + Thanks to Gregoire Seux for reportig this bug. + closes: http://bugzilla.adiscon.com/show_bug.cgi?id=486 +- bugfix: buffer overrun if re_extract function was called for submatch 50 + Thanks to Pavel Levshin for reporting the problem and its location. +- bugfix: memleak in re_extract() function + Thanks to Pavel Levshin for reporting this problem. +- bugfix: potential abort in RainerScript optimizer + closes: http://bugzilla.adiscon.com/show_bug.cgi?id=488 + Thanks to Thomas Doll for reporting the problem and Pavel Levshin for + fixing it. +- bugfix: memory leak in omhiredis + Thanks to Pavel Levshin for the fix +- bugfix: segfault if variable was assigned to non-container subtree + Thanks to Pavel Levshin for the fix +--------------------------------------------------------------------------- Version 7.4.5 [v7.4-stable] 2013-10-22 - mmanon: removed the check for specific "terminator characters" after last octet. As it turned out, this didn't work in practice as there diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsyslog-7.4.5/configure new/rsyslog-7.4.6/configure --- old/rsyslog-7.4.5/configure 2013-10-16 12:46:04.000000000 +0200 +++ new/rsyslog-7.4.6/configure 2013-10-29 16:10:20.000000000 +0100 @@ -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.5. +# Generated by GNU Autoconf 2.68 for rsyslog 7.4.6. # # Report bugs to <[email protected]>. # @@ -570,8 +570,8 @@ # Identity of this package. PACKAGE_NAME='rsyslog' PACKAGE_TARNAME='rsyslog' -PACKAGE_VERSION='7.4.5' -PACKAGE_STRING='rsyslog 7.4.5' +PACKAGE_VERSION='7.4.6' +PACKAGE_STRING='rsyslog 7.4.6' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -1594,7 +1594,7 @@ # 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.5 to adapt to many kinds of systems. +\`configure' configures rsyslog 7.4.6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1664,7 +1664,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of rsyslog 7.4.5:";; + short | recursive ) echo "Configuration of rsyslog 7.4.6:";; esac cat <<\_ACEOF @@ -1909,7 +1909,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -rsyslog configure 7.4.5 +rsyslog configure 7.4.6 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2488,7 +2488,7 @@ 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.5, which was +It was created by rsyslog $as_me 7.4.6, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -3303,7 +3303,7 @@ # Define the identity of the package. PACKAGE='rsyslog' - VERSION='7.4.5' + VERSION='7.4.6' cat >>confdefs.h <<_ACEOF @@ -13211,12 +13211,12 @@ pkg_cv_LIBESTR_CFLAGS="$LIBESTR_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libestr >= 0.1.8\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libestr >= 0.1.8") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libestr >= 0.1.9\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libestr >= 0.1.9") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBESTR_CFLAGS=`$PKG_CONFIG --cflags "libestr >= 0.1.8" 2>/dev/null` + pkg_cv_LIBESTR_CFLAGS=`$PKG_CONFIG --cflags "libestr >= 0.1.9" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -13228,12 +13228,12 @@ pkg_cv_LIBESTR_LIBS="$LIBESTR_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libestr >= 0.1.8\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libestr >= 0.1.8") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libestr >= 0.1.9\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libestr >= 0.1.9") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBESTR_LIBS=`$PKG_CONFIG --libs "libestr >= 0.1.8" 2>/dev/null` + pkg_cv_LIBESTR_LIBS=`$PKG_CONFIG --libs "libestr >= 0.1.9" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -13254,14 +13254,14 @@ _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - LIBESTR_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libestr >= 0.1.8" 2>&1` + LIBESTR_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libestr >= 0.1.9" 2>&1` else - LIBESTR_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libestr >= 0.1.8" 2>&1` + LIBESTR_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libestr >= 0.1.9" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBESTR_PKG_ERRORS" >&5 - as_fn_error $? "Package requirements (libestr >= 0.1.8) were not met: + as_fn_error $? "Package requirements (libestr >= 0.1.9) were not met: $LIBESTR_PKG_ERRORS @@ -20766,7 +20766,7 @@ # 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.5, which was +This file was extended by rsyslog $as_me 7.4.6, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -20832,7 +20832,7 @@ 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.5 +rsyslog config.status 7.4.6 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsyslog-7.4.5/configure.ac new/rsyslog-7.4.6/configure.ac --- old/rsyslog-7.4.5/configure.ac 2013-10-16 12:44:10.000000000 +0200 +++ new/rsyslog-7.4.6/configure.ac 2013-10-29 16:09:47.000000000 +0100 @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.61) -AC_INIT([rsyslog],[7.4.5],[[email protected]]) +AC_INIT([rsyslog],[7.4.6],[[email protected]]) AM_INIT_AUTOMAKE m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) @@ -32,7 +32,7 @@ PKG_PROG_PKG_CONFIG # modules we require -PKG_CHECK_MODULES(LIBESTR, libestr >= 0.1.8) +PKG_CHECK_MODULES(LIBESTR, libestr >= 0.1.9) PKG_CHECK_MODULES([JSON_C], [json],, [ PKG_CHECK_MODULES([JSON_C], [json-c]) ]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsyslog-7.4.5/doc/manual.html new/rsyslog-7.4.6/doc/manual.html --- old/rsyslog-7.4.5/doc/manual.html 2013-10-16 12:44:29.000000000 +0200 +++ new/rsyslog-7.4.6/doc/manual.html 2013-10-29 16:09:54.000000000 +0100 @@ -19,7 +19,7 @@ <p><b>Please visit the <a href="http://www.rsyslog.com/sponsors">rsyslog sponsor's page</a> to honor the project sponsors or become one yourself!</b> We are very grateful for any help towards the project goals.</p> -<p><b>This documentation is for version 7.4.5 (v7.4-stable branch) of rsyslog.</b> +<p><b>This documentation is for version 7.4.6 (v7.4-stable branch) of rsyslog.</b> Visit the <i><a href="http://www.rsyslog.com/status">rsyslog status page</a></i></b> to obtain current version information and project status. </p><p><b>If you like rsyslog, you might diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsyslog-7.4.5/grammar/rainerscript.c new/rsyslog-7.4.6/grammar/rainerscript.c --- old/rsyslog-7.4.5/grammar/rainerscript.c 2013-10-16 12:41:54.000000000 +0200 +++ new/rsyslog-7.4.6/grammar/rainerscript.c 2013-10-29 16:08:48.000000000 +0100 @@ -1259,7 +1259,7 @@ str = (char*) var2CString(&r[0], &bMustFree); matchnbr = (short) var2Number(&r[2], NULL); submatchnbr = (size_t) var2Number(&r[3], NULL); - if(submatchnbr > sizeof(pmatch)/sizeof(regmatch_t)) { + if(submatchnbr >= sizeof(pmatch)/sizeof(regmatch_t)) { DBGPRINTF("re_extract() submatch %d is too large\n", submatchnbr); bHadNoMatch = 1; goto finalize_it; @@ -1307,11 +1307,12 @@ iLenBuf); } +finalize_it: if(bMustFree) free(str); if(r[0].datatype == 'S') es_deleteStr(r[0].d.estr); if(r[2].datatype == 'S') es_deleteStr(r[2].d.estr); if(r[3].datatype == 'S') es_deleteStr(r[3].d.estr); -finalize_it: + if(bHadNoMatch) { cnfexprEval(func->expr[4], &r[4], usrptr); estr = var2String(&r[4], &bMustFree); @@ -1358,6 +1359,7 @@ estr = var2String(&r[0], &bMustFree); ret->d.n = es_strlen(estr); if(bMustFree) es_deleteStr(estr); + if(r[0].datatype == 'S') es_deleteStr(r[0].d.estr); } ret->datatype = 'N'; break; @@ -2924,12 +2926,15 @@ expr->r = exprswap; } } - if(expr->l->nodetype == 'V') { - expr = cnfexprOptimize_CMP_var(expr); - } if(expr->r->nodetype == 'A') { cnfexprOptimize_CMPEQ_arr((struct cnfarray *)expr->r); } + /* This should be evaluated last because it may change expr + * to a function. + */ + if(expr->l->nodetype == 'V') { + expr = cnfexprOptimize_CMP_var(expr); + } break; case CMP_LE: case CMP_GE: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsyslog-7.4.5/plugins/imtcp/imtcp.c new/rsyslog-7.4.6/plugins/imtcp/imtcp.c --- old/rsyslog-7.4.5/plugins/imtcp/imtcp.c 2013-10-16 12:41:49.000000000 +0200 +++ new/rsyslog-7.4.6/plugins/imtcp/imtcp.c 2013-10-29 16:08:48.000000000 +0100 @@ -408,7 +408,7 @@ loadModConf->iTCPLstnMax = 20; loadModConf->bSuppOctetFram = 1; loadModConf->iStrmDrvrMode = 0; - loadModConf->bUseFlowControl = 0; + loadModConf->bUseFlowControl = 1; loadModConf->bKeepAlive = 0; loadModConf->bEmitMsgOnClose = 0; loadModConf->iAddtlFrameDelim = TCPSRV_NO_ADDTL_DELIMITER; @@ -631,7 +631,7 @@ cs.iTCPLstnMax = 20; cs.bSuppOctetFram = 1; cs.iStrmDrvrMode = 0; - cs.bUseFlowControl = 0; + cs.bUseFlowControl = 1; cs.bKeepAlive = 0; cs.bEmitMsgOnClose = 0; cs.iAddtlFrameDelim = TCPSRV_NO_ADDTL_DELIMITER; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsyslog-7.4.5/plugins/omhiredis/omhiredis.c new/rsyslog-7.4.6/plugins/omhiredis/omhiredis.c --- old/rsyslog-7.4.5/plugins/omhiredis/omhiredis.c 2013-09-18 10:54:18.000000000 +0200 +++ new/rsyslog-7.4.6/plugins/omhiredis/omhiredis.c 2013-10-16 13:30:36.000000000 +0200 @@ -198,7 +198,7 @@ /* TODO: add error checking here! */ free ( pData->replies[i] ); } - free ( pData->replies ); + freeReplyObject ( pData->replies ); pData->count = 0; ENDendTransaction diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsyslog-7.4.5/runtime/glbl.c new/rsyslog-7.4.6/runtime/glbl.c --- old/rsyslog-7.4.5/runtime/glbl.c 2013-10-16 12:41:49.000000000 +0200 +++ new/rsyslog-7.4.6/runtime/glbl.c 2013-10-29 16:08:48.000000000 +0100 @@ -32,6 +32,7 @@ #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> +#include <pthread.h> #include <assert.h> #include "rsyslog.h" @@ -71,6 +72,7 @@ static int bDisableDNS = 0; /* don't look up IP addresses of remote messages */ static prop_t *propLocalIPIF = NULL;/* IP address to report for the local host (default is 127.0.0.1) */ static prop_t *propLocalHostName = NULL;/* our hostname as FQDN - read-only after startup */ +static prop_t *propLocalHostNameToDelete = NULL;/* see GenerateLocalHostName function hdr comment! */ static uchar *LocalHostName = NULL;/* our hostname - read-only after startup, except HUP */ static uchar *LocalHostNameOverride = NULL;/* user-overridden hostname - read-only after startup */ static uchar *LocalFQDNName = NULL;/* our hostname as FQDN - read-only after startup, except HUP */ @@ -379,17 +381,31 @@ /* generate the local hostname property. This must be done after the hostname info * has been set as well as PreserveFQDN. * rgerhards, 2009-06-30 + * NOTE: This function tries to avoid locking by not destructing the previous value + * immediately. This is so that current readers can continue to use the previous name. + * Otherwise, we would need to use read/write locks to protect the update process. + * In order to do so, we save the previous value and delete it when we are called again + * the next time. Note that this in theory is racy and can lead to a double-free. + * In practice, however, the window of exposure to trigger this is extremely short + * and as this functions is very infrequently being called (on HUP), the trigger + * condition for this bug is so highly unlikely that it never occurs in practice. + * Probably if you HUP rsyslog every few milliseconds, but who does that... + * To further reduce risk potential, we do only update the property when there + * actually is a hostname change, which makes it even less likely. + * rgerhards, 2013-10-28 */ static rsRetVal GenerateLocalHostNameProperty(void) { - DEFiRet; + uchar *pszPrev; + int lenPrev; + prop_t *hostnameNew; uchar *pszName; + DEFiRet; - if(propLocalHostName != NULL) - prop.Destruct(&propLocalHostName); + if(propLocalHostNameToDelete != NULL) + prop.Destruct(&propLocalHostNameToDelete); - CHKiRet(prop.Construct(&propLocalHostName)); if(LocalHostNameOverride == NULL) { if(LocalHostName == NULL) pszName = (uchar*) "[localhost]"; @@ -403,8 +419,20 @@ pszName = LocalHostNameOverride; } DBGPRINTF("GenerateLocalHostName uses '%s'\n", pszName); - CHKiRet(prop.SetString(propLocalHostName, pszName, ustrlen(pszName))); - CHKiRet(prop.ConstructFinalize(propLocalHostName)); + + if(propLocalHostName == NULL) + pszPrev = (uchar*)""; /* make sure strcmp() below does not match */ + else + prop.GetString(propLocalHostName, &pszPrev, &lenPrev); + + if(ustrcmp(pszPrev, pszName)) { + /* we need to update */ + CHKiRet(prop.Construct(&hostnameNew)); + CHKiRet(prop.SetString(hostnameNew, pszName, ustrlen(pszName))); + CHKiRet(prop.ConstructFinalize(hostnameNew)); + propLocalHostNameToDelete = propLocalHostName; + propLocalHostName = hostnameNew; + } finalize_it: RETiRet; @@ -667,6 +695,8 @@ free(LocalHostNameOverride); free(LocalFQDNName); objRelease(prop, CORE_COMPONENT); + if(propLocalHostNameToDelete != NULL) + prop.Destruct(&propLocalHostNameToDelete); DESTROY_ATOMIC_HELPER_MUT(mutTerminateInputs); ENDObjClassExit(glbl) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsyslog-7.4.5/runtime/msg.c new/rsyslog-7.4.6/runtime/msg.c --- old/rsyslog-7.4.5/runtime/msg.c 2013-10-16 12:41:49.000000000 +0200 +++ new/rsyslog-7.4.6/runtime/msg.c 2013-10-29 16:08:48.000000000 +0100 @@ -3934,6 +3934,12 @@ } leaf = jsonPathGetLeaf(name, ustrlen(name)); CHKiRet(jsonPathFindParent(pM, name, leaf, &parent, 1)); + if (json_object_get_type(parent) != json_type_object) { + DBGPRINTF("msgAddJSON: not a container in json path," + "name is '%s'\n", name); + json_object_put(json); + ABORT_FINALIZE(RS_RET_INVLD_SETOP); + } leafnode = json_object_object_get(parent, (char*)leaf); if(leafnode == NULL) { json_object_object_add(parent, (char*)leaf, json); -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
