From 76cda01d9fa5ffd8a882e2f589ce80a611653701 Mon Sep 17 00:00:00 2001 From: Darold Gilles Date: Mon, 2 Oct 2017 16:40:40 +0200 Subject: [PATCH] Fix direction in cache, changes from sendmailanalyzer was not reported into set_direction. --- sa_cache | 90 +++++++++++++++++++++++++++----------------------------- 1 file changed, 43 insertions(+), 47 deletions(-) diff --git a/sa_cache b/sa_cache index 44b1fc3..f47ac59 100755 --- a/sa_cache +++ b/sa_cache @@ -4139,65 +4139,61 @@ sub set_direction my $direction = 'Int_'; ###### Check for sender origine - # This host is a gateway and it forward mails to an internal hub - if (!$CONFIG{MAIL_GW} && $CONFIG{MAIL_HUB}) { - # if message doesn't come from localhost it comes from outside - $direction = 'Ext_' if ($STATS->{$id}{sender_relay} ne 'localhost'); - # This host received mails from any side - } elsif (!$CONFIG{MAIL_GW} && !$CONFIG{MAIL_HUB}) { - # The message is not internal - if ($STATS->{$id}{sender_relay} ne 'localhost') { - # Check if sender relay match any of our domains - if (exists $CONFIG{LOCAL_HOST_DOMAIN}{$hostname} && ($#{$CONFIG{LOCAL_HOST_DOMAIN}{$hostname}} > -1) ) { - if (!grep($STATS->{$id}{sender_relay} =~ /\b$_$/i, @{$CONFIG{LOCAL_HOST_DOMAIN}{$hostname}})) { - $direction = 'Ext_'; + if ($STATS->{$id}{sender_relay}) { + # This host is a gateway and it forward mails to an internal hub or outside + if (!$CONFIG{MAIL_GW} && $CONFIG{MAIL_HUB}) { + if (!grep($STATS->{$id}{sender_relay} =~ /$_/i, split(/[\s\t,;]/, $CONFIG{MAIL_HUB}))) { + # if message doesn't come from localhost or user defined loca relay it comes from outside + if (exists $CONFIG{LOCAL_HOST_DOMAIN}{$hostname} && ($#{$CONFIG{LOCAL_HOST_DOMAIN}{$hostname}} > -1) ) { + $direction = 'Ext_' if (!grep($STATS->{$id}{sender_relay} =~ /\b$_$/, 'localhost', @{$CONFIG{LOCAL_HOST_DOMAIN}{$hostname}})); + } elsif (exists $CONFIG{LOCAL_DOMAIN} && ($#{$CONFIG{LOCAL_DOMAIN}} > -1)) { + $direction = 'Ext_' if (!grep($STATS->{$id}{sender_relay} =~ /\b$_$/, 'localhost', @{$CONFIG{LOCAL_DOMAIN}})); } } - if (exists $CONFIG{LOCAL_DOMAIN} && ($#{$CONFIG{LOCAL_DOMAIN}} > -1)) { - if (!grep($STATS->{$id}{sender_relay} =~ /\b$_$/i, @{$CONFIG{LOCAL_DOMAIN}})) { - $direction = 'Ext_'; - } - } else { - # There's no local domain defined: impossible to know where message comes from - # Maybe you must review you configuration file or write som pieces of code here - } + # This host received all messages from a gateway + } elsif ($CONFIG{MAIL_GW} && !$CONFIG{MAIL_HUB}) { + # If sender relay is the gateway, it comes from outside + $direction = 'Ext_' if (grep($STATS->{$id}{sender_relay} =~ /$_/i, split(/[\s\t,;]/, $CONFIG{MAIL_GW}) )); + # This host is a hub, it received all messages from a gateway and forward them to other host + } elsif ($CONFIG{MAIL_GW} && $CONFIG{MAIL_HUB}) { + # If sender relay is the gateway, it comes from outside + $direction = 'Ext_' if (grep($STATS->{$id}{sender_relay} =~ /$_/i, split(/[\s\t,;]/, $CONFIG{MAIL_GW}))); } - # This host received all messages from a gateway - } elsif ($CONFIG{MAIL_GW} && !$CONFIG{MAIL_HUB}) { - # If sender relay is the gateway, it comes from outside - $direction = 'Ext_' if (grep($STATS->{$id}{sender_relay} =~ /$_/i, split(/[\s\t,;]/, $CONFIG{MAIL_GW}) )); - # This host is a hub, it received all messages from a gateway and forward them to other host - } elsif ($CONFIG{MAIL_GW} && $CONFIG{MAIL_HUB}) { - # If sender relay is the gateway, it comes from outside - $direction = 'Ext_' if (grep($STATS->{$id}{sender_relay} =~ /$_/i, split(/[\s\t,;]/, $CONFIG{MAIL_GW}))); + } else { + $direction = 'Unk_'; } ###### Now check for destination - # If the recipient relay is localhost, it should be distributed internally - if (grep(/^$STATS->{$id}{rcpt_relay}[$i]$/, 'localhost')) { - $direction .= 'Int'; - # If this host is a mail gateway and the recipient relay match one of - # our destination hub lets say it should be distributed internally - } elsif ($CONFIG{MAIL_HUB} && (grep($STATS->{$id}{rcpt_relay}[$i] =~ /$_/, split(/[\s\t,;]/, $CONFIG{MAIL_HUB}) )) ) { - $direction .= 'Int'; - # If the recipient relay match any of our local domain - # lets say the mail should be distributed internally - } elsif (exists $CONFIG{LOCAL_HOST_DOMAIN}{$hostname} && ($#{$CONFIG{LOCAL_HOST_DOMAIN}{$hostname}} > -1) ){ - if (grep($STATS->{$id}{rcpt_relay}[$i] =~ /\b$_$/i, @{$CONFIG{LOCAL_HOST_DOMAIN}{$hostname}})) { + if ($STATS->{$id}{rcpt_relay}[$i]) { + # If the recipient relay is localhost, it should be distributed internally + if ($STATS->{$id}{rcpt_relay}[$i] eq 'localhost') { $direction .= 'Int'; + # If this host is a mail gateway and the recipient relay match one of + # our destination hub lets say it should be distributed internally + } elsif ($CONFIG{MAIL_HUB} && (grep($STATS->{$id}{rcpt_relay}[$i] =~ /$_/, split(/[\s\t,;]/, $CONFIG{MAIL_HUB}) )) ) { + $direction .= 'Int'; + # If the recipient relay match any of our local domain + # lets say the mail should be distributed internally + } elsif (exists $CONFIG{LOCAL_HOST_DOMAIN}{$hostname} && ($#{$CONFIG{LOCAL_HOST_DOMAIN}{$hostname}} > -1) ){ + if (grep($STATS->{$id}{rcpt_relay}[$i] =~ /\b$_$/i, @{$CONFIG{LOCAL_HOST_DOMAIN}{$hostname}})) { + $direction .= 'Int'; + } else { + $direction .= 'Ext'; + } + } elsif (exists $CONFIG{LOCAL_DOMAIN} && ($#{$CONFIG{LOCAL_DOMAIN}} > -1)) { + if (grep($STATS->{$id}{rcpt_relay}[$i] =~ /\b$_$/i, @{$CONFIG{LOCAL_DOMAIN}})) { + $direction .= 'Int'; + } else { + $direction .= 'Ext'; + } + # Finally his only way is to go outside } else { $direction .= 'Ext'; } - } elsif (exists $CONFIG{LOCAL_DOMAIN} && ($#{$CONFIG{LOCAL_DOMAIN}} > -1)) { - if (grep($STATS->{$id}{rcpt_relay}[$i] =~ /\b$_$/i, @{$CONFIG{LOCAL_DOMAIN}})) { - $direction .= 'Int'; - } else { - $direction .= 'Ext'; - } - # Finally his only way is to go outside } else { - $direction .= 'Ext'; + $direction .= 'Unk'; } + return $direction; }