[syslog-ng] Writing to a named Pipe

Pedro Rafael Alves Simoes pedro.a.simoes at gmail.com
Tue Jan 27 13:06:05 CET 2009


The patch worked. Is there any way to create the pipes on the fly?


Date: Thu, 22 Jan 2009 19:39:48 +0100
From: Balazs Scheidler <bazsi at balabit.hu>
Subject: Re: [syslog-ng] Writing to a named Pipe
To: Syslog-ng users' and developers' mailing list
       <syslog-ng at lists.balabit.hu>
Message-ID: <1232649588.15998.177.camel at bzorp.balabit>
Content-Type: text/plain

On Thu, 2009-01-22 at 15:26 +0000, Pedro Rafael Alves Simoes wrote:
> Hello,
>
> In my syslog-ng configuration I'm writing messages to named pipes
> which name is given dynamically by the $PRI macro:
>
> destination d_test {
>   pipe("/tmp/$PRI.log");
> };
>
> All the possible PRI.log pipes were created previously with mkfifo.
>
> With this configuration the messages aren't being written to the
> pipes. It simply does nothing. Doing a strace on the syslog-ng
> process, it shows an error :
>
> open("/tmp/$PRI.log", O_RDWR|O_NONBLOCK|O_NOCTTY|O_LARGEFILE) = -1
> ENOENT (No such file or directory)
>
> It seems that the PRI macro isn't being interpolated in the string.

well, the pipe() driver does not support macros, thus it uses the string
literally. More exactly the pipe driver explicitly disallows that. Since
I don't remember exactly why I did this, here's a patch that removes the
restriction.

Please let me know how it works out for you, if it seems to work, I'm
also willing to integrate it. Patch is against OSE 3.0, but is trivial
to backport to 2.1

diff --git a/src/cfg-grammar.y b/src/cfg-grammar.y
index 761bb56..fdfa18f 100644
--- a/src/cfg-grammar.y
+++ b/src/cfg-grammar.y
@@ -801,7 +801,7 @@ dest_afpipe
 dest_afpipe_params
       : string
         {
-           last_driver = affile_dd_new($1, AFFILE_NO_EXPAND | AFFILE_PIPE);
+           last_driver = affile_dd_new($1, AFFILE_PIPE);
           free($1);
           last_writer_options = &((AFFileDestDriver *)
last_driver)->writer_options;
           last_writer_options->flush_lines = 0;


--
Bazsi


More information about the syslog-ng mailing list