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')) {
$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
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 {
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(
}
my @res = $cmdref->(@$args);
+# diffms("by $call 1", $line, $t0, scalar @res) if isdbg('chan');
return @res;
},
# $args,
$self->send(@res);
}
}
- DXCommandmode::_diffms($call, $line, $t0);
+ diffms("rcmd from $user on $call", $line, $t0, scalar @res) if isdbg('chan');
});
return @out;