X-Git-Url: http://www.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=cmd%2Fsend.pl;h=0fb91e10bc7ed3799f8f1014c50fe790b3304976;hb=4b207544da78b182bd12e94eab01451694749012;hp=59b535f73fae60da27fe6388345d4dfa9723752c;hpb=40310b181de51fd4917e74f4672aa31a5f255c34;p=spider.git diff --git a/cmd/send.pl b/cmd/send.pl index 59b535f7..0fb91e10 100644 --- a/cmd/send.pl +++ b/cmd/send.pl @@ -14,10 +14,11 @@ # # Copyright (c) Dirk Koopman G1TLH # -# $Id$ +# # my ($self, $line) = @_; -return (1, $self->msg('e5')) if $self->remotecmd; +return (1, $self->msg('e5')) if $self->remotecmd || $self->inscript; +return (1, $self->msg('e36')) unless $self->state =~ /^prompt/; my @out; my $loc = $self->{loc} = {}; @@ -32,10 +33,13 @@ $loc->{rrreq} = '0'; if ($self->state eq "prompt") { - my @f = split /\b/, $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->isregistered || uc $f[0] eq $main::myalias; while (@f) { my $f = uc shift @f; @@ -94,41 +98,53 @@ 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 =~ /^[\@\.\#]$/ || $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) { - my $fh = new IO::File $fn; - if ($fh) { - local $/ = undef; - my $s = <$fh>; - $fh->close; - my @call; - @call = eval $s; - return (1, "Error in Distro $f.pl:", $@) if $@; - if (@call > 0) { - push @f, @call; - next; + # but be careful about messages to 'sysop' + if ($self->priv < 5 && $f eq 'SYSOP') { + push @to, $main::myalias; + $loc->{private} = 1; + } else { + my $fn = "/spider/msg/distro/$f.pl"; + if (-e $fn) { + my $fh = new IO::File $fn; + if ($fh) { + local $/ = undef; + my $s = <$fh>; + $fh->close; + my @call; + @call = eval $s; + return (1, "Error in Distro $f.pl:", $@) if $@; + if (@call > 0) { + push @f, @call; + next; + } } } } - 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 +154,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