[syslog-ng]template() and template_escape() extension for all destination drivers

Balazs Scheidler bazsi@balabit.hu
Wed, 30 Oct 2002 20:47:55 +0100

On Thu, Sep 12, 2002 at 11:29:11AM +0200, Achim Gsell wrote:
> Hi,
> We need the "template()" and "template_escape()" options in all destination 
> drivers, not only in the "file" driver. The attached patch adds these options 
> to all other destination drivers in syslog-ng 1.5.20. We test the patch on 
> Linux 2.2.20 and Solaris 8.
> Is there a reason to have these options available only in the "file" 
> destination driver?


I came to having some time to integrate pending patches, and found your
patch. I have a couple of comments, which needs to be fixed before releasing
a syslog-ng with these parts integrated.

* expand_macro & friends should be declared in a header file instead of
  declaring it in every referencing module.  maybe a new file called
  macros.c would be a good way of resolving this problem.

* expand_macros returns a newly allocated string, which must be freed, so
  constructs like this cause memory leaks:

+               if (self->template_output)
+                       A_WRITE_STRING(&self->dest_buf->super,
+                                      c_format("<%i>%S\n",
+                                               msg->pri, expand_macros(self->cfg, self->template_output, self->template_escape, msg)));

c_format() has an option to free an ol_string by specifying 'f' like this:

c_format("%fS", expand_macros()) ...

Otherwise your patch looks ok to me. If you want to have it integrated prior
to 1.6.0 is being released, please send a modified diff.

Thanks in advance,

PGP info: KeyID 9AF8D0A9 Fingerprint CD27 CFB0 802C 0944 9CFD 804E C82C 8EB1