X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=6d20b887407984956129ac06a22656078c6330a7;hb=7f6160c19c797aeb4cbc12cd154d8a7cf5263630;hp=7c1ed1a4e0d2a976015d465abfb465e2409357f2;hpb=5fc4f15ca36b6926fac4a8b33b3944cc1f7cef49;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 7c1ed1a4..6d20b887 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -1118,6 +1118,7 @@ sub load_hops sub process_rcmd { my ($self, $tonode, $fromnode, $user, $cmd) = @_; + if ($tonode eq $main::mycall) { my $ref = DXUser::get_current($fromnode); unless ($ref && UNIVERSAL::isa($ref, 'DXUser')) { @@ -1125,13 +1126,13 @@ sub process_rcmd $self->send_rcmd_reply($main::mycall, $fromnode, $user, "sorry...!"); return; } + Log('rcmd', 'in', ($ref->{priv}||0), $fromnode, $cmd, $user); my $cref = Route::Node::get($fromnode); unless ($cref && UNIVERSAL::isa($cref, 'Route')) { dbg("DXProt process_rcmd: Route $fromnode isn't a reference (tell G1TLH)"); $self->send_rcmd_reply($main::mycall, $fromnode, $user, "sorry...!"); return; } - Log('rcmd', 'in', ($ref->{priv}||0), $fromnode, $cmd); if ($cmd !~ /^\s*rcmd/i && $ref->homenode && $cref->call eq $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 @@ -1173,7 +1174,7 @@ sub send_rcmd_reply while (@_) { my $line = shift; $line =~ s/\s*$//; - Log('rcmd', 'out', $fromnode, $line); + Log('rcmd', 'out', $fromnode, $line, $user); if ($self->is_clx) { $self->send(pc85($main::mycall, $fromnode, $user, "$main::mycall:$line")); } else { @@ -1216,6 +1217,9 @@ sub spawn_cmd my $fc = Mojo::IOLoop::Subprocess->new; + # just behave normally if something has set the "one-shot" _nospawn in the channel + return ($cmdref->(@$args)) if $self->{_nospawn}; + # $fc->serializer(\&encode_json); # $fc->deserializer(\&decode_json); $fc->run( @@ -1227,6 +1231,7 @@ sub spawn_cmd } my @res = $cmdref->(@$args); +# diffms("by $call 1", $line, $t0, scalar @res) if isdbg('chan'); return @res; }, # $args, @@ -1256,7 +1261,7 @@ sub spawn_cmd $self->send(@res); } } - DXCommandmode::_diffms($call, $line, $t0); + diffms("rcmd from $user on $call", $line, $t0, scalar @res) if isdbg('progress'); }); return @out;