On 07/14/14 22:42, Bertrand PROVOST wrote:
Hi,

I'm using syslog with perror flag in some perl script, and I recently
notice that there is an additional newline at the end of each message
on stderr output.

Would anyone know why someone added \n in the first place ?

#####################################################

# cat /tmp/syslog.pl
use Sys::Syslog;

openlog($0, 'cons,pid,perror', 'user');
syslog('info', 'first line');
syslog('info', 'second line');
closelog();

#####################################################

The bug:

# perl /tmp/syslog.pl
/tmp/syslog.pl[14219]: first line

/tmp/syslog.pl[14219]: second line

# tail -n 2 /var/log/all
Jul 14 16:28:49 bsd /tmp/syslog.pl[27039]: first line
Jul 14 16:28:49 bsd /tmp/syslog.pl[27039]: second line


#####################################################

With the "fix"

# perl /tmp/syslog.pl
/tmp/syslog.pl[5146]: first line
/tmp/syslog.pl[5146]: second line
# tail -n 2 /var/log/all
Jul 14 16:37:18 bsd /tmp/syslog.pl[5146]: first line
Jul 14 16:37:18 bsd /tmp/syslog.pl[5146]: second line


#####################################################

Fix:

--- /usr/src/gnu/usr.bin/perl/cpan/Sys-Syslog/Syslog.pm.orig    Mon
Jul 14 13:33:49 2014
+++ /usr/libdata/perl5/amd64-openbsd/5.16.3/Sys/Syslog.pm       Mon
Jul 14 13:50:05 2014
@@ -396,7 +396,7 @@
          $mask =~ s/(?<!%)((?:%%)*)%m/$1$error/g;
      }

-    $mask .= "\n" unless $mask =~ /\n$/;
+    $mask .= "\n" if ( $mask !~ /\n$/ and $current_proto ne 'native');
      $message = @_ ? sprintf($mask, @_) : $mask;

      if ($current_proto eq 'native') {


Look at cvs log?

--
This e-mail is confidential and may not be shared with anyone other than 
recipient(s) without written permission from sender.

Reply via email to