[syslog-ng] BUG in syslog-ng-1.6.12
Balazs Scheidler
bazsi at balabit.hu
Thu Apr 19 12:42:43 CEST 2007
On Wed, 2007-04-18 at 19:33 +0200, S. Schulz wrote:
> Hi,
> 1) I found a bug in syslog-ng-1.6.12.
> If i use the MSGONLY macro the first char of the message is missing.
>
> Here is the patch:
> -snip--------------------------------
> 426,427c426,428
> < colon++;
> < ofs = (colon - (char *) msg->msg->data);
> ---
> > ofs = (colon - (char *) msg->msg->data) + 2;
> > if (ofs > msg->msg->length)
> > ofs = msg->msg->length;
> -snap--------------------------------
Yes, this indeed seems to be a bug, but this does not seem to affect
2.0.x tree. Do you have some reasons to stick with 1.6.x?
>
> 2) And I have an other problem with a regexp in a filter.
> I want to log all messages that contains the "[ERR]" string to a separate err log.
> My filter, destination and log looks like this:
> filter f_usererr { facility(user) and match('\[ERR\]'); };
> destination d_usererr {file("/var/log/$SOURCEIP_$PROGRAM.err"); };
> log { source(s_net); filter(f_usererr); destination(d_usererr); };
>
> What I get is a line like
> test[1234]:[ERR] fopen failed
> but also
> test[1234]:Event 1
> or
> test[1234]:Released
>
> So it seems to be that the backslash before the [ is ignored.
> If I change the filter to
> filter f_usererr { facility(user) and match('ERR\]'); };
> I get only the line
> test[1234]:[ERR] fopen failed
> as expected
you need double backslashes as the first one is absorbed by the
configuration parser to be able to escape apostrophes. If you need a
real backslash, you need to double them like:
match('\\[ERR\\]')
>
> 3) And I have a third problem with creation of a filename based on the IP
> destination d_usererr {file("/var/log/$SOURCEIP_$PROGRAM.err"); };
> The created filename is "/var/log/bla.err" and the $SOURCEIP is missing
yes, because '_' is taken part of a word and thus syslog-ng tries to
substitute the macro named "SOURCEIP_" which obviously does not exist.
syslog-ng 2.0 provides an alternative, shell-like expansion syntax:
destination d_usererr {file("/var/log/${SOURCEIP_}$PROGRAM.err"); };
Alternatively use something different than '_'
>
> If I change the destination to
> destination d_usererr {file("/var/log/$SOURCEIP-$PROGRAM.err"); };
> the created filename is "/var/log/192.168.1.1-bla.err" as expected
see above.
--
Bazsi
More information about the syslog-ng
mailing list