From c6eee8fb7e2ba294afaae402177794247de1957d Mon Sep 17 00:00:00 2001 From: Julien Valroff Date: Sun, 13 Mar 2011 08:44:39 +0100 Subject: Add greylisting support --- debian/NEWS.Debian | 12 + debian/changelog | 4 +- debian/mailgraph.8 | 10 +- debian/patches/050_greylist.diff | 261 ++++++++++++++++++++++ debian/patches/051_postgrey.diff | 256 --------------------- debian/patches/101_dspam-virus-notifications.diff | 2 +- debian/patches/102_clamav-milter.diff | 2 +- debian/patches/series | 1 + 8 files changed, 285 insertions(+), 263 deletions(-) create mode 100644 debian/NEWS.Debian create mode 100644 debian/patches/050_greylist.diff delete mode 100644 debian/patches/051_postgrey.diff diff --git a/debian/NEWS.Debian b/debian/NEWS.Debian new file mode 100644 index 0000000..9a7bcc7 --- /dev/null +++ b/debian/NEWS.Debian @@ -0,0 +1,12 @@ +mailgraph (1.14-9) unstable; urgency=low + + * mailgraph now allows the creation of both RRD and graph for greylisting, + supporting postgrey and grossd (contributions to support more greylisting + servers are welcome). + If you used the --only-mail-rrd and/or --only-virus-rrd options, please make + sure you update your configuration for the following new options: + --no-mail-rrd Do not update the mail rrd. + --no-virus-rrd Do not update the virus rrd. + --no-greylist-rrd Do not update the greylist rrd. + + -- Julien Valroff Sun, 13 Mar 2011 08:40:00 +0100 diff --git a/debian/changelog b/debian/changelog index de6d117..36a9d2c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,10 @@ mailgraph (1.14-9) unstable; urgency=low * Fix patch to set default location of rrd files (Closes: #617411) + * Add patch to create greylisting RRD and graph (supports postgrey and + grossd) - -- Julien Valroff Tue, 08 Mar 2011 21:00:23 +0100 + -- Julien Valroff Sun, 13 Mar 2011 08:33:07 +0100 mailgraph (1.14-8) unstable; urgency=low diff --git a/debian/mailgraph.8 b/debian/mailgraph.8 index 9d3c099..3d55ff6 100644 --- a/debian/mailgraph.8 +++ b/debian/mailgraph.8 @@ -42,10 +42,12 @@ Write verbose-log to \fIFILE\fR instead of /var/log/mailgraph.log. Ignore mail to/from localhost (used for virus scanner). .IP "\fB--ignore-host=\fIHOST\fR" Ignore mail to/from \fIHOST\fR (used for virus scanner). -.IP "\fB--only-mail-rrd\fR" -Update only the mail rrd. -.IP "\fB--only-virus-rrd\fR" -Update only the virus rrd. +.IP "\fB--no-mail-rrd\fR" +Do not update the mail rrd. +.IP "\fB--no-virus-rrd\fR" +Do not update the virus rrd. +.IP "\fB--no-greylist-rrd\fR" +Do not update the greylist rrd. .IP "\fB--rrd-name=\fINAME\fR" Use \fINAME\fR.rrd and \fINAME\fR_virus.rrd for the rrd files. .IP "\fB--rbl-is-spam\fR" diff --git a/debian/patches/050_greylist.diff b/debian/patches/050_greylist.diff new file mode 100644 index 0000000..598deb8 --- /dev/null +++ b/debian/patches/050_greylist.diff @@ -0,0 +1,261 @@ +Description: Add postgrey and greylisting support to mailgraph +Author: Alexander Bech +Origin: http://www.bakarasse.de/pages/en/linux/mailgraph.php + +--- a/mailgraph.cgi ++++ b/mailgraph.cgi +@@ -16,6 +16,7 @@ + my $points_per_sample = 3; + my $ypoints = 160; + my $ypoints_err = 96; ++my $ypoints_grey = 96; + my $rrd = '/var/lib/mailgraph/mailgraph.rrd'; # path to where the RRD database is + my $rrd_virus = '/var/lib/mailgraph/mailgraph_virus.rrd'; # path to where the Virus RRD database is + my $tmp_dir = '/var/lib/mailgraph'; # temporary directory where to store the images +@@ -28,12 +29,14 @@ + ); + + my %color = ( +- sent => '000099', # rrggbb in hex +- received => '009900', +- rejected => 'AA0000', +- bounced => '000000', +- virus => 'DDBB00', +- spam => '999999', ++ sent => '000099', # rrggbb in hex ++ received => '009900', ++ rejected => 'AA0000', ++ bounced => '000000', ++ virus => 'DDBB00', ++ spam => '999999', ++ greylisted => '999999', ++ delayed => '006400', + ); + + sub rrd_graph(@) +@@ -151,6 +154,36 @@ + ); + } + ++sub graph_grey($$) ++{ ++ my ($range, $file) = @_; ++ my $step = $range*$points_per_sample/$xpoints; ++ rrd_graph($range, $file, $ypoints_grey, ++ "DEF:greylisted=$rrd_greylist:greylisted:AVERAGE", ++ "DEF:mgreylisted=$rrd_greylist:greylisted:MAX", ++ "CDEF:rgreylisted=greylisted,60,*", ++ "CDEF:dgreylisted=greylisted,UN,0,greylisted,IF,$step,*", ++ "CDEF:sgreylisted=PREV,UN,dgreylisted,PREV,IF,dgreylisted,+", ++ "CDEF:rmgreylisted=mgreylisted,60,*", ++ "AREA:rgreylisted#$color{greylisted}:Greylisted", ++ 'GPRINT:sgreylisted:MAX:total\: %8.0lf msgs', ++ 'GPRINT:rgreylisted:AVERAGE:avg\: %5.2lf msgs/min', ++ 'GPRINT:rmgreylisted:MAX:max\: %4.0lf msgs/min\l', ++ ++ "DEF:delayed=$rrd_greylist:delayed:AVERAGE", ++ "DEF:mdelayed=$rrd_greylist:delayed:MAX", ++ "CDEF:rdelayed=delayed,60,*", ++ "CDEF:ddelayed=delayed,UN,0,delayed,IF,$step,*", ++ "CDEF:sdelayed=PREV,UN,ddelayed,PREV,IF,ddelayed,+", ++ "CDEF:rmdelayed=mdelayed,60,*", ++ "LINE2:rdelayed#$color{delayed}:Delayed ", ++ 'GPRINT:sdelayed:MAX:total\: %8.0lf msgs', ++ 'GPRINT:rdelayed:AVERAGE:avg\: %5.2lf msgs/min', ++ 'GPRINT:rmdelayed:MAX:max\: %4.0lf msgs/min\l', ++ ); ++} ++ ++ + sub print_html() + { + print "Content-Type: text/html\n\n"; +@@ -180,6 +213,7 @@ + print "

$graphs[$n]{title}

\n"; + print "

\"mailgraph\"/
\n"; + print "\"mailgraph\"/

\n"; ++ print "\"mailgraph\"/

\n"; + } + + print < 0, received => 0, bounced => 0, rejected => 0, virus => 0, spam => 0 ); ++my %sum = ( sent => 0, received => 0, bounced => 0, rejected => 0, virus => 0, spam => 0, greylisted => 0, delayed => 0); + my $rrd_inited=0; + + my %opt = (); +@@ -395,6 +395,8 @@ + sub event_rejected($); + sub event_virus($); + sub event_spam($); ++sub event_greylisted($); ++sub event_delayed($); + sub init_rrd($); + sub update($); + +@@ -415,8 +417,9 @@ + print " --daemon-log=FILE write verbose-log to FILE instead of /var/log/mailgraph.log\n"; + print " --ignore-localhost ignore mail to/from localhost (used for virus scanner)\n"; + print " --ignore-host=HOST ignore mail to/from HOST regexp (used for virus scanner)\n"; +- print " --only-mail-rrd update only the mail rrd\n"; +- print " --only-virus-rrd update only the virus rrd\n"; ++ print " --no-mail-rrd no update mail rrd\n"; ++ print " --no-virus-rrd no update virus rrd\n"; ++ print " --no-greylist-rrd no update greylist rrd\n"; + print " --rrd-name=NAME use NAME.rrd and NAME_virus.rrd for the rrd files\n"; + print " --rbl-is-spam count rbl rejects as spam\n"; + print " --virbl-is-virus count virbl rejects as viruses\n"; +@@ -431,7 +434,7 @@ + 'year|y=i', 'host=s', 'verbose|v', 'daemon|d!', + 'daemon_pid|daemon-pid=s', 'daemon_rrd|daemon-rrd=s', + 'daemon_log|daemon-log=s', 'ignore-localhost!', 'ignore-host=s@', +- 'only-mail-rrd', 'only-virus-rrd', 'rrd_name|rrd-name=s', ++ 'no-mail-rrd', 'no-virus-rrd', 'no-greylist-rrd', 'rrd_name|rrd-name=s', + 'rbl-is-spam', 'virbl-is-virus' + ) or exit(1); + usage if $opt{help}; +@@ -446,6 +449,7 @@ + $daemon_rrd_dir = $opt{daemon_rrd} if defined $opt{daemon_rrd}; + $rrd = $opt{rrd_name}.".rrd" if defined $opt{rrd_name}; + $rrd_virus = $opt{rrd_name}."_virus.rrd" if defined $opt{rrd_name}; ++ $rrd_virus = $opt{rrd_name}."_greylist.rrd" if defined $opt{rrd_name}; + + # compile --ignore-host regexps + if(defined $opt{'ignore-host'}) { +@@ -522,7 +526,7 @@ + my $year_steps = $month_steps*12; + + # mail rrd +- if(! -f $rrd and ! $opt{'only-virus-rrd'}) { ++ if(! -f $rrd and ! $opt{'no-mail-rrd'}) { + RRDs::create($rrd, '--start', $m, '--step', $rrdstep, + 'DS:sent:ABSOLUTE:'.($rrdstep*2).':0:U', + 'DS:recv:ABSOLUTE:'.($rrdstep*2).':0:U', +@@ -544,7 +548,7 @@ + } + + # virus rrd +- if(! -f $rrd_virus and ! $opt{'only-mail-rrd'}) { ++ if(! -f $rrd_virus and ! $opt{'no-virus-rrd'}) { + RRDs::create($rrd_virus, '--start', $m, '--step', $rrdstep, + 'DS:virus:ABSOLUTE:'.($rrdstep*2).':0:U', + 'DS:spam:ABSOLUTE:'.($rrdstep*2).':0:U', +@@ -561,6 +565,25 @@ + elsif(-f $rrd_virus and ! defined $rrd_virus) { + $this_minute = RRDs::last($rrd_virus) + $rrdstep; + } ++ # greylist rrd ++ if(! -f $rrd_greylist and ! $opt{'no-greylist-rrd'}) { ++ RRDs::create($rrd_greylist, '--start', $m, '--step', $rrdstep, ++ 'DS:greylisted:ABSOLUTE:'.($rrdstep*2).':0:U', ++ 'DS:delayed:ABSOLUTE:'.($rrdstep*2).':0:U', ++ "RRA:AVERAGE:0.5:$day_steps:$realrows", # day ++ "RRA:AVERAGE:0.5:$week_steps:$realrows", # week ++ "RRA:AVERAGE:0.5:$month_steps:$realrows", # month ++ "RRA:AVERAGE:0.5:$year_steps:$realrows", # year ++ "RRA:MAX:0.5:$day_steps:$realrows", # day ++ "RRA:MAX:0.5:$week_steps:$realrows", # week ++ "RRA:MAX:0.5:$month_steps:$realrows", # month ++ "RRA:MAX:0.5:$year_steps:$realrows", # year ++ ); ++ $this_minute = $m; ++ } ++ elsif(-f $rrd_greylist and ! defined $rrd_greylist) { ++ $this_minute = RRDs::last($rrd_greylist) + $rrdstep; ++ } + + $rrd_inited=1; + } +@@ -610,6 +633,9 @@ + elsif($opt{'rbl-is-spam'} and $text =~ /^(?:[0-9A-Z]+: |NOQUEUE: )?reject: .*: 554.* blocked using/) { + event($time, 'spam'); + } ++ elsif($text =~ /Greylisted/) { ++ event($time, 'greylisted'); ++ } + elsif($text =~ /^(?:[0-9A-Z]+: |NOQUEUE: )?reject: /) { + event($time, 'rejected'); + } +@@ -853,6 +879,21 @@ + event($time, 'virus'); + } + } ++ elsif($prog eq 'postgrey') { ++ # Old versions (up to 1.27) ++ if($text =~ /delayed [0-9]+ seconds: client/) { ++ event($time, 'delayed'); ++ } ++ # New versions (from 1.28) ++ if($text =~ /delay=[0-9]+/) { ++ event($time, 'delayed'); ++ } ++ } ++ elsif($prog eq 'grossd') { ++ if($text =~ /a\=greylist/) { ++ event($time, 'greylisted'); ++ } ++ } + } + + sub event($$) +@@ -870,14 +911,16 @@ + return 1 if $m == $this_minute; + return 0 if $m < $this_minute; + +- print "update $this_minute:$sum{sent}:$sum{received}:$sum{bounced}:$sum{rejected}:$sum{virus}:$sum{spam}\n" if $opt{verbose}; +- RRDs::update $rrd, "$this_minute:$sum{sent}:$sum{received}:$sum{bounced}:$sum{rejected}" unless $opt{'only-virus-rrd'}; +- RRDs::update $rrd_virus, "$this_minute:$sum{virus}:$sum{spam}" unless $opt{'only-mail-rrd'}; ++ print "update $this_minute:$sum{sent}:$sum{received}:$sum{bounced}:$sum{rejected}:$sum{virus}:$sum{spam}:$sum{greylisted}:$sum{delayed}\n" if$ ++ RRDs::update $rrd, "$this_minute:$sum{sent}:$sum{received}:$sum{bounced}:$sum{rejected}" unless $opt{'no-mail-rrd'}; ++ RRDs::update $rrd_virus, "$this_minute:$sum{virus}:$sum{spam}" unless $opt{'no-virus-rrd'}; ++ RRDs::update $rrd_greylist, "$this_minute:$sum{greylisted}:$sum{delayed}" unless $opt{'no-greylist-rrd'}; + if($m > $this_minute+$rrdstep) { + for(my $sm=$this_minute+$rrdstep;$sm<$m;$sm+=$rrdstep) { +- print "update $sm:0:0:0:0:0:0 (SKIP)\n" if $opt{verbose}; +- RRDs::update $rrd, "$sm:0:0:0:0" unless $opt{'only-virus-rrd'}; +- RRDs::update $rrd_virus, "$sm:0:0" unless $opt{'only-mail-rrd'}; ++ print "update $sm:0:0:0:0:0:0:0:0 (SKIP)\n" if $opt{verbose}; ++ RRDs::update $rrd, "$sm:0:0:0:0" unless $opt{'no-mail-rrd'}; ++ RRDs::update $rrd_virus, "$sm:0:0" unless $opt{'no-virus-rrd'}; ++ RRDs::update $rrd_greylist, "$sm:0:0" unless $opt{'no-greylist-rrd'}; + } + } + $this_minute = $m; +@@ -887,6 +930,8 @@ + $sum{rejected}=0; + $sum{virus}=0; + $sum{spam}=0; ++ $sum{greylisted}=0; ++ $sum{delayed}=0; + return 1; + } + +@@ -919,8 +964,9 @@ + --daemon-log=FILE write verbose-log to FILE instead of /var/log/mailgraph.log + --ignore-localhost ignore mail to/from localhost (used for virus scanner) + --ignore-host=HOST ignore mail to/from HOST regexp (used for virus scanner) +- --only-mail-rrd update only the mail rrd +- --only-virus-rrd update only the virus rrd ++ --no-mail-rrd do not update mail rrd ++ --no-virus-rrd do not update virus rrd ++ --no-greylist-rrd do not update greylist rrd + --rrd-name=NAME use NAME.rrd and NAME_virus.rrd for the rrd files + --rbl-is-spam count rbl rejects as spam + --virbl-is-virus count virbl rejects as viruses diff --git a/debian/patches/051_postgrey.diff b/debian/patches/051_postgrey.diff deleted file mode 100644 index b3683e7..0000000 --- a/debian/patches/051_postgrey.diff +++ /dev/null @@ -1,256 +0,0 @@ -Description: Add postgrey and greylisting support to mailgraph -Author: Alexander Bech -Origin: http://www.bakarasse.de/pages/en/linux/mailgraph.php - ---- a/mailgraph.cgi -+++ b/mailgraph.cgi -@@ -16,6 +16,7 @@ - my $points_per_sample = 3; - my $ypoints = 160; - my $ypoints_err = 96; -+my $ypoints_grey = 96; - my $rrd = '/var/lib/mailgraph/mailgraph.rrd'; # path to where the RRD database is - my $rrd_virus = '/var/lib/mailgraph/mailgraph_virus.rrd'; # path to where the Virus RRD database is - my $tmp_dir = '/var/lib/mailgraph/'; # temporary directory where to store the images -@@ -28,12 +29,14 @@ - ); - - my %color = ( -- sent => '000099', # rrggbb in hex -- received => '009900', -- rejected => 'AA0000', -- bounced => '000000', -- virus => 'DDBB00', -- spam => '999999', -+ sent => '000099', # rrggbb in hex -+ received => '009900', -+ rejected => 'AA0000', -+ bounced => '000000', -+ virus => 'DDBB00', -+ spam => '999999', -+ greylisted => '999999', -+ delayed => '006400', - ); - - sub rrd_graph(@) -@@ -151,6 +154,36 @@ - ); - } - -+sub graph_grey($$) -+{ -+ my ($range, $file) = @_; -+ my $step = $range*$points_per_sample/$xpoints; -+ rrd_graph($range, $file, $ypoints_grey, -+ "DEF:greylisted=$rrd_greylist:greylisted:AVERAGE", -+ "DEF:mgreylisted=$rrd_greylist:greylisted:MAX", -+ "CDEF:rgreylisted=greylisted,60,*", -+ "CDEF:dgreylisted=greylisted,UN,0,greylisted,IF,$step,*", -+ "CDEF:sgreylisted=PREV,UN,dgreylisted,PREV,IF,dgreylisted,+", -+ "CDEF:rmgreylisted=mgreylisted,60,*", -+ "AREA:rgreylisted#$color{greylisted}:Greylisted", -+ 'GPRINT:sgreylisted:MAX:total\: %8.0lf msgs', -+ 'GPRINT:rgreylisted:AVERAGE:avg\: %5.2lf msgs/min', -+ 'GPRINT:rmgreylisted:MAX:max\: %4.0lf msgs/min\l', -+ -+ "DEF:delayed=$rrd_greylist:delayed:AVERAGE", -+ "DEF:mdelayed=$rrd_greylist:delayed:MAX", -+ "CDEF:rdelayed=delayed,60,*", -+ "CDEF:ddelayed=delayed,UN,0,delayed,IF,$step,*", -+ "CDEF:sdelayed=PREV,UN,ddelayed,PREV,IF,ddelayed,+", -+ "CDEF:rmdelayed=mdelayed,60,*", -+ "LINE2:rdelayed#$color{delayed}:Delayed ", -+ 'GPRINT:sdelayed:MAX:total\: %8.0lf msgs', -+ 'GPRINT:rdelayed:AVERAGE:avg\: %5.2lf msgs/min', -+ 'GPRINT:rmdelayed:MAX:max\: %4.0lf msgs/min\l', -+ ); -+} -+ -+ - sub print_html() - { - print "Content-Type: text/html\n\n"; -@@ -180,6 +213,7 @@ - print "

$graphs[$n]{title}

\n"; - print "

\"mailgraph\"/
\n"; - print "\"mailgraph\"/

\n"; -+ print "\"mailgraph\"/

\n"; - } - - print < 0, received => 0, bounced => 0, rejected => 0, virus => 0, spam => 0 ); -+my %sum = ( sent => 0, received => 0, bounced => 0, rejected => 0, virus => 0, spam => 0, greylisted => 0, delayed => 0); - my $rrd_inited=0; - - my %opt = (); -@@ -395,6 +395,8 @@ - sub event_rejected($); - sub event_virus($); - sub event_spam($); -+sub event_greylisted($); -+sub event_delayed($); - sub init_rrd($); - sub update($); - -@@ -415,8 +417,9 @@ - print " --daemon-log=FILE write verbose-log to FILE instead of /var/log/mailgraph.log\n"; - print " --ignore-localhost ignore mail to/from localhost (used for virus scanner)\n"; - print " --ignore-host=HOST ignore mail to/from HOST regexp (used for virus scanner)\n"; -- print " --only-mail-rrd update only the mail rrd\n"; -- print " --only-virus-rrd update only the virus rrd\n"; -+ print " --no-mail-rrd no update mail rrd\n"; -+ print " --no-virus-rrd no update virus rrd\n"; -+ print " --no-greylist-rrd no update greylist rrd\n"; - print " --rrd-name=NAME use NAME.rrd and NAME_virus.rrd for the rrd files\n"; - print " --rbl-is-spam count rbl rejects as spam\n"; - print " --virbl-is-virus count virbl rejects as viruses\n"; -@@ -431,7 +434,7 @@ - 'year|y=i', 'host=s', 'verbose|v', 'daemon|d!', - 'daemon_pid|daemon-pid=s', 'daemon_rrd|daemon-rrd=s', - 'daemon_log|daemon-log=s', 'ignore-localhost!', 'ignore-host=s@', -- 'only-mail-rrd', 'only-virus-rrd', 'rrd_name|rrd-name=s', -+ 'no-mail-rrd', 'no-virus-rrd', 'no-greylist-rrd', 'rrd_name|rrd-name=s', - 'rbl-is-spam', 'virbl-is-virus' - ) or exit(1); - usage if $opt{help}; -@@ -446,6 +449,7 @@ - $daemon_rrd_dir = $opt{daemon_rrd} if defined $opt{daemon_rrd}; - $rrd = $opt{rrd_name}.".rrd" if defined $opt{rrd_name}; - $rrd_virus = $opt{rrd_name}."_virus.rrd" if defined $opt{rrd_name}; -+ $rrd_virus = $opt{rrd_name}."_greylist.rrd" if defined $opt{rrd_name}; - - # compile --ignore-host regexps - if(defined $opt{'ignore-host'}) { -@@ -522,7 +526,7 @@ - my $year_steps = $month_steps*12; - - # mail rrd -- if(! -f $rrd and ! $opt{'only-virus-rrd'}) { -+ if(! -f $rrd and ! $opt{'no-mail-rrd'}) { - RRDs::create($rrd, '--start', $m, '--step', $rrdstep, - 'DS:sent:ABSOLUTE:'.($rrdstep*2).':0:U', - 'DS:recv:ABSOLUTE:'.($rrdstep*2).':0:U', -@@ -544,7 +548,7 @@ - } - - # virus rrd -- if(! -f $rrd_virus and ! $opt{'only-mail-rrd'}) { -+ if(! -f $rrd_virus and ! $opt{'no-virus-rrd'}) { - RRDs::create($rrd_virus, '--start', $m, '--step', $rrdstep, - 'DS:virus:ABSOLUTE:'.($rrdstep*2).':0:U', - 'DS:spam:ABSOLUTE:'.($rrdstep*2).':0:U', -@@ -561,6 +565,25 @@ - elsif(-f $rrd_virus and ! defined $rrd_virus) { - $this_minute = RRDs::last($rrd_virus) + $rrdstep; - } -+ # greylist rrd -+ if(! -f $rrd_greylist and ! $opt{'no-greylist-rrd'}) { -+ RRDs::create($rrd_greylist, '--start', $m, '--step', $rrdstep, -+ 'DS:greylisted:ABSOLUTE:'.($rrdstep*2).':0:U', -+ 'DS:delayed:ABSOLUTE:'.($rrdstep*2).':0:U', -+ "RRA:AVERAGE:0.5:$day_steps:$realrows", # day -+ "RRA:AVERAGE:0.5:$week_steps:$realrows", # week -+ "RRA:AVERAGE:0.5:$month_steps:$realrows", # month -+ "RRA:AVERAGE:0.5:$year_steps:$realrows", # year -+ "RRA:MAX:0.5:$day_steps:$realrows", # day -+ "RRA:MAX:0.5:$week_steps:$realrows", # week -+ "RRA:MAX:0.5:$month_steps:$realrows", # month -+ "RRA:MAX:0.5:$year_steps:$realrows", # year -+ ); -+ $this_minute = $m; -+ } -+ elsif(-f $rrd_greylist and ! defined $rrd_greylist) { -+ $this_minute = RRDs::last($rrd_greylist) + $rrdstep; -+ } - - $rrd_inited=1; - } -@@ -610,6 +633,9 @@ - elsif($opt{'rbl-is-spam'} and $text =~ /^(?:[0-9A-Z]+: |NOQUEUE: )?reject: .*: 554.* blocked using/) { - event($time, 'spam'); - } -+ elsif($text =~ /Greylisted/) { -+ event($time, 'greylisted'); -+ } - elsif($text =~ /^(?:[0-9A-Z]+: |NOQUEUE: )?reject: /) { - event($time, 'rejected'); - } -@@ -853,6 +879,16 @@ - event($time, 'virus'); - } - } -+ elsif($prog eq 'postgrey') { -+ # Old versions (up to 1.27) -+ if($text =~ /delayed [0-9]+ seconds: client/) { -+ event($time, 'delayed'); -+ } -+ # New versions (from 1.28) -+ if($text =~ /delay=[0-9]+/) { -+ event($time, 'delayed'); -+ } -+ } - } - - sub event($$) -@@ -870,14 +906,16 @@ - return 1 if $m == $this_minute; - return 0 if $m < $this_minute; - -- print "update $this_minute:$sum{sent}:$sum{received}:$sum{bounced}:$sum{rejected}:$sum{virus}:$sum{spam}\n" if $opt{verbose}; -- RRDs::update $rrd, "$this_minute:$sum{sent}:$sum{received}:$sum{bounced}:$sum{rejected}" unless $opt{'only-virus-rrd'}; -- RRDs::update $rrd_virus, "$this_minute:$sum{virus}:$sum{spam}" unless $opt{'only-mail-rrd'}; -+ print "update $this_minute:$sum{sent}:$sum{received}:$sum{bounced}:$sum{rejected}:$sum{virus}:$sum{spam}:$sum{greylisted}:$sum{delayed}\n" if$ -+ RRDs::update $rrd, "$this_minute:$sum{sent}:$sum{received}:$sum{bounced}:$sum{rejected}" unless $opt{'no-mail-rrd'}; -+ RRDs::update $rrd_virus, "$this_minute:$sum{virus}:$sum{spam}" unless $opt{'no-virus-rrd'}; -+ RRDs::update $rrd_greylist, "$this_minute:$sum{greylisted}:$sum{delayed}" unless $opt{'no-greylist-rrd'}; - if($m > $this_minute+$rrdstep) { - for(my $sm=$this_minute+$rrdstep;$sm<$m;$sm+=$rrdstep) { -- print "update $sm:0:0:0:0:0:0 (SKIP)\n" if $opt{verbose}; -- RRDs::update $rrd, "$sm:0:0:0:0" unless $opt{'only-virus-rrd'}; -- RRDs::update $rrd_virus, "$sm:0:0" unless $opt{'only-mail-rrd'}; -+ print "update $sm:0:0:0:0:0:0:0:0 (SKIP)\n" if $opt{verbose}; -+ RRDs::update $rrd, "$sm:0:0:0:0" unless $opt{'no-mail-rrd'}; -+ RRDs::update $rrd_virus, "$sm:0:0" unless $opt{'no-virus-rrd'}; -+ RRDs::update $rrd_greylist, "$sm:0:0" unless $opt{'no-greylist-rrd'}; - } - } - $this_minute = $m; -@@ -887,6 +925,8 @@ - $sum{rejected}=0; - $sum{virus}=0; - $sum{spam}=0; -+ $sum{greylisted}=0; -+ $sum{delayed}=0; - return 1; - } - -@@ -919,8 +959,9 @@ - --daemon-log=FILE write verbose-log to FILE instead of /var/log/mailgraph.log - --ignore-localhost ignore mail to/from localhost (used for virus scanner) - --ignore-host=HOST ignore mail to/from HOST regexp (used for virus scanner) -- --only-mail-rrd update only the mail rrd -- --only-virus-rrd update only the virus rrd -+ --no-mail-rrd do not update mail rrd -+ --no-virus-rrd do not update virus rrd -+ --no-greylist-rrd do not update greylist rrd - --rrd-name=NAME use NAME.rrd and NAME_virus.rrd for the rrd files - --rbl-is-spam count rbl rejects as spam - --virbl-is-virus count virbl rejects as viruses diff --git a/debian/patches/101_dspam-virus-notifications.diff b/debian/patches/101_dspam-virus-notifications.diff index 96d4068..bd5a04b 100644 --- a/debian/patches/101_dspam-virus-notifications.diff +++ b/debian/patches/101_dspam-virus-notifications.diff @@ -5,7 +5,7 @@ Forwarded: no --- a/mailgraph.pl +++ b/mailgraph.pl -@@ -774,6 +774,9 @@ +@@ -800,6 +800,9 @@ if($text =~ /spam detected from/) { event($time, 'spam'); } diff --git a/debian/patches/102_clamav-milter.diff b/debian/patches/102_clamav-milter.diff index c9eac04..25c49f3 100644 --- a/debian/patches/102_clamav-milter.diff +++ b/debian/patches/102_clamav-milter.diff @@ -4,7 +4,7 @@ Forwarded: no --- a/mailgraph.pl +++ b/mailgraph.pl -@@ -820,6 +820,9 @@ +@@ -846,6 +846,9 @@ if($text =~ /Intercepted/) { event($time, 'virus'); } diff --git a/debian/patches/series b/debian/patches/series index e07de45..73a941e 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,5 +1,6 @@ 001_default-rrd-location.diff 002_script-name.diff 003_web-bug.diff +050_greylist.diff 101_dspam-virus-notifications.diff 102_clamav-milter.diff -- cgit v1.2.3