diff options
author | Keith Winstein <keithw@mit.edu> | 2012-03-10 03:34:47 -0500 |
---|---|---|
committer | Keith Winstein <keithw@mit.edu> | 2012-03-10 03:34:47 -0500 |
commit | df3eec13973ab22301bdd0bedaadce46343b5109 (patch) | |
tree | 3c0ccb58a4b0a6cf5bb5cad99ed91531773f82e8 /scripts | |
parent | c96e4956b0183d73cce8d82ac1999aaea4761092 (diff) |
Allow explicit UDP port option, confine ports to range 60000..61000
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/mosh | 24 |
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 |