1. Added a bit more checking to the rcmd thing to make more sure that this
[spider.git] / perl / DXProt.pm
index b446b713f3e705994c1516995ff21583335425c3..7ef99411fd7d099d1de5e8838e867d02a2f6b5dd 100644 (file)
@@ -475,8 +475,9 @@ sub normal
                if ($pcno == 34 || $pcno == 36) { # remote commands (incoming)
                        if ($field[1] eq $main::mycall) {
                                my $ref = DXUser->get_current($field[2]);
+                               my $cref = DXCluster->get($field[2]);
                                Log('rcmd', 'in', $ref->{priv}, $field[2], $field[3]);
-                               unless ($field[3] =~ /rcmd/i) {    # not allowed to relay RCMDS!
+                               unless ($field[3] =~ /rcmd/i || !$cref || !$ref || $cref->mynode->call ne $ref->homenode) {    # not allowed to relay RCMDS!
                                        if ($ref->{priv}) {     # you have to have SOME privilege, the commands have further filtering
                                                $self->{remotecmd} = 1; # for the benefit of any command that needs to know
                                                my @in = (DXCommandmode::run_cmd($self, $field[3]));
@@ -486,9 +487,11 @@ sub normal
                                                        Log('rcmd', 'out', $field[2], $_);
                                                }
                                                delete $self->{remotecmd};
+                                       } else {
+                                               $self->send(pc35($main::mycall, $field[2], "$main::mycall:sorry...!"));
                                        }
                                } else {
-                                       $self->send(pc35($main::mycall, $field[2], "$main::mycall:Tut tut tut...!"));
+                                       $self->send(pc35($main::mycall, $field[2], "$main::mycall:your attempt is logged, Tut tut tut...!"));
                                }
                        } else {
                                route($field[1], $line);
@@ -713,7 +716,7 @@ sub send_dx_spot
                } elsif ($dxchan->is_user) {
                        my $buf = Spot::formatb($_[0], $_[1], $_[2], $_[3], $_[4]);
                        $buf .= "\a\a" if $dxchan->beep;
-                       $dxchan->send($buf);
+                       $dxchan->send($buf) if !$hops || ($hops && $filter);
                }                                       
        }
 }
@@ -734,8 +737,9 @@ sub send_local_config
                # and are not themselves isolated, this to make sure that isolated nodes
         # don't appear outside of this node
                @nodes = DXNode::get_all();
-               @nodes = grep { $_->dxchan != $self && !$_->dxchan->{isolate} } @nodes;
                @nodes = grep { $_->{call} ne $main::mycall } @nodes;
+               @nodes = grep { $_->dxchan != $self } @nodes if @nodes;
+               @nodes = grep { !$_->dxchan->{isolate} } @nodes if @nodes;
                @localnodes = grep { $_->dxchan->{call} eq $_->{call} } @nodes if @nodes;
                unshift @localnodes, DXCluster->get_exact($main::mycall);
                @remotenodes = grep { $_->dxchan->{call} ne $_->{call} } @nodes if @nodes;