X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=da138878fc69e4596dd550de40580db9461e13fe;hb=03691f94fb11cdce388f89cd81b474e3505912c8;hp=8571a2fa36d26b12c3368f61dff5532f25ba4d08;hpb=aaf4228b14eaaaf1d8510ed9e46c373fd41092b3;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 8571a2fa..da138878 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -504,7 +504,18 @@ sub normal # broadcast_ak1a(pc19($dxchan, $node), $dxchan, $self) unless $dxchan->{isolate}; } - return unless $node; # ignore if havn't seen a PC19 for this one yet + if ($field[1] eq $main::mycall || $field[2] eq $main::mycall) { + dbg('chan', "LOOP: trying to alter config on this node from outside!"); + return; + } + if ($field[2] eq $main::myalias && DXChannel->get($field[1])) { + dbg('chan', "LOOP: trying to connect sysop from outside!"); + return; + } + unless ($node) { + dbg('chan', "Node $field[1] not in config"); + return; + } unless ($node->isa('DXNode')) { dbg('chan', "$field[1] is not a node"); return; @@ -528,7 +539,7 @@ sub normal dbg('chan', "LOOP: $call is a node"); next; } - my $rcall = $ref->call; + my $rcall = $ref->mynode->call; dbg('chan', "LOOP: already have $call on $rcall"); next; } @@ -561,7 +572,18 @@ sub normal dbg('chan', "$field[2] no PC19 yet, autovivified as node"); # broadcast_ak1a(pc19($dxchan, $node), $dxchan, $self) unless $dxchan->{isolate}; } - return unless $node; + if ($field[1] eq $main::mycall || $field[2] eq $main::mycall) { + dbg('chan', "LOOP: trying to alter config on this node from outside!"); + return; + } + if ($field[1] eq $main::myalias && DXChannel->get($field[1])) { + dbg('chan', "LOOP: trying to disconnect sysop from outside!"); + return; + } + unless ($node) { + dbg('chan', "Node $field[2] not in config"); + return; + } unless ($node->isa('DXNode')) { dbg('chan', "LOOP: $field[2] is not a node"); return; @@ -579,6 +601,7 @@ sub normal $ref->del; } else { dbg('chan', "$field[1] not known" ); + return; } last SWITCH; } @@ -621,7 +644,8 @@ sub normal dbg('chan', "LOOP: $call come in on wrong channel"); next; } - dbg('chan', "already have $call"); + my $rcall = $node->mynode->call; + dbg('chan', "already have $call on $rcall"); next; } @@ -693,6 +717,9 @@ sub normal dbg('chan', "$call not in table, dropped"); return; } + } else { + dbg('chan', "I WILL NOT be disconnected!"); + return; } last SWITCH; } @@ -859,7 +886,11 @@ sub normal } if ($pcno == 39) { # incoming disconnect - $self->disconnect(1); + if ($field[1] eq $self->{call}) { + $self->disconnect(1); + } else { + dbg('chan', "LOOP: came in on wrong channel"); + } return; }