aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts
diff options
context:
space:
mode:
authorGravatar Keith Winstein <keithw@mit.edu>2012-03-10 03:34:47 -0500
committerGravatar Keith Winstein <keithw@mit.edu>2012-03-10 03:34:47 -0500
commitdf3eec13973ab22301bdd0bedaadce46343b5109 (patch)
tree3c0ccb58a4b0a6cf5bb5cad99ed91531773f82e8 /scripts
parentc96e4956b0183d73cce8d82ac1999aaea4761092 (diff)
Allow explicit UDP port option, confine ports to range 60000..61000
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/mosh24
1 files changed, 23 insertions, 1 deletions
diff --git a/scripts/mosh b/scripts/mosh
index e85edb1..5a1c4b2 100755
--- a/scripts/mosh
+++ b/scripts/mosh
@@ -29,6 +29,8 @@ my $server = 'mosh-server';
my $predict = undef;
+my $port_request = undef;
+
my $usage =
qq{Usage: $0 [options] [user@]host
--client=PATH mosh client on local machine (default: "mosh-client")
@@ -38,6 +40,8 @@ qq{Usage: $0 [options] [user@]host
-a --predict=always use local echo even on fast links
-n --predict=never never use local echo
+-p --port=NUM server-side UDP port
+
Please report bugs to mosh-devel\@mit.edu.
Mosh home page: http://mosh.mit.edu\n};
@@ -55,8 +59,10 @@ sub predict_check {
GetOptions( 'client=s' => \$client,
'server=s' => \$server,
'predict=s' => \$predict,
+ 'port=i' => \$port_request,
'a' => sub { $predict = 'always' },
'n' => sub { $predict = 'never' },
+ 'p=i' => \$port_request,
'fake-proxy!' => \my $fake_proxy ) or die $usage;
if ( defined $predict ) {
@@ -69,6 +75,16 @@ if ( defined $predict ) {
predict_check( $predict, 0 );
}
+if ( defined $port_request ) {
+ if ( $port_request =~ m{^[0-9]+$}
+ and $port_request >= 0
+ and $port_request <= 65535 ) {
+ # good port
+ } else {
+ die "$0: Server-side port ($port_request) must be within valid range [0..65535].\n";
+ }
+}
+
delete $ENV{ 'MOSH_PREDICTION_DISPLAY' };
if ( defined $fake_proxy ) {
@@ -133,7 +149,13 @@ if ( $pid == 0 ) { # child
open STDERR, ">&", $pty_slave->fileno() or die;
close $pty_slave;
- my $s = q{sh -c 'exec "$@" "`set -- $SSH_CONNECTION; echo $3`"' -- } . $server;
+ my $s;
+ if ( defined $port_request ) {
+ $s = q{sh -c 'MOSH_PORT=$1; shift; MOSH_IP=`set -- $SSH_CONNECTION; echo $3`; exec "$@" $MOSH_IP $MOSH_PORT' -- } . $port_request . ' ' . $server;
+ } else {
+ # retain compatibility with older server when no port requested
+ $s = q{sh -c 'exec "$@" "`set -- $SSH_CONNECTION; echo $3`"' -- } . $server;
+ }
exec 'ssh', '-S', 'none', '-o', "ProxyCommand=$0 --fake-proxy -- %h %p", '-t', $userhost, '--', $s;
die "Cannot exec ssh: $!\n";
} else { # server