X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=7ef99411fd7d099d1de5e8838e867d02a2f6b5dd;hb=80a2dd317e5d6b24250388b5177cbf85abee5a85;hp=b446b713f3e705994c1516995ff21583335425c3;hpb=2343a398ca48f31195884e223839dfa0cb1d135f;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index b446b713..7ef99411 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -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;