return shift @ARGV;
}
-$|=1;
-
@lcmd= ();
@encryption= ();
$masq= 0;
if ($rapcmd) {
pipe(RAPREAD,RCMDREADSUB) or fail("pipe");
- select(RCMDREADSUB); $|=1; select(STDOUT);
}
pipe(RCMDWRITESUB,DUMPKEYS) or fail("pipe");
defined($c_rcmd= fork) or fail("fork for remote");
if ($rapcmd) {
close RCMDREADSUB if $rapcmd;
- $!=0; $_= <RAPREAD>; $e="$!";
+ $_= '';
+ while (!m/\n/) {
+ $!=0;
+ defined($nread= sysread(RAPREAD,$_,1,length))
+ or fail("read from remote command");
+ if (!$nread) {
+ close DUMPKEYS;
+ close RAPREAD;
+ waitpid $c_rcmd,0 or fail("wait for remote command");
+ quit($? ? "remote command failed (code $?)" :
+ "no details received from remote");
+ }
+ }
+ chomp;
+ m/^([.0-9]+)\,(\d+)$/ or quit("invalid details from remote end: \`$_'");
+ ($rar,$rpr) = ($1,$2);
+ $ra= conv_host_addr($rar);
+ $rp= conv_port_number($rpr);
defined($c_catremdebug= fork) or fail("fork for cat remote debug");
if (!$c_catremdebug) {
open(STDIN,"<&RAPREAD") or fail("redirect remote debug");
- close RAPREAD;
close DUMPKEYS;
close L;
exec "cat"; fail("execute cat");
}
close RAPREAD;
-
- if (!length) {
- close DUMPKEYS;
- waitpid $c_rcmd,0 or fail("wait for remote command");
- quit($? ? "remote command failed (code $?)" :
- $e ? "read error from remote command: $e" :
- "no details received from remote");
- }
- chomp;
- m/^([.0-9]+)\,(\d+)$/ or quit("invalid details from remote end: \`$_'");
- ($rar,$rpr) = ($1,$2);
- $ra= conv_host_addr($rar);
- $rp= conv_port_number($rpr);
}
} elsif ($dump) {
open DUMPKEYS, ">&STDOUT" or fail("reopen stdout for key material");