~ubuntu-branches/ubuntu/trusty/erlang/trusty

« back to all changes in this revision

Viewing changes to lib/ssh/src/ssh_cli.erl

  • Committer: Bazaar Package Importer
  • Author(s): Clint Byrum
  • Date: 2011-05-05 15:48:43 UTC
  • mfrom: (3.5.13 sid)
  • Revision ID: james.westby@ubuntu.com-20110505154843-0om6ekzg6m7ugj27
Tags: 1:14.b.2-dfsg-3ubuntu1
* Merge from debian unstable.  Remaining changes:
  - Drop libwxgtk2.8-dev build dependency. Wx isn't in main, and not
    supposed to.
  - Drop erlang-wx binary.
  - Drop erlang-wx dependency from -megaco, -common-test, and -reltool, they
    do not really need wx. Also drop it from -debugger; the GUI needs wx,
    but it apparently has CLI bits as well, and is also needed by -megaco,
    so let's keep the package for now.
  - debian/patches/series: Do what I meant, and enable build-options.patch
    instead.
* Additional changes:
  - Drop erlang-wx from -et
* Dropped Changes:
  - patches/pcre-crash.patch: CVE-2008-2371: outer level option with
    alternatives caused crash. (Applied Upstream)
  - fix for ssl certificate verification in newSSL: 
    ssl_cacertfile_fix.patch (Applied Upstream)
  - debian/patches/series: Enable native.patch again, to get stripped beam
    files and reduce the package size again. (build-options is what
    actually accomplished this)
  - Remove build-options.patch on advice from upstream and because it caused
    odd build failures.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
%%
2
2
%% %CopyrightBegin%
3
 
%% 
4
 
%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
5
 
%% 
 
3
%%
 
4
%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
 
5
%%
6
6
%% The contents of this file are subject to the Erlang Public License,
7
7
%% Version 1.1, (the "License"); you may not use this file except in
8
8
%% compliance with the License. You should have received a copy of the
9
9
%% Erlang Public License along with this software. If not, it can be
10
10
%% retrieved online at http://www.erlang.org/.
11
 
%% 
 
11
%%
12
12
%% Software distributed under the License is distributed on an "AS IS"
13
13
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
14
14
%% the License for the specific language governing rights and limitations
15
15
%% under the License.
16
 
%% 
 
16
%%
17
17
%% %CopyrightEnd%
18
18
%%
19
19
 
327
327
    {[], Buf};
328
328
window_change(Tty, OldTty, {Buf, BufTail, Col}) ->
329
329
    M1 = move_cursor(Col, 0, OldTty),
330
 
    N = max(Tty#ssh_pty.width - OldTty#ssh_pty.width, 0) * 2,
 
330
    N = erlang:max(Tty#ssh_pty.width - OldTty#ssh_pty.width, 0) * 2,
331
331
    S = lists:reverse(Buf, [BufTail | lists:duplicate(N, $ )]),
332
332
    M2 = move_cursor(length(Buf) + length(BufTail) + N, Col, Tty),
333
333
    {[M1, S | M2], {Buf, BufTail, Col}}.
398
398
nthtail(N, [_ | A]) when N > 0 -> nthtail(N-1, A);
399
399
nthtail(_, _) -> [].
400
400
 
401
 
%%% utils
402
 
max(A, B) when A > B -> A;
403
 
max(_A, B) -> B.
404
 
 
405
401
ifelse(Cond, A, B) ->
406
402
    case Cond of
407
403
        true -> A;
419
415
    Shell = State#state.shell,
420
416
    ShellFun = case is_function(Shell) of
421
417
                   true ->
 
418
                       {ok, User} = 
 
419
                           ssh_userreg:lookup_user(ConnectionManager),
422
420
                       case erlang:fun_info(Shell, arity) of
423
421
                           {arity, 1} ->
424
 
                               {ok, User} = 
425
 
                                   ssh_userreg:lookup_user(ConnectionManager),
426
422
                               fun() -> Shell(User) end;
427
423
                           {arity, 2} ->
428
 
                               {ok, User} = 
429
 
                                   ssh_userreg:lookup_user(ConnectionManager),
430
424
                               {ok, PeerAddr} = 
431
 
                                   ssh_cm:get_peer_addr(ConnectionManager),
 
425
                                   ssh_connection_manager:peer_addr(ConnectionManager),
432
426
                               fun() -> Shell(User, PeerAddr) end;
433
427
                           _ ->
434
428
                               Shell
441
435
    State#state{group = Group, buf = empty_buf()}.
442
436
 
443
437
start_shell(_ConnectionManager, Cmd, #state{exec={M, F, A}} = State) ->
444
 
    Group = group:start(self(), {M, F, A++[Cmd]}, [{echo,false}]),
 
438
    Group = group:start(self(), {M, F, A++[Cmd]}, [{echo, false}]),
 
439
    State#state{group = Group, buf = empty_buf()};
 
440
start_shell(ConnectionManager, Cmd, #state{exec=Shell} = State) when is_function(Shell) ->
 
441
    {ok, User} = 
 
442
        ssh_userreg:lookup_user(ConnectionManager),
 
443
    ShellFun = 
 
444
        case erlang:fun_info(Shell, arity) of
 
445
            {arity, 1} ->
 
446
                fun() -> Shell(Cmd) end;
 
447
            {arity, 2} ->
 
448
                fun() -> Shell(Cmd, User) end;
 
449
            {arity, 3} ->
 
450
                {ok, PeerAddr} = 
 
451
                    ssh_connection_manager:peer_addr(ConnectionManager),
 
452
                fun() -> Shell(Cmd, User, PeerAddr) end;
 
453
            _ ->
 
454
                Shell
 
455
        end,
 
456
    Echo = get_echo(State#state.pty),
 
457
    Group = group:start(self(), ShellFun, [{echo,Echo}]),
445
458
    State#state{group = Group, buf = empty_buf()}.
446
459
 
447
 
 
448
460
% Pty can be undefined if the client never sets any pty options before
449
461
% starting the shell.
450
462
get_echo(undefined) ->