From abe75cda09856fedab1d54cc04e0c49b95ece805 Mon Sep 17 00:00:00 2001 From: ian Date: Sat, 25 Sep 1999 01:44:18 +0000 Subject: [PATCH] New -l options for local cmd. Gah. --- ipif/udptunnel | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/ipif/udptunnel b/ipif/udptunnel index a40dce0..7c977e1 100755 --- a/ipif/udptunnel +++ b/ipif/udptunnel @@ -3,6 +3,7 @@ # # usage: # udptunnel +# [ -l[] ... . ] # , # , # ,,, @@ -24,6 +25,8 @@ # udptunnel will userv ipif locally, as # userv root ipif ,,, # +# or, if -lc was given, userv root ipif is replaced with the argument(s) to +# successive -lc options. use Socket; use POSIX; @@ -68,6 +71,19 @@ sub show_addr_port ($) { return inet_ntoa($s[1]).','.$s[0]; } +@lcmd= (); + +while ($ARGV[0] =~ m/^-/) { + $_= shift @ARGV; + last if $_ eq '--'; + if (s/^-l//) { + push @lcmd,$_ if length; + while (@ARGV && ($_= shift @ARGV) ne '-') { push @lcmd, $_; } + } else { + quit("unknown option \`$_'"); + } +} + ($las,$lps)= eat_addr_port('print|silent'); $la= conv_host_addr($las); $lp= conv_port_number($lps); @@ -134,7 +150,11 @@ $rsp= show_addr_port($rs); if ($lps eq 'print') { print($lsp,"\n") or quit("write port to stdout: $!"); } +@lcmd= qw(userv root ipif) unless @lcmd; + debug("using remote $rsp local $lsp"); +push @lcmd, ("$lva,$rva,$mtu,$proto",$lepn); +debug("local command @lcmd"); pipe(UR,UW) or fail("up pipe"); pipe(DR,DW) or fail("down pipe"); @@ -144,8 +164,8 @@ if (!$c3) { close UR; close DW; open(STDIN,"<&DR") or fail("reopen stdin for packets"); open(STDOUT,">&UW") or fail("reopen stdout for packets"); - exec "userv","root","ipif","$lva,$rva,$mtu,$proto",$lepn; - quit("cannot execute userv ipif: $!"); + exec @lcmd; + quit("cannot execute $lcmd[0]: $!"); } close UW; close DR; -- 2.30.2