aboutsummaryrefslogtreecommitdiff
path: root/lang/erlang-runtime17/files/patch-otp-17.5.2
diff options
context:
space:
mode:
authorJimmy Olgeni <olgeni@FreeBSD.org>2015-06-02 12:26:03 +0000
committerJimmy Olgeni <olgeni@FreeBSD.org>2015-06-02 12:26:03 +0000
commit704b15243f53c4f34a5afbb8ff4cda592a8abd04 (patch)
treea9aed0153c3deec93b596f98935399baf574811a /lang/erlang-runtime17/files/patch-otp-17.5.2
parente0471dcdf8bdbbd18edbc5da972212c25691a520 (diff)
Notes
Diffstat (limited to 'lang/erlang-runtime17/files/patch-otp-17.5.2')
-rw-r--r--lang/erlang-runtime17/files/patch-otp-17.5.2427
1 files changed, 0 insertions, 427 deletions
diff --git a/lang/erlang-runtime17/files/patch-otp-17.5.2 b/lang/erlang-runtime17/files/patch-otp-17.5.2
deleted file mode 100644
index 3be7ef0060d0..000000000000
--- a/lang/erlang-runtime17/files/patch-otp-17.5.2
+++ /dev/null
@@ -1,427 +0,0 @@
-diff --git OTP_VERSION OTP_VERSION
-index 9cbaf23..808ab16 100644
---- OTP_VERSION
-+++ OTP_VERSION
-@@ -1 +1 @@
--17.5.1
-+17.5.2
-diff --git lib/inets/doc/src/httpd.xml lib/inets/doc/src/httpd.xml
-index 20c8a6b..e40660a 100644
---- lib/inets/doc/src/httpd.xml
-+++ lib/inets/doc/src/httpd.xml
-@@ -315,7 +315,7 @@ text/plain asc txt
- </item>
-
- <marker id="prop_server_tokens"></marker>
-- <tag>{server_tokens, prod|major|minor|minimal|os|full|{private, string()}}</tag>
-+ <tag>{server_tokens, none|prod|major|minor|minimal|os|full|{private, string()}}</tag>
- <item>
- <p>ServerTokens defines how the value of the server header
- should look. </p>
-@@ -323,6 +323,7 @@ text/plain asc txt
- here is what the server header string could look like for
- the different values of server-tokens: </p>
- <pre>
-+none "" % A Server: header will not be generated
- prod "inets"
- major "inets/5"
- minor "inets/5.8"
-diff --git lib/inets/doc/src/notes.xml lib/inets/doc/src/notes.xml
-index 2c3ee79..12bbc2b 100644
---- lib/inets/doc/src/notes.xml
-+++ lib/inets/doc/src/notes.xml
-@@ -32,7 +32,28 @@
- <file>notes.xml</file>
- </header>
-
-- <section><title>Inets 5.10.6</title>
-+ <section><title>Inets 5.10.7</title>
-+
-+ <section><title>Improvements and New Features</title>
-+ <list>
-+ <item>
-+ <p>
-+ New value in <c>server_tokens</c> config for limiting
-+ banner grabbing attempts. </p>
-+ <p>
-+ By setting <c>{server_tokens, none}</c> in
-+ <c>ServiceConfig</c> for <c>inets:start(httpd,
-+ ServiceConfig)</c>, the "Server:" header will not be set
-+ in messages from the server.</p>
-+ <p>
-+ Own Id: OTP-12661 Aux Id: seq12840 </p>
-+ </item>
-+ </list>
-+ </section>
-+
-+</section>
-+
-+<section><title>Inets 5.10.6</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
-diff --git lib/inets/src/http_server/httpd_conf.erl lib/inets/src/http_server/httpd_conf.erl
-index 78dda79..dbdc1be 100644
---- lib/inets/src/http_server/httpd_conf.erl
-+++ lib/inets/src/http_server/httpd_conf.erl
-@@ -219,14 +219,14 @@ load("ServerName " ++ ServerName, []) ->
-
- load("ServerTokens " ++ ServerTokens, []) ->
- %% These are the valid *plain* server tokens:
-- %% sprod, major, minor, minimum, os, full
-+ %% none, prod, major, minor, minimum, os, full
- %% It can also be a "private" server token: private:<any string>
- case string:tokens(ServerTokens, [$:]) of
- ["private", Private] ->
- {ok,[], {server_tokens, clean(Private)}};
- [TokStr] ->
- Tok = list_to_atom(clean(TokStr)),
-- case lists:member(Tok, [prod, major, minor, minimum, os, full]) of
-+ case lists:member(Tok, [none, prod, major, minor, minimum, os, full]) of
- true ->
- {ok,[], {server_tokens, Tok}};
- false ->
-@@ -850,6 +850,8 @@ server(full = _ServerTokens) ->
- OS = os_info(full),
- lists:flatten(
- io_lib:format("~s ~s OTP/~s", [?SERVER_SOFTWARE, OS, OTPRelease]));
-+server(none = _ServerTokens) ->
-+ "";
- server({private, Server} = _ServerTokens) when is_list(Server) ->
- %% The user provide its own
- Server;
-@@ -1299,7 +1301,7 @@ ssl_ca_certificate_file(ConfigDB) ->
- end.
-
- plain_server_tokens() ->
-- [prod, major, minor, minimum, os, full].
-+ [none, prod, major, minor, minimum, os, full].
-
- error_report(Where,M,F,Error) ->
- error_logger:error_report([{?MODULE, Where},
-diff --git lib/inets/src/http_server/httpd_response.erl lib/inets/src/http_server/httpd_response.erl
-index 0895729..2fa91d4 100644
---- lib/inets/src/http_server/httpd_response.erl
-+++ lib/inets/src/http_server/httpd_response.erl
-@@ -287,8 +287,11 @@ create_header(ConfigDb, KeyValueTupleHeaders) ->
- ContentType = "text/html",
- Server = server(ConfigDb),
- NewHeaders = add_default_headers([{"date", Date},
-- {"content-type", ContentType},
-- {"server", Server}],
-+ {"content-type", ContentType}
-+ | if Server=="" -> [];
-+ true -> [{"server", Server}]
-+ end
-+ ],
- KeyValueTupleHeaders),
- lists:map(fun fix_header/1, NewHeaders).
-
-diff --git lib/inets/vsn.mk lib/inets/vsn.mk
-index e5b63a6..e9ecb26 100644
---- lib/inets/vsn.mk
-+++ lib/inets/vsn.mk
-@@ -18,6 +18,6 @@
- # %CopyrightEnd%
-
- APPLICATION = inets
--INETS_VSN = 5.10.6
-+INETS_VSN = 5.10.7
- PRE_VSN =
- APP_VSN = "$(APPLICATION)-$(INETS_VSN)$(PRE_VSN)"
-diff --git lib/ssh/doc/src/notes.xml lib/ssh/doc/src/notes.xml
-index acbf312..41885c6 100644
---- lib/ssh/doc/src/notes.xml
-+++ lib/ssh/doc/src/notes.xml
-@@ -29,6 +29,27 @@
- <file>notes.xml</file>
- </header>
-
-+<section><title>Ssh 3.2.2</title>
-+
-+ <section><title>Improvements and New Features</title>
-+ <list>
-+ <item>
-+ <p>
-+ New option <c>id_string</c> for <c>ssh:daemon</c> and
-+ <c>ssh:connect</c> for limiting banner grabbing attempts.</p>
-+ <p>
-+ The possible values are: <c>{id_string,string()}</c> and
-+ <c>{id_string,random}</c>. The latter will make ssh
-+ generate a random nonsence id-string for each new
-+ connection.</p>
-+ <p>
-+ Own Id: OTP-12659</p>
-+ </item>
-+ </list>
-+ </section>
-+
-+</section>
-+
- <section><title>Ssh 3.2.1</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
-diff --git lib/ssh/doc/src/ssh.xml lib/ssh/doc/src/ssh.xml
-index 0e7e384..72dafc0 100644
---- lib/ssh/doc/src/ssh.xml
-+++ lib/ssh/doc/src/ssh.xml
-@@ -180,6 +180,15 @@
- <item>
- <p>If true, the client will not print out anything on authorization.</p>
- </item>
-+
-+ <tag><c><![CDATA[{id_string, random | string()}]]></c></tag>
-+ <item>
-+ <p>The string that the client presents to a connected server initially. The default value is "Erlang/VSN" where VSN is the ssh application version number.
-+ </p>
-+ <p>The value <c>random</c> will cause a random string to be created at each connection attempt. This is to make it a bit more difficult for a malicious peer to find the ssh software brand and version.
-+ </p>
-+ </item>
-+
- <tag><c><![CDATA[{fd, file_descriptor()}]]></c></tag>
- <item>
- <p>Allow an existing file descriptor to be used
-@@ -344,6 +353,14 @@
- </p>
- </item>
-
-+ <tag><c><![CDATA[{id_string, random | string()}]]></c></tag>
-+ <item>
-+ <p>The string the daemon will present to a connecting peer initially. The default value is "Erlang/VSN" where VSN is the ssh application version number.
-+ </p>
-+ <p>The value <c>random</c> will cause a random string to be created at each connection attempt. This is to make it a bit more difficult for a malicious peer to find the ssh software brand and version.
-+ </p>
-+ </item>
-+
- <tag><c><![CDATA[{key_cb, atom()}]]></c></tag>
- <item>
- <p>Module implementing the behaviour <seealso marker="ssh_server_key_api">ssh_server_key_api</seealso>.
-diff --git lib/ssh/src/ssh.erl lib/ssh/src/ssh.erl
-index 51ad691..d4b02a0 100644
---- lib/ssh/src/ssh.erl
-+++ lib/ssh/src/ssh.erl
-@@ -347,6 +347,8 @@ handle_option([parallel_login|Rest], SocketOptions, SshOptions) ->
- handle_option(Rest, SocketOptions, [handle_ssh_option({parallel_login,true}) | SshOptions]);
- handle_option([{minimal_remote_max_packet_size, _} = Opt|Rest], SocketOptions, SshOptions) ->
- handle_option(Rest, SocketOptions, [handle_ssh_option(Opt) | SshOptions]);
-+handle_option([{id_string, _ID} = Opt|Rest], SocketOptions, SshOptions) ->
-+ handle_option(Rest, SocketOptions, [handle_ssh_option(Opt) | SshOptions]);
- handle_option([Opt | Rest], SocketOptions, SshOptions) ->
- handle_option(Rest, [handle_inet_option(Opt) | SocketOptions], SshOptions).
-
-@@ -439,6 +441,10 @@ handle_ssh_option({idle_time, Value} = Opt) when is_integer(Value), Value > 0 ->
- Opt;
- handle_ssh_option({rekey_limit, Value} = Opt) when is_integer(Value) ->
- Opt;
-+handle_ssh_option({id_string, random}) ->
-+ {id_string, {random,2,5}}; %% 2 - 5 random characters
-+handle_ssh_option({id_string, ID} = Opt) when is_list(ID) ->
-+ Opt;
- handle_ssh_option(Opt) ->
- throw({error, {eoptions, Opt}}).
-
-diff --git lib/ssh/src/ssh_transport.erl lib/ssh/src/ssh_transport.erl
-index 76fa776..8669be5 100644
---- lib/ssh/src/ssh_transport.erl
-+++ lib/ssh/src/ssh_transport.erl
-@@ -44,12 +44,34 @@
-
- versions(client, Options)->
- Vsn = proplists:get_value(vsn, Options, ?DEFAULT_CLIENT_VERSION),
-- Version = format_version(Vsn),
-- {Vsn, Version};
-+ {Vsn, format_version(Vsn, software_version(Options))};
- versions(server, Options) ->
- Vsn = proplists:get_value(vsn, Options, ?DEFAULT_SERVER_VERSION),
-- Version = format_version(Vsn),
-- {Vsn, Version}.
-+ {Vsn, format_version(Vsn, software_version(Options))}.
-+
-+software_version(Options) ->
-+ case proplists:get_value(id_string, Options) of
-+ undefined ->
-+ "Erlang"++ssh_vsn();
-+ {random,Nlo,Nup} ->
-+ random_id(Nlo,Nup);
-+ ID ->
-+ ID
-+ end.
-+
-+ssh_vsn() ->
-+ try {ok,L} = application:get_all_key(ssh),
-+ proplists:get_value(vsn,L,"")
-+ of
-+ "" -> "";
-+ VSN when is_list(VSN) -> "/" ++ VSN;
-+ _ -> ""
-+ catch
-+ _:_ -> ""
-+ end.
-+
-+random_id(Nlo, Nup) ->
-+ [crypto:rand_uniform($a,$z+1) || _<- lists:duplicate(crypto:rand_uniform(Nlo,Nup+1),x) ].
-
- hello_version_msg(Data) ->
- [Data,"\r\n"].
-@@ -77,9 +99,9 @@ is_valid_mac(Mac, Data, #ssh{recv_mac = Algorithm,
- yes_no(Ssh, Prompt) ->
- (Ssh#ssh.io_cb):yes_no(Prompt, Ssh).
-
--format_version({Major,Minor}) ->
-+format_version({Major,Minor}, SoftwareVersion) ->
- "SSH-" ++ integer_to_list(Major) ++ "." ++
-- integer_to_list(Minor) ++ "-Erlang".
-+ integer_to_list(Minor) ++ "-" ++ SoftwareVersion.
-
- handle_hello_version(Version) ->
- try
-diff --git lib/ssh/test/ssh_basic_SUITE.erl lib/ssh/test/ssh_basic_SUITE.erl
-index 81c7b5c..f5f8991 100644
---- lib/ssh/test/ssh_basic_SUITE.erl
-+++ lib/ssh/test/ssh_basic_SUITE.erl
-@@ -52,6 +52,12 @@ all() ->
- ssh_connect_arg4_timeout,
- packet_size_zero,
- ssh_daemon_minimal_remote_max_packet_size_option,
-+ id_string_no_opt_client,
-+ id_string_own_string_client,
-+ id_string_random_client,
-+ id_string_no_opt_server,
-+ id_string_own_string_server,
-+ id_string_random_server,
- {group, hardening_tests}
- ].
-
-@@ -817,6 +823,66 @@ ssh_daemon_minimal_remote_max_packet_size_option(Config) ->
- ssh:stop_daemon(Server).
-
- %%--------------------------------------------------------------------
-+id_string_no_opt_client(Config) ->
-+ {Server, Host, Port} = fake_daemon(Config),
-+ {error,_} = ssh:connect(Host, Port, []),
-+ receive
-+ {id,Server,"SSH-2.0-Erlang/"++Vsn} ->
-+ true = expected_ssh_vsn(Vsn);
-+ {id,Server,Other} ->
-+ ct:fail("Unexpected id: ~s.",[Other])
-+ end.
-+
-+%%--------------------------------------------------------------------
-+id_string_own_string_client(Config) ->
-+ {Server, Host, Port} = fake_daemon(Config),
-+ {error,_} = ssh:connect(Host, Port, [{id_string,"Pelle"}]),
-+ receive
-+ {id,Server,"SSH-2.0-Pelle\r\n"} ->
-+ ok;
-+ {id,Server,Other} ->
-+ ct:fail("Unexpected id: ~s.",[Other])
-+ end.
-+
-+%%--------------------------------------------------------------------
-+id_string_random_client(Config) ->
-+ {Server, Host, Port} = fake_daemon(Config),
-+ {error,_} = ssh:connect(Host, Port, [{id_string,random}]),
-+ receive
-+ {id,Server,Id="SSH-2.0-Erlang"++_} ->
-+ ct:fail("Unexpected id: ~s.",[Id]);
-+ {id,Server,Rnd="SSH-2.0-"++_} ->
-+ ct:log("Got ~s.",[Rnd]);
-+ {id,Server,Id} ->
-+ ct:fail("Unexpected id: ~s.",[Id])
-+ end.
-+
-+%%--------------------------------------------------------------------
-+id_string_no_opt_server(Config) ->
-+ {_Server, Host, Port} = std_daemon(Config, []),
-+ {ok,S1}=gen_tcp:connect(Host,Port,[{active,false}]),
-+ {ok,"SSH-2.0-Erlang/"++Vsn} = gen_tcp:recv(S1, 0, 2000),
-+ true = expected_ssh_vsn(Vsn).
-+
-+%%--------------------------------------------------------------------
-+id_string_own_string_server(Config) ->
-+ {_Server, Host, Port} = std_daemon(Config, [{id_string,"Olle"}]),
-+ {ok,S1}=gen_tcp:connect(Host,Port,[{active,false}]),
-+ {ok,"SSH-2.0-Olle\r\n"} = gen_tcp:recv(S1, 0, 2000).
-+
-+%%--------------------------------------------------------------------
-+id_string_random_server(Config) ->
-+ {_Server, Host, Port} = std_daemon(Config, [{id_string,random}]),
-+ {ok,S1}=gen_tcp:connect(Host,Port,[{active,false}]),
-+ {ok,"SSH-2.0-"++Rnd} = gen_tcp:recv(S1, 0, 2000),
-+ case Rnd of
-+ "Erlang"++_ -> ct:log("Id=~p",[Rnd]),
-+ {fail,got_default_id};
-+ "Olle\r\n" -> {fail,got_previous_tests_value};
-+ _ -> ct:log("Got ~s.",[Rnd])
-+ end.
-+
-+%%--------------------------------------------------------------------
- ssh_connect_negtimeout_parallel(Config) -> ssh_connect_negtimeout(Config,true).
- ssh_connect_negtimeout_sequential(Config) -> ssh_connect_negtimeout(Config,false).
-
-@@ -1095,3 +1161,46 @@ do_shell(IO, Shell) ->
- %% {'EXIT', Shell, killed} ->
- %% ok
- %% end.
-+
-+
-+std_daemon(Config, ExtraOpts) ->
-+ SystemDir = ?config(data_dir, Config),
-+ PrivDir = ?config(priv_dir, Config),
-+ UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
-+ file:make_dir(UserDir),
-+ {_Server, _Host, _Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
-+ {user_dir, UserDir},
-+ {failfun, fun ssh_test_lib:failfun/2} | ExtraOpts]).
-+
-+expected_ssh_vsn(Str) ->
-+ try
-+ {ok,L} = application:get_all_key(ssh),
-+ proplists:get_value(vsn,L,"")++"\r\n"
-+ of
-+ Str -> true;
-+ "\r\n" -> true;
-+ _ -> false
-+ catch
-+ _:_ -> true %% ssh not started so we dont't know
-+ end.
-+
-+
-+fake_daemon(_Config) ->
-+ Parent = self(),
-+ %% start the server
-+ Server = spawn(fun() ->
-+ {ok,Sl} = gen_tcp:listen(0,[]),
-+ {ok,{Host,Port}} = inet:sockname(Sl),
-+ Parent ! {sockname,self(),Host,Port},
-+ Rsa = gen_tcp:accept(Sl),
-+ ct:log("Server gen_tcp:accept got ~p",[Rsa]),
-+ {ok,S} = Rsa,
-+ receive
-+ {tcp, S, Id} -> Parent ! {id,self(),Id}
-+ end
-+ end),
-+ %% Get listening host and port
-+ receive
-+ {sockname,Server,ServerHost,ServerPort} -> {Server, ServerHost, ServerPort}
-+ end.
-+
-diff --git lib/ssh/vsn.mk lib/ssh/vsn.mk
-index fec8dac..b2b85a7 100644
---- lib/ssh/vsn.mk
-+++ lib/ssh/vsn.mk
-@@ -1,4 +1,4 @@
- #-*-makefile-*- ; force emacs to enter makefile-mode
-
--SSH_VSN = 3.2.1
-+SSH_VSN = 3.2.2
- APP_VSN = "ssh-$(SSH_VSN)"
-diff --git otp_versions.table otp_versions.table
-index a82f535..4bf6cb9 100644
---- otp_versions.table
-+++ otp_versions.table
-@@ -1,3 +1,4 @@
-+OTP-17.5.2 : inets-5.10.7 ssh-3.2.2 # asn1-3.0.4 common_test-1.10 compiler-5.0.4 cosEvent-2.1.15 cosEventDomain-1.1.14 cosFileTransfer-1.1.16 cosNotification-1.1.21 cosProperty-1.1.17 cosTime-1.1.14 cosTransactions-1.2.14 crypto-3.5 debugger-4.0.3 dialyzer-2.7.4 diameter-1.9 edoc-0.7.16 eldap-1.1.1 erl_docgen-0.3.7 erl_interface-3.7.20 erts-6.4 et-1.5 eunit-2.2.9 gs-1.5.16 hipe-3.11.3 ic-4.3.6 jinterface-1.5.12 kernel-3.2 megaco-3.17.3 mnesia-4.12.5 observer-2.0.4 odbc-2.10.22 orber-3.7.1 os_mon-2.3.1 ose-1.0.2 otp_mibs-1.0.10 parsetools-2.0.12 percept-0.8.10 public_key-0.23 reltool-0.6.6 runtime_tools-1.8.16 sasl-2.4.1 snmp-5.1.1 ssl-6.0 stdlib-2.4 syntax_tools-1.6.18 test_server-3.8 tools-2.7.2 typer-0.9.8 webtool-0.8.10 wx-1.3.3 xmerl-1.3.7 :
- OTP-17.5.1 : ssh-3.2.1 # asn1-3.0.4 common_test-1.10 compiler-5.0.4 cosEvent-2.1.15 cosEventDomain-1.1.14 cosFileTransfer-1.1.16 cosNotification-1.1.21 cosProperty-1.1.17 cosTime-1.1.14 cosTransactions-1.2.14 crypto-3.5 debugger-4.0.3 dialyzer-2.7.4 diameter-1.9 edoc-0.7.16 eldap-1.1.1 erl_docgen-0.3.7 erl_interface-3.7.20 erts-6.4 et-1.5 eunit-2.2.9 gs-1.5.16 hipe-3.11.3 ic-4.3.6 inets-5.10.6 jinterface-1.5.12 kernel-3.2 megaco-3.17.3 mnesia-4.12.5 observer-2.0.4 odbc-2.10.22 orber-3.7.1 os_mon-2.3.1 ose-1.0.2 otp_mibs-1.0.10 parsetools-2.0.12 percept-0.8.10 public_key-0.23 reltool-0.6.6 runtime_tools-1.8.16 sasl-2.4.1 snmp-5.1.1 ssl-6.0 stdlib-2.4 syntax_tools-1.6.18 test_server-3.8 tools-2.7.2 typer-0.9.8 webtool-0.8.10 wx-1.3.3 xmerl-1.3.7 :
- OTP-17.5 : asn1-3.0.4 common_test-1.10 compiler-5.0.4 crypto-3.5 debugger-4.0.3 dialyzer-2.7.4 diameter-1.9 eldap-1.1.1 erts-6.4 hipe-3.11.3 inets-5.10.6 kernel-3.2 mnesia-4.12.5 observer-2.0.4 os_mon-2.3.1 public_key-0.23 runtime_tools-1.8.16 ssh-3.2 ssl-6.0 stdlib-2.4 syntax_tools-1.6.18 test_server-3.8 tools-2.7.2 wx-1.3.3 # cosEvent-2.1.15 cosEventDomain-1.1.14 cosFileTransfer-1.1.16 cosNotification-1.1.21 cosProperty-1.1.17 cosTime-1.1.14 cosTransactions-1.2.14 edoc-0.7.16 erl_docgen-0.3.7 erl_interface-3.7.20 et-1.5 eunit-2.2.9 gs-1.5.16 ic-4.3.6 jinterface-1.5.12 megaco-3.17.3 odbc-2.10.22 orber-3.7.1 ose-1.0.2 otp_mibs-1.0.10 parsetools-2.0.12 percept-0.8.10 reltool-0.6.6 sasl-2.4.1 snmp-5.1.1 typer-0.9.8 webtool-0.8.10 xmerl-1.3.7 :
- OTP-17.4.1 : erts-6.3.1 inets-5.10.5 # asn1-3.0.3 common_test-1.9 compiler-5.0.3 cosEvent-2.1.15 cosEventDomain-1.1.14 cosFileTransfer-1.1.16 cosNotification-1.1.21 cosProperty-1.1.17 cosTime-1.1.14 cosTransactions-1.2.14 crypto-3.4.2 debugger-4.0.2 dialyzer-2.7.3 diameter-1.8 edoc-0.7.16 eldap-1.1 erl_docgen-0.3.7 erl_interface-3.7.20 et-1.5 eunit-2.2.9 gs-1.5.16 hipe-3.11.2 ic-4.3.6 jinterface-1.5.12 kernel-3.1 megaco-3.17.3 mnesia-4.12.4 observer-2.0.3 odbc-2.10.22 orber-3.7.1 os_mon-2.3 ose-1.0.2 otp_mibs-1.0.10 parsetools-2.0.12 percept-0.8.10 public_key-0.22.1 reltool-0.6.6 runtime_tools-1.8.15 sasl-2.4.1 snmp-5.1.1 ssh-3.1 ssl-5.3.8 stdlib-2.3 syntax_tools-1.6.17 test_server-3.7.2 tools-2.7.1 typer-0.9.8 webtool-0.8.10 wx-1.3.2 xmerl-1.3.7 :