From c8340526ed9b2d0f13a96015090c921ebad114ea Mon Sep 17 00:00:00 2001 From: Andrew DeFaria Date: Tue, 27 Jul 2021 13:06:34 -0700 Subject: [PATCH] Fixed but when attempting to nulllist people pretending to be me --- maps/bin/MAPSDeliver | 11 ++++++--- maps/bin/maps | 59 ++++++++++++++++++++++++++++---------------- maps/lib/MAPSLog.pm | 2 ++ 3 files changed, 47 insertions(+), 25 deletions(-) diff --git a/maps/bin/MAPSDeliver b/maps/bin/MAPSDeliver index eee5f26..38596c0 100755 --- a/maps/bin/MAPSDeliver +++ b/maps/bin/MAPSDeliver @@ -61,14 +61,17 @@ my ($userid, $msgfile) = @ARGV; die 'User id not specified' unless $userid; die 'Msgfile not specified' unless $msgfile; -my $err = DeliverMail($userid, $msgfile); +my $errmsg = DeliverMail($userid, $msgfile); -if ($err) { - OpenDB('maps', 'spam'); +if ($errmsg) { + #OpenDB('maps', 'spam'); SetContext($userid); - Error($err); + Error( + userid => $userid, + message => $errmsg, + ); exit 1; } # if diff --git a/maps/bin/maps b/maps/bin/maps index 223cda6..22a7bb8 100755 --- a/maps/bin/maps +++ b/maps/bin/maps @@ -46,7 +46,8 @@ $Date: 2013/06/12 14:05:47 $ -v|erbose: Be verbose -de|bug: Output debug messages - -[no]e|xecute: Set execute mode. + -[no]e|xecute: Set execute mode. + -f|ile : File to use as a test message # (c) Copyright 2000-2021, Andrew@DeFaria.com, all rights reserved. @@ -56,6 +57,7 @@ use strict; use warnings; use Getopt::Long; +use Pod::Usage; use Email::Valid; use FindBin; use File::Temp qw (tempfile); @@ -68,11 +70,16 @@ use MAPS; use MAPSLog; use Display; +use Logger; use Utils; -my $verbose = 0; -my $execute = 1; -my $userid = $ENV{USER}; +my %opts = ( + execute => 1, +); + +my $userid = $ENV{USER}; + +my $log; # For some reason I'm not parsing messages correctly but it only seems to # happen when the message is piped in from the MTA. This routine will @@ -118,7 +125,7 @@ sub ValidDomainUser($) { sub ProcessMsgs ($$$) { my ($msgfile, $username, $user_email) = @_; - return unless $execute; + return unless $opts{execute}; while (!eof $msgfile) { my ($sender, $sender_long, $reply_to, $subject, $data) = ReadMsg ($msgfile); @@ -148,7 +155,7 @@ sub ProcessMsgs ($$$) { if ($sender eq $user_email and (lc ($sender_long) !~ lc ("\"$username\" <$user_email>") and lc ($sender_long) !~ lc ("$username <$user_email>"))) { - verbose "Nulllisting message from sender ($sender_long) pretending to be $user_email"; + $log->msg("Nulllisting message from sender ($sender_long) pretending to be $user_email"); Nulllist $sender; next; } # if @@ -158,10 +165,12 @@ sub ProcessMsgs ($$$) { if ($onlist) { if (ValidDomainUser $sender) { - verbose "Whitelisting $sender"; + $log->msg("Whitelisting $sender"); + Whitelist $sender, $data, $sequence, $hit_count; } else { - verbose "Sender from this domain but user not found"; + $log->msg("Sender from this domain but user not found"); + Nulllist $sender; } # if @@ -172,7 +181,7 @@ sub ProcessMsgs ($$$) { ($onlist, $rule, $sequence, $hit_count) = OnBlacklist $sender; if ($onlist) { - verbose "Blacklisting $sender"; + $log->msg("Blacklisting $sender"); Blacklist( userid => $userid, @@ -189,13 +198,14 @@ sub ProcessMsgs ($$$) { ($onlist, $rule, $sequence, $hit_count) = OnNulllist $sender; if ($onlist) { - verbose "Nulllisting $sender"; + $log->msg("Nulllisting $sender"); Nulllist $sender, $sequence, $hit_count; next; } # if # Return processing: - verbose "Returning message from $sender"; + $log->msg("Returning message from $sender"); + ReturnMsg( userid => $userid, sender => $sender, @@ -208,11 +218,18 @@ sub ProcessMsgs ($$$) { # Main GetOptions( - 'user=s' => \$userid, - 'verbose' => sub { set_verbose }, - 'debug' => sub { set_debug }, - 'execute!' => \$execute, -) || Usage; + \%opts, + 'user=s', + 'verbose', + 'debug', + 'execute!', +) or pod2usage; + +$log = Logger->new( + path => '/var/local/log', + timestamped => 'yes', + append => 'yes', +); my $msgfile; @@ -220,18 +237,18 @@ if ($ARGV[0] and $ARGV[0] ne "") { open $msgfile, '<', $ARGV[0]; unless ($msgfile) { - Error "Unable to open file ($ARGV[0]): $!\n"; + $log->err("Unable to open file ($ARGV[0]): $!"); exit 1; } # if } else { $msgfile = SaveStdin; } # if -verbose "Starting MAPS...."; +# Get user +FindUser(userid => $userid); -my %userOptions = SetContext $userid - or die "$userid is not a registered MAPS user\n"; +my $user = GetUser; -ProcessMsgs $msgfile, $userOptions{name}, lc $userOptions{email}; +ProcessMsgs $msgfile, $user->{name}, lc $user->{email}; exit 0; diff --git a/maps/lib/MAPSLog.pm b/maps/lib/MAPSLog.pm index 930dd17..9d88db4 100644 --- a/maps/lib/MAPSLog.pm +++ b/maps/lib/MAPSLog.pm @@ -106,6 +106,8 @@ sub Debug(%) { sub Error(%) { my (%params) = @_; +CheckParms(['userid', 'message'], \%params); + return Logmsg( userid => $params{userid}, type => 'error', -- 2.17.1