This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
fidohub/tools/filters/filter-hub.pl

213 lines
5.5 KiB
Perl

# Local defines
# The filter_hub() subroutine should
#
# usage example:
# ==============
# BEGIN{ require "filter-hub.pl" }
# sub filter() {
# my $r=filter_hub();
# return $r if( length($r)>0 );
# ...some other functions...
# }
# sub process_pkt{}
# sub after_unpack{}
# sub before_pack{}
# sub pkt_done{}
# sub scan{}
# sub route{}
# sub hpt_exit{}
# ==============
#use strict;
# predefined variables
#my($fromname, $toname, $fromaddr, $toaddr, $subject, $date, $text, $attr);
#my($secure, $pktname, $rc, $res, $area, $pktfrom, $addr, $from);
#my($kill, $change, $flavour);
# My global variables
sub filter_hub
{
if ($DEBUG_MODE==1) {
w_log('1','filter-hub.pl: filter_hub()');
}
# EchoMail Processing
if (defined($area)) {
w_log('J','No checking for echomail!');
return '';
}
# Validate netmail routing
w_log('L',"Netmail: From [$fromaddr] to [$toaddr]");
# Check if Netmail is to me or a point of mine
if (grep(/^$toaddr$/,@{$config{addr}}))
{
w_log('1',"Netmail: To the HUB address [$toaddr] (To:$toname <- From:$fromname).");
# Ping messages
if ($toname =~ /^ping$/i) {
w_log('L',"Netmail: PING from [$fromaddr].");
if ($attr & $MSG_RRCT) {
putMsgInArea('BADMAIL',$fromname,$toname,$fromaddr,$toaddr,$subject,$date,($MSG_SENT | $MSG_READ | $MSG_PRIVATE),
"hpt> Ping request with RRC\r".$text,0);
if ($DEBUG_MODE) {
return '';
}
$kill = 1;
return 'Ping request with RRC';
}
$text =~ s/\r\x01/\r\@/gs;
$text =~ s/^\x01/\@/s;
$time = localtime;
$text = <<EOF;
Hello $fromname,
Your PING message received by my system at $time.
Original message:
============================================================================
From : $fromname ($fromaddr)
To : $toname ($toaddr)
Subject: $subject
Date : $date
----------------------------------------------------------------------------
$text
============================================================================
EOF
putMsgInArea('',$FILTER_FROM,$fromname,$toaddr,$fromaddr,'Ping Reply','',($MSG_PRIVATE | $MSG_LOCAL | $MSG_RRCT),add_tz($text),1);
$newnet = 1;
if ($DEBUG_MODE) {
return '';
}
$kill = 1;
return "Ping from $fromaddr";
} elsif ($toname =~ /^(area|file)fix$/i) {
w_log('L',"Netmail: *FIX. [$fromaddr]");
if ($attr & $MSG_RRCT) {
putMsgInArea('BADMAIL',$fromname,$toname,$fromaddr,$toaddr,$subject,$date,($MSG_SENT | $MSG_READ | $MSG_PRIVATE),
"hpt> $toname request with RRC\r" . $text, 0);
if ($DEBUG_MODE) {
return '';
}
$kill = 1;
return "$toname request with RRC";
}
if (lc($toname) eq 'filefix')
{
putMsgInArea('robots',$fromname,$toname,$fromaddr,$toaddr,$subject,$date,($MSG_PRIVATE),
$text, 0);
w_log('L',"Netmail: *FIX. Copied to robots [$fromaddr]");
$newhtick = 1;
$kill = 1;
}
# Messages to *fix are OK
return '';
} elsif ($fromname =~ /^rexfix$/i) {
w_log('L',"Netmail: From REXFIX. [$fromaddr]");
# Messages from rexfix are OK
return '';
} elsif ($toname =~ /^(coordinator)$/i) {
w_log('L',"Netmail: MAKENL Processing. [$fromaddr] ($attr)");
if ($ROUTE_NOTICE) {
putMsgInArea($ROUTE_NOTICE,$fromname,$toname,$fromaddr,$toaddr,$subject,$date,($MSG_READ|$MSG_SENT),
add_tz("Unable to deliver Netmail\rhpt> Unprotected message from unlisted system.\r\r".$text),0);
$newecho = 1;
}
if ($DEBUG_MODE) {
return '';
}
$kill = 1;
return "$toname reply from MakeNL";
} elsif ($toname =~ /^$FILTER_FROM$/i) {
w_log('L',"Netmail: Message to me, how nice... [$fromaddr] ($attr)");
if ($ROUTE_NOTICE) {
putMsgInArea($ROUTE_NOTICE,$fromname,$toname,$fromaddr,$toaddr,$subject,$date,($MSG_READ|$MSG_SENT),
add_tz("I have friends!\rhpt> Netmail to me on the hub.\r\r".$text),0);
$newecho = 1;
}
# Messages to the Robot are OK
return '';
} else {
if (($attr & $MSG_RREQ) || ($attr & $MSG_RAUD)) {
w_log('L',"Netmail: RRQ ARQ.");
receipt($fromaddr, $toaddr, $fromname, $toname, $subject, $date);
}
w_log('L',"Netmail: To user on Hub - but nobody here? [$attr]");
bounce($fromname,$fromaddr,$toname,$toaddr,$date,$subject,$text,'Sorry, the HUB is unattended',$toaddr);
if ($DEBUG_MODE) {
return '';
}
$kill = 1;
return "Message to HUB";
}
}
return '';
}
# ========================================================================
# local functions
# ========================================================================
sub receipt
{
if ($DEBUG_MODE==1) {
w_log('1',"filter-hub.pl: receipt()");
}
my($fromaddr,$toaddr,$fromname,$toname,$subject,$date) = @_;
my($text);
$text = <<EOF;
Hello $fromname!
Your message to $toname successfully delivered.
Original message header:
=============================================================
From : $fromname ($fromaddr)
To : $toname ($toaddr)
Subject: $subject
Date : $date
=============================================================
EOF
putMsgInArea('',$FILTER_FROM,$fromname,$toaddr,$fromaddr,'Return Receipt Response','',($MSG_PRIVATE | $MSG_KILL | $MSG_LOCAL | $MSG_RRCT),
add_tz($text),1);
$newnet = 1;
}
w_log('U',"filter-hub is LOADED");
1;