Quoting Vincent Lefevre (2025-01-30 13:12:58)
> On 2025-01-30 12:36:48 +0100, Johannes Schauer Marin Rodrigues wrote:
> > actually, I missed that the version of Parse::Syslog in Trixie is already 
> > the
> > latest one. So the attached patch is sufficient to fix this as well. :)
> 
> Shouldn't the patch add a depends on libparse-syslog-perl?

It absolutely should! Updated patch attached. Thank you! :)
diff -Nru mailgraph-1.14/debian/changelog mailgraph-1.14/debian/changelog
--- mailgraph-1.14/debian/changelog	2024-06-30 19:29:48.000000000 +0200
+++ mailgraph-1.14/debian/changelog	2025-01-30 12:33:17.000000000 +0100
@@ -1,3 +1,10 @@
+mailgraph (1.14-22.1) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * 
+
+ -- Johannes Schauer Marin Rodrigues <jo...@debian.org>  Thu, 30 Jan 2025 12:33:17 +0100
+
 mailgraph (1.14-22) unstable; urgency=medium
 
   * Refresh debian/patches/0100-new_syslog_format.patch:
diff -Nru mailgraph-1.14/debian/control mailgraph-1.14/debian/control
--- mailgraph-1.14/debian/control	2023-09-24 13:23:29.000000000 +0200
+++ mailgraph-1.14/debian/control	2025-01-30 12:33:17.000000000 +0100
@@ -17,6 +17,7 @@
  ${misc:Depends},
  ${perl:Depends},
  libfile-tail-perl,
+ libparse-syslog-perl,
  librrds-perl,
  ucf (>= 0.28)
 Pre-Depends:
diff -Nru mailgraph-1.14/debian/patches/libparse-syslog-perl.patch mailgraph-1.14/debian/patches/libparse-syslog-perl.patch
--- mailgraph-1.14/debian/patches/libparse-syslog-perl.patch	1970-01-01 01:00:00.000000000 +0100
+++ mailgraph-1.14/debian/patches/libparse-syslog-perl.patch	2025-01-30 12:33:17.000000000 +0100
@@ -0,0 +1,393 @@
+--- a/mailgraph.pl
++++ b/mailgraph.pl
+@@ -9,382 +9,13 @@
+ # copyright (c) 2018 by M.D. Klapwijk
+ # released under the GNU General Public License
+ 
+-######## Parse::Syslog 1.09 (automatically embedded) ########
+-package Parse::Syslog;
+-use Carp;
+-use Symbol;
+-use Time::Local;
+-use IO::File;
+-use strict;
+-use vars qw($VERSION);
+-my %months_map = (
+-    'Jan' => 0, 'Feb' => 1, 'Mar' => 2,
+-    'Apr' => 3, 'May' => 4, 'Jun' => 5,
+-    'Jul' => 6, 'Aug' => 7, 'Sep' => 8,
+-    'Oct' => 9, 'Nov' =>10, 'Dec' =>11,
+-    'jan' => 0, 'feb' => 1, 'mar' => 2,
+-    'apr' => 3, 'may' => 4, 'jun' => 5,
+-    'jul' => 6, 'aug' => 7, 'sep' => 8,
+-    'oct' => 9, 'nov' =>10, 'dec' =>11,
+-);
+-sub is_dst_switch($$$)
+-{
+-    my ($self, $t, $time) = @_;
+-    # calculate the time in one hour and see if the difference is 3600 seconds.
+-    # if not, we are in a dst-switch hour
+-    # note that right now we only support 1-hour dst offsets
+-    # cache the result
+-    if(defined $self->{is_dst_switch_last_hour} and
+-        $self->{is_dst_switch_last_hour} == $t->[3]<<5+$t->[2]) {
+-        return @{$self->{is_dst_switch_result}};
+-    }
+-    # calculate a number out of the day and hour to identify the hour
+-    $self->{is_dst_switch_last_hour} = $t->[3]<<5+$t->[2];
+-    # calculating hour+1 (below) is a problem if the hour is 23. as far as I
+-    # know, nobody does the DST switch at this time, so just assume it isn't
+-    # DST switch if the hour is 23.
+-    if($t->[2]==23) {
+-        @{$self->{is_dst_switch_result}} = (0, undef);
+-        return @{$self->{is_dst_switch_result}};
+-    }
+-    # let's see the timestamp in one hour
+-    # 0: sec, 1: min, 2: h, 3: day, 4: month, 5: year
+-    my $time_plus_1h = timelocal($t->[0], $t->[1], $t->[2]+1, $t->[3], $t->[4], $t->[5]);
+-    if($time_plus_1h - $time > 4000) {
+-        @{$self->{is_dst_switch_result}} = (3600, $time-$time%3600+3600);
+-    }
+-    else {
+-        @{$self->{is_dst_switch_result}} = (0, undef);
+-    }
+-    return @{$self->{is_dst_switch_result}};
+-}
+-# fast timelocal, cache minute's timestamp
+-# don't cache more than minute because of daylight saving time switch
+-# 0: sec, 1: min, 2: h, 3: day, 4: month, 5: year
+-sub str2time($$$$$$$$)
+-{
+-    my $self = shift @_;
+-    my $GMT = pop @_;
+-    my $lastmin = $self->{str2time_lastmin};
+-    if(defined $lastmin and
+-        $lastmin->[0] == $_[1] and
+-        $lastmin->[1] == $_[2] and
+-        $lastmin->[2] == $_[3] and
+-        $lastmin->[3] == $_[4] and
+-        $lastmin->[4] == $_[5])
+-    {
+-        $self->{last_time} = $self->{str2time_lastmin_time} + $_[0];
+-        return $self->{last_time} + ($self->{dst_comp}||0);
+-    }
+-    my $time;
+-    if($GMT) {
+-        $time = timegm(@_);
+-    }
+-    else {
+-        $time = timelocal(@_);
+-    }
+-    # compensate for DST-switch
+-    # - if a timewarp is detected (1:00 -> 1:30 -> 1:00):
+-    # - test if we are in a DST-switch-hour
+-    # - compensate if yes
+-    # note that we assume that the DST-switch goes like this:
+-    # time   1:00  1:30  2:00  2:30  2:00  2:30  3:00  3:30
+-    # stamp   1     2     3     4     3     3     7     8
+-    # comp.   0     0     0     0     2     2     0     0
+-    # result  1     2     3     4     5     6     7     8
+-    # old Time::Local versions behave differently (1 2  5 6 5 6 7 8)
+-    if(!$GMT and !defined $self->{dst_comp} and
+-        defined $self->{last_time} and
+-        $self->{last_time}-$time > 1200 and
+-        $self->{last_time}-$time < 3600)
+-    {
+-        my ($off, $until) = $self->is_dst_switch(\@_, $time);
+-        if($off) {
+-            $self->{dst_comp} = $off;
+-            $self->{dst_comp_until} = $until;
+-        }
+-    }
+-    if(defined $self->{dst_comp_until} and $time > $self->{dst_comp_until}) {
+-        delete $self->{dst_comp};
+-        delete $self->{dst_comp_until};
+-    }
+-    $self->{str2time_lastmin} = [ @_[1..5] ];
+-    $self->{str2time_lastmin_time} = $time-$_[0];
+-    $self->{last_time} = $time;
+-    return $time+($self->{dst_comp}||0);
+-}
+-sub _use_locale($)
+-{
+-    use POSIX qw(locale_h strftime);
+-    my $old_locale = setlocale(LC_TIME);
+-    for my $locale (@_) {
+-        croak "new(): wrong 'locale' value: '$locale'" unless setlocale(LC_TIME, $locale);
+-        for my $month (0..11) {
+-            $months_map{strftime("%b", 0, 0, 0, 1, $month, 96)} = $month;
+-        }
+-    }
+-    setlocale(LC_TIME, $old_locale);
+-}
+-sub new($$;%)
+-{
+-    my ($class, $file, %data) = @_;
+-    croak "new() requires one argument: file" unless defined $file;
+-    %data = () unless %data;
+-    if(not defined $data{year}) {
+-        $data{year} = (localtime(time))[5]+1900;
+-    }
+-    $data{type} = 'syslog' unless defined $data{type};
+-    $data{_repeat}=0;
+-    if(UNIVERSAL::isa($file, 'IO::Handle')) {
+-        $data{file} = $file;
+-    }
+-    elsif(UNIVERSAL::isa($file, 'File::Tail')) {
+-        $data{file} = $file;
+-        $data{filetail}=1;
+-    }
+-    elsif(! ref $file) {
+-        if($file eq '-') {
+-            my $io = new IO::Handle;
+-            $data{file} = $io->fdopen(fileno(STDIN),"r");
+-        }
+-        else {
+-            $data{file} = new IO::File($file, "<");
+-            defined $data{file} or croak "can't open $file: $!";
+-        }
+-    }
+-    else {
+-        croak "argument must be either a file-name or an IO::Handle object.";
+-    }
+-    if(defined $data{locale}) {
+-        if(ref $data{locale} eq 'ARRAY') {
+-            _use_locale @{$data{locale}};
+-        }
+-        elsif(ref $data{locale} eq '') {
+-            _use_locale $data{locale};
+-        }
+-        else {
+-            croak "'locale' parameter must be scalar or array of scalars";
+-        }
+-    }
+-    return bless \%data, $class;
+-}
+-sub _year_increment($$)
+-{
+-    my ($self, $mon) = @_;
+-    # year change
+-    if($mon==0) {
+-        $self->{year}++ if defined $self->{_last_mon} and $self->{_last_mon} == 11;
+-        $self->{enable_year_decrement} = 1;
+-    }
+-    elsif($mon == 11) {
+-        if($self->{enable_year_decrement}) {
+-            $self->{year}-- if defined $self->{_last_mon} and $self->{_last_mon} != 11;
+-        }
+-    }
+-    else {
+-        $self->{enable_year_decrement} = 0;
+-    }
+-    $self->{_last_mon} = $mon;
+-}
+-sub _next_line($)
+-{
+-    my $self = shift;
+-    my $f = $self->{file};
+-    if(defined $self->{filetail}) {
+-        return $f->read;
+-    }
+-    else {
+-        return $f->getline;
+-    }
+-}
+-sub _next_syslog($)
+-{
+-    my ($self) = @_;
+-    while($self->{_repeat}>0) {
+-        $self->{_repeat}--;
+-        return $self->{_repeat_data};
+-    }
+-    my $file = $self->{file};
+-    line: while(defined (my $str = $self->_next_line)) {
+-        # date, time and host
+-        my ($year, $mon, $day, $hour, $min, $sec, $host, $text);
+-        if($self->{type} eq 'rsyslog') {
+-            ($year, $mon, $day, $hour, $min, $sec, $host, $text) = $str =~ /^
+-                (\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)\S+  # datetime
+-                \s+
+-                (\S+)                                   # host
+-                \s+
+-                (.*)                                    # text
+-                $/x or do
+-            {
+-                warn "WARNING: line not in high precision rsyslog format: $str";
+-                next line;
+-            };
+-            $mon--;
+-            $self->{year}=$year;
+-        }
+-        else {
+-            my($montxt);
+-            ($mon, $day, $hour, $min, $sec, $host, $text) = $str =~ /^
+-                (\S{3})\s+(\d+)      # date
+-                \s
+-                (\d+):(\d+):(\d+)    # time
+-                (?:\s<\w+\.\w+>)?    # FreeBSD's verbose-mode
+-                \s
+-                ([-\w\.\@:]+)        # host
+-                \s+
+-                (?:\[LOG_[A-Z]+\]\s+)?  # FreeBSD
+-                (.*)                 # text
+-                $/x or do
+-            {
+-                warn "WARNING: line not in syslog format: $str";
+-                next line;
+-            };
+-            $mon = $months_map{$montxt};
+-            defined $mon or croak "unknown month $montxt\n";
+-            $self->_year_increment($mon);
+-        }
+-        # convert to unix time
+-        my $time = $self->str2time($sec,$min,$hour,$day,$mon,$self->{year}-1900,$self->{GMT});
+-        if(not $self->{allow_future}) {
+-            # accept maximum one day in the present future
+-            if($time - time > 86400) {
+-                warn "WARNING: ignoring future date in syslog line: $str";
+-                next line;
+-            }
+-        }
+-        # last message repeated ... times
+-        if($text =~ /^(?:last message repeated|above message repeats) (\d+) time/) {
+-            next line if defined $self->{repeat} and not $self->{repeat};
+-            next line if not defined $self->{_last_data}{$host};
+-            $1 > 0 or do {
+-                warn "WARNING: last message repeated 0 or less times??\n";
+-                next line;
+-            };
+-            $self->{_repeat}=$1-1;
+-            $self->{_repeat_data}=$self->{_last_data}{$host};
+-            return $self->{_last_data}{$host};
+-        }
+-        # marks
+-        next if $text eq '-- MARK --';
+-        # some systems send over the network their
+-        # hostname prefixed to the text. strip that.
+-        $text =~ s/^$host\s+//;
+-        # discard ':' in HP-UX 'su' entries like this:
+-        # Apr 24 19:09:40 remedy : su : + tty?? root-oracle
+-        $text =~ s/^:\s+//;
+-        $text =~ /^
+-            ([^:]+?)        # program   -- 1
+-            (?:\[(\d+)\])?  # PID       -- 2
+-            :\s+
+-            (?:\[ID\ (\d+)\ ([a-z0-9]+)\.([a-z]+)\]\ )?   # Solaris 8 "message id" -- 3, 4, 5
+-            (.*)            # text      -- 6
+-            $/x or do
+-        {
+-            warn "WARNING: line not in syslog format: $str";
+-            next line;
+-        };
+-        if($self->{arrayref}) {
+-            $self->{_last_data}{$host} = [
+-                $time,  # 0: timestamp
+-                $host,  # 1: host
+-                $1,     # 2: program
+-                $2,     # 3: pid
+-                $6,     # 4: text
+-                ];
+-        }
+-        else {
+-            $self->{_last_data}{$host} = {
+-                timestamp => $time,
+-                host      => $host,
+-                program   => $1,
+-                pid       => $2,
+-                msgid     => $3,
+-                facility  => $4,
+-                level     => $5,
+-                text      => $6,
+-            };
+-        }
+-        return $self->{_last_data}{$host};
+-    }
+-    return undef;
+-}
+-sub _next_metalog($)
+-{
+-    my ($self) = @_;
+-    my $file = $self->{file};
+-    line: while(my $str = $self->_next_line) {
+-        # date, time and host
+-        $str =~ /^
+-            (\S{3})\s+(\d+)   # date  -- 1, 2
+-            \s
+-            (\d+):(\d+):(\d+) # time  -- 3, 4, 5
+-                              # host is not logged
+-            \s+
+-            (.*)              # text  -- 6
+-            $/x or do
+-        {
+-            warn "WARNING: line not in metalog format: $str";
+-            next line;
+-        };
+-        my $mon = $months_map{$1};
+-        defined $mon or croak "unknown month $1\n";
+-        $self->_year_increment($mon);
+-        # convert to unix time
+-        my $time = $self->str2time($5,$4,$3,$2,$mon,$self->{year}-1900,$self->{GMT});
+-        my $text = $6;
+-        $text =~ /^
+-            \[(.*?)\]        # program   -- 1
+-                             # no PID
+-            \s+
+-            (.*)             # text      -- 2
+-            $/x or do
+-        {
+-            warn "WARNING: text line not in metalog format: $text ($str)";
+-            next line;
+-        };
+-        if($self->{arrayref}) {
+-            return [
+-                $time,  # 0: timestamp
+-                'localhost',  # 1: host
+-                $1,     # 2: program
+-                undef,  # 3: (no) pid
+-                $2,     # 4: text
+-                ];
+-        }
+-        else {
+-            return {
+-                timestamp => $time,
+-                host      => 'localhost',
+-                program   => $1,
+-                text      => $2,
+-            };
+-        }
+-    }
+-    return undef;
+-}
+-sub next($)
+-{
+-    my ($self) = @_;
+-    if($self->{type} eq 'syslog' || $self->{type} eq 'rsyslog') {
+-        return $self->_next_syslog();
+-    }
+-    elsif($self->{type} eq 'metalog') {
+-        return $self->_next_metalog();
+-    }
+-    croak "Internal error: unknown type: $self->{type}";
+-}
+-
+-#####################################################################
+-#####################################################################
+-#####################################################################
+-
+ use RRDs;
+ 
+ use strict;
+ use File::Tail;
+ use Getopt::Long;
+ use POSIX 'setsid';
++use Parse::Syslog;
+ 
+ my $VERSION = "1.14";
+ 
+@@ -1053,4 +684,4 @@ S<David Schweikert E<lt>david@schweikert
+ 
+ =cut
+ 
+-# vi: sw=8
+\ No newline at end of file
++# vi: sw=8
diff -Nru mailgraph-1.14/debian/patches/series mailgraph-1.14/debian/patches/series
--- mailgraph-1.14/debian/patches/series	2024-06-30 19:12:06.000000000 +0200
+++ mailgraph-1.14/debian/patches/series	2025-01-30 12:33:17.000000000 +0100
@@ -8,3 +8,4 @@
 #105_postscreen.diff
 #110_mailgraph.cgi.patch
 0100-new_syslog_format.patch
+libparse-syslog-perl.patch

Attachment: signature.asc
Description: signature

Reply via email to