fix the send command so that only valid TO addresses are allowed.
[spider.git] / cmd / send.pl
index d6e502cd4f1d82840335fe5bed9c1a1ec389adde..b728d38791fd886ea6acdad5754141019bcbb96e 100644 (file)
@@ -32,10 +32,13 @@ $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;
+       return (1, $self->msg('e28')) unless $self->registered || uc $f[0] eq $main::myalias;
 
        while (@f) {
                my $f = uc shift @f; 
@@ -94,19 +97,21 @@ if ($self->state eq "prompt") {
                        $loc->{rrreq} = '1';
                } elsif ($f eq '<' && @f) {     # this is bbs syntax  for from call
                        $loc->{from} = uc shift @f;
-               } elsif ($f eq '@' && @f) {       # this is bbs syntax, for send it 'to node'
-                       ;
+               } elsif (($f =~ /^[\@\.\#\$]$/ || $f eq '.#') && @f) {       # this is bbs syntax, for send it 'to node'
+                       shift @f;
                } elsif ($f =~ /^\$/) {     # this is bbs syntax  for a bid
                        next;
-               } elsif ($f =~ /^<\S+/) {     # this is bbs syntax  for from call
-                       ($loc->{from}) = $f =~ /^<(\S+)$/;
-               } elsif ($f =~ /^\@\S+/) {     # this is bbs syntax  for origin
-                       ($loc->{origin}) = $f =~ /^\@(\S+)$/;
+               } elsif ($f =~ /^<(\S+)/) {     # this is bbs syntax  for from call
+                       $loc->{from} = $1;
+               } elsif ($f =~ /^\$\S+/) {     # this is bbs syntax  for bid
+                       ;
                } else {
 
                        # callsign ?
                        $notincalls = 0;
 
+#                      $DB::single = 1;
+                       
                        # is this callsign a distro?
                        my $fn = "/spider/msg/distro/$f.pl";
                        if (-e $fn) {
@@ -125,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);
                        }
                }
        }
@@ -138,7 +147,12 @@ 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})) {
+               delete $self->{loc};
+               return (1, $self->msg('e22', $loc->{from}));
        }
 
        # find me and set the state and the function on my state variable to