Control: tags -1 patch upstream
On 2023-09-08 19:30:29 +0200, Vincent Lefevre wrote:
> mailgraph no longer works after the upgrade to bookworm, and
> this is probably due to the fact that it does not support the
> new syslog format: /usr/sbin/mailgraph contains
[...]
> and this format is no longer correct.
>
> There's a git repository where this bug seems to have been fixed
> 5 years ago:
>
> https://gist.github.com/mdklapwijk/4f8d2fc39f09f4aa615cbf8ffae0379a
I've attached a patch based on these modifications.
I've made 2 changes:
* This patch does not add a new type "rsyslog" for this new format;
so both formats are supported at the same time.
* Fixed a variable name ($mon → $montxt) for the old format.
--
Vincent Lefèvre <[email protected]> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)
Description: support the rsyslog high-precision timestamp format.
Patch based on M.D. Klapwijk's modifications for this support:
https://gist.github.com/mdklapwijk/4f8d2fc39f09f4aa615cbf8ffae0379a
(with some changes).
Author: Vincent Lefevre <[email protected]>
Bug-Debian: https://bugs.debian.org/1051496
Last-Update: 2023-09-09
--- mailgraph.pl.bak
+++ mailgraph.pl
@@ -202,27 +202,41 @@
}
my $file = $self->{file};
line: while(defined (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
- (?:\s<\w+\.\w+>)? # FreeBSD's verbose-mode
- \s
- ([-\w\.\@:]+) # host -- 6
- \s+
- (?:\[LOG_[A-Z]+\]\s+)? # FreeBSD
- (.*) # text -- 7
- $/x or do
- {
- warn "WARNING: line not in syslog format: $str";
- next line;
- };
- my $mon = $months_map{$1};
- defined $mon or croak "unknown month $1\n";
- $self->_year_increment($mon);
+ # date, time and host
+ my ($year, $mon, $day, $hour, $min, $sec, $host, $text);
+ if(($year, $mon, $day, $hour, $min, $sec, $host, $text) = $str =~ /^
+ (\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)\S+ # datetime
+ \s+
+ (\S+) # host
+ \s+
+ (.*) # text
+ $/x) {
+ $mon--;
+ $self->{year} = $year;
+ }
+ else {
+ my $montxt;
+ ($montxt, $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($5,$4,$3,$2,$mon,$self->{year}-1900,$self->{GMT});
+ 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) {
@@ -230,7 +244,6 @@
next line;
}
}
- my ($host, $text) = ($6, $7);
# last message repeated ... times
if($text =~ /^(?:last message repeated|above message repeats) (\d+) time/) {
next line if defined $self->{repeat} and not $self->{repeat};