chiark
/
gitweb
/
~ian
/
userv-utils.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
caad5eb
)
New -l options for local cmd. Gah.
author
ian
<ian>
Sat, 25 Sep 1999 01:44:18 +0000
(
01:44
+0000)
committer
ian
<ian>
Sat, 25 Sep 1999 01:44:18 +0000
(
01:44
+0000)
ipif/udptunnel
patch
|
blob
|
history
diff --git
a/ipif/udptunnel
b/ipif/udptunnel
index a40dce06180e6e60060b22de804815729669d42e..7c977e172f6e7b9eb1a23abace21fa938426e922 100755
(executable)
--- a/
ipif/udptunnel
+++ b/
ipif/udptunnel
@@
-3,6
+3,7
@@
#
# usage:
# udptunnel
#
# usage:
# udptunnel
+# [ -l[<local-command/arg>] ... . ]
# <public-local-host/addr>,<public-local-port>
# <public-remote-host/addr>,<public-remote-port>
# <private-local-addr>,<private-remote-addr>,<mtu>,<proto>
# <public-local-host/addr>,<public-local-port>
# <public-remote-host/addr>,<public-remote-port>
# <private-local-addr>,<private-remote-addr>,<mtu>,<proto>
@@
-24,6
+25,8
@@
# udptunnel will userv ipif locally, as
# userv root ipif <private-local-addr>,<private-remote-addr>,<mtu>,<proto>
# <extra-local-nets>
# udptunnel will userv ipif locally, as
# userv root ipif <private-local-addr>,<private-remote-addr>,<mtu>,<proto>
# <extra-local-nets>
+# or, if -lc was given, userv root ipif is replaced with the argument(s) to
+# successive -lc options.
use Socket;
use POSIX;
use Socket;
use POSIX;
@@
-68,6
+71,19
@@
sub show_addr_port ($) {
return inet_ntoa($s[1]).','.$s[0];
}
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);
($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: $!"); }
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");
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");
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");
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;
}
close UW;
close DR;