chiark / gitweb /
Make debugging redirect work.
authorian <ian>
Wed, 31 May 2000 01:57:25 +0000 (01:57 +0000)
committerian <ian>
Wed, 31 May 2000 01:57:25 +0000 (01:57 +0000)
ipif/udptunnel

index 5b64b2b631be1115dec6efd9fb150caf7f426c35..b76a9da002393bb1cc433bfda9290144e21a7a47 100755 (executable)
@@ -170,8 +170,6 @@ sub arg_value ($$) {
     return shift @ARGV;
 }
 
-$|=1;
-
 @lcmd= ();
 @encryption= ();
 $masq= 0;
@@ -276,7 +274,6 @@ if (@ARGV) {
 
     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");
@@ -295,30 +292,33 @@ if (@ARGV) {
     
     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");