fix the send command so that only valid TO addresses are allowed.
authorminima <minima>
Sun, 4 Nov 2001 17:31:38 +0000 (17:31 +0000)
committerminima <minima>
Sun, 4 Nov 2001 17:31:38 +0000 (17:31 +0000)
Changes
cmd/send.pl
perl/DXMsg.pm

diff --git a/Changes b/Changes
index 0140f812fded7953fbce303556108adb8030f126..1580cbca4356c93dc7d9e0eceaec309c339ec7fd 100644 (file)
--- a/Changes
+++ b/Changes
@@ -2,6 +2,12 @@
 1. Allow the user to equal the node in RSPF checks (this allows spots and 
 stuff with the origin and spotter to be the same (although it is STRONGLY 
 recommended that they are NOT!!! [hint hint]).
+2. make the send command rather more sensitive to what is allowed. Basically
+it will only allow TO addresses that are bull addresses (if not private) or
+vaild callsigns (if private). Bull addresses are the ones in 
+/spider/msg/forward.pl with a 'T' flag on them. If there is no forward 
+file it will only allow 'ALL' and 'DX' as valid Bull TO addresses. You may
+use commas as callsign separators if you like.  
 02Nov01=======================================================================
 1. fixed some Aliasing problems, but this whole area will have to be addressed
 more comprehensively.
index 9cee791550ca4aa94e4d77d69bcab18cc26a7bd3..b728d38791fd886ea6acdad5754141019bcbb96e 100644 (file)
@@ -32,8 +32,9 @@ $loc->{rrreq} = '0';
 
 if ($self->state eq "prompt") {
 
-       my @f = split /([\s\@\$])/, $line;
+       my @f = split /([\s\@\$,])/, $line;
        @f = map {s/\s+//g; length $_ ? $_ : ()} @f;
+       @f = grep {$_ ne ','} @f;
        
        # any thing after send?
        return (1, $self->msg('e6')) if !@f;
@@ -109,6 +110,8 @@ if ($self->state eq "prompt") {
                        # callsign ?
                        $notincalls = 0;
 
+#                      $DB::single = 1;
+                       
                        # is this callsign a distro?
                        my $fn = "/spider/msg/distro/$f.pl";
                        if (-e $fn) {
@@ -127,10 +130,14 @@ if ($self->state eq "prompt") {
                                }
                        }
 
-                       if (grep $_ eq $f, @DXMsg::badmsg) {
-                               push @out, $self->msg('m3', $f);
+                       if (($loc->{private} && is_callsign($f)) || (!$loc->{private} && DXMsg::valid_bull_addr($f))) {
+                               if (grep $_ eq $f, @DXMsg::badmsg) {
+                                       push @out, $self->msg('m3', $f);
+                               } else {
+                                       push @to, $f;
+                               }
                        } else {
-                               push @to, $f;
+                               push @out, $self->msg('m3', $f);
                        }
                }
        }
@@ -140,7 +147,7 @@ if ($self->state eq "prompt") {
                $loc->{to} = \@to;
        } else {
                delete $self->{loc};
-               return (1, $self->msg('e6'));
+               return (1, @out, $self->msg('e6'));
        }
        $loc->{from} ||= $self->call;
        unless (is_callsign($loc->{from})) {
index 118feef49dba1bf420ca2172dfb6aa990ed975fc..dbcd8097bafce544231a37f7e58565f55999e3c3 100644 (file)
@@ -1182,6 +1182,32 @@ sub forward_it
        return 0;
 }
 
+#
+# look down the forward table to see whether this is a valid bull
+# or not (ie it will forward somewhere even if it is only here)
+#
+sub valid_bull_addr
+{
+       my $call = shift;
+       my $i;
+       
+       unless (@forward) {
+               return 1 if $call =~ /^ALL/;
+               return 1 if $call =~ /^DX/;
+               return 0;
+       }
+       
+       for ($i = 0; $i < @forward; $i += 5) {
+               my ($sort, $field, $pattern, $action, $bbs) = @forward[$i..($i+4)]; 
+               if ($field eq 'T') {
+                       if (!$pattern || $call =~ m{$pattern}i) {
+                               return 1;
+                       }
+               }
+       }
+       return 0;
+}
+
 sub dump_it
 {
        my $ref = shift;