4
%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
4
%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
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/.
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.
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}}.
419
415
Shell = State#state.shell,
420
416
ShellFun = case is_function(Shell) of
419
ssh_userreg:lookup_user(ConnectionManager),
422
420
case erlang:fun_info(Shell, arity) of
425
ssh_userreg:lookup_user(ConnectionManager),
426
422
fun() -> Shell(User) end;
429
ssh_userreg:lookup_user(ConnectionManager),
431
ssh_cm:get_peer_addr(ConnectionManager),
425
ssh_connection_manager:peer_addr(ConnectionManager),
432
426
fun() -> Shell(User, PeerAddr) end;
441
435
State#state{group = Group, buf = empty_buf()}.
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) ->
442
ssh_userreg:lookup_user(ConnectionManager),
444
case erlang:fun_info(Shell, arity) of
446
fun() -> Shell(Cmd) end;
448
fun() -> Shell(Cmd, User) end;
451
ssh_connection_manager:peer_addr(ConnectionManager),
452
fun() -> Shell(Cmd, User, PeerAddr) 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()}.
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) ->