From 203d20aeb89e513b71624d0c12952352e6ca3525 Mon Sep 17 00:00:00 2001 From: Hans Nilsson Date: Fri, 2 Nov 2018 12:49:03 +0100 Subject: ssh: Fix SSH_MSG_EXT_INFO bug for OTP SSH as client The message could not be received in connected state --- lib/ssh/src/ssh_connection_handler.erl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/ssh/src/ssh_connection_handler.erl b/lib/ssh/src/ssh_connection_handler.erl index 36152bacf7..84719ebc97 100644 --- a/lib/ssh/src/ssh_connection_handler.erl +++ b/lib/ssh/src/ssh_connection_handler.erl @@ -952,6 +952,10 @@ handle_event(_, #ssh_msg_userauth_info_request{}, {userauth_keyboard_interactive %%% ######## {connected, client|server} #### +%% Skip ext_info messages in connected state (for example from OpenSSH >= 7.7) +handle_event(_, #ssh_msg_ext_info{}, {connected,_Role}, D) -> + {keep_state, D}; + handle_event(_, {#ssh_msg_kexinit{},_}, {connected,Role}, D0) -> {KeyInitMsg, SshPacket, Ssh} = ssh_transport:key_exchange_init_msg(D0#data.ssh_params), D = D0#data{ssh_params = Ssh, -- cgit v1.2.3 From 434090c14c0d1692c3eaeebb97c9b86c3dff01a5 Mon Sep 17 00:00:00 2001 From: Hans Nilsson Date: Wed, 7 Nov 2018 15:01:39 +0100 Subject: ssh: Fix SSH_MSG_EXT_INFO bug for OTP SSH as server The wrong set of supported public keys was sent to the client. --- lib/ssh/src/ssh_transport.erl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/ssh/src/ssh_transport.erl b/lib/ssh/src/ssh_transport.erl index edc927e807..6820f534cb 100644 --- a/lib/ssh/src/ssh_transport.erl +++ b/lib/ssh/src/ssh_transport.erl @@ -772,8 +772,7 @@ ext_info_message(#ssh{role=server, send_ext_info=true, opts = Opts} = Ssh0) -> AlgsList = lists:map(fun erlang:atom_to_list/1, - proplists:get_value(public_key, - ?GET_OPT(preferred_algorithms, Opts))), + ?GET_OPT(pref_public_key_algs, Opts)), Msg = #ssh_msg_ext_info{nr_extensions = 1, data = [{"server-sig-algs", string:join(AlgsList,",")}] }, -- cgit v1.2.3 From a53a4d0bae3e39877f3edf4c0f33a350b34a8137 Mon Sep 17 00:00:00 2001 From: Hans Nilsson Date: Wed, 7 Nov 2018 15:02:22 +0100 Subject: ssh: Fix ssh_options checking for ext_info A bug for SSH_MSG_EXT_INFO was fixed both for client and server. Before that fix, wrong option was read for the information sent to the peer. This commit adapts the option checking so that the correct option now used is available not only for servers but also for clients. --- lib/ssh/src/ssh_options.erl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/ssh/src/ssh_options.erl b/lib/ssh/src/ssh_options.erl index 1e10f72956..3417466c4d 100644 --- a/lib/ssh/src/ssh_options.erl +++ b/lib/ssh/src/ssh_options.erl @@ -445,12 +445,6 @@ default(client) -> class => user_options }, - {pref_public_key_algs, def} => - #{default => ssh_transport:default_algorithms(public_key), - chk => fun check_pref_public_key_algs/1, - class => user_options - }, - {dh_gex_limits, def} => #{default => {1024, 6144, 8192}, % FIXME: Is this true nowadays? chk => fun({Min,I,Max}) -> @@ -516,6 +510,12 @@ default(common) -> class => user_options }, + {pref_public_key_algs, def} => + #{default => ssh_transport:default_algorithms(public_key), + chk => fun check_pref_public_key_algs/1, + class => user_options + }, + {preferred_algorithms, def} => #{default => ssh:default_algorithms(), chk => fun check_preferred_algorithms/1, -- cgit v1.2.3