aboutsummaryrefslogtreecommitdiff
path: root/lang
diff options
context:
space:
mode:
authorJimmy Olgeni <olgeni@FreeBSD.org>2015-04-23 12:45:03 +0000
committerJimmy Olgeni <olgeni@FreeBSD.org>2015-04-23 12:45:03 +0000
commitc90c3cb864904c365a9a6eb86c68b3f000923a6d (patch)
tree13da887edd6c73ee303bbf1b2e086397bd026832 /lang
parent4c22a95bd88f07a64a6d75241c57097c6c50489f (diff)
downloadports-c90c3cb864904c365a9a6eb86c68b3f000923a6d.tar.gz
ports-c90c3cb864904c365a9a6eb86c68b3f000923a6d.zip
Notes
Diffstat (limited to 'lang')
-rw-r--r--lang/erlang-runtime17/Makefile4
-rw-r--r--lang/erlang-runtime17/files/patch-otp-17.5.2427
2 files changed, 428 insertions, 3 deletions
diff --git a/lang/erlang-runtime17/Makefile b/lang/erlang-runtime17/Makefile
index 96aaa74ac18a..8a24fb02a692 100644
--- a/lang/erlang-runtime17/Makefile
+++ b/lang/erlang-runtime17/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= erlang
-PORTVERSION= 17.5.1
+PORTVERSION= 17.5.2
CATEGORIES= lang parallel java
MASTER_SITES= http://www.erlang.org/download/:erlangorg \
http://erlang.stacken.kth.se/download/:erlangorg \
@@ -14,8 +14,6 @@ DISTFILES= ${DISTNAME}${EXTRACT_SUFX}:erlangorg \
DIST_SUBDIR= erlang
EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
-PATCH_SITES= http://www.erlang.org/download
-
MAINTAINER= olgeni@FreeBSD.org
COMMENT= Functional programming language from Ericsson
diff --git a/lang/erlang-runtime17/files/patch-otp-17.5.2 b/lang/erlang-runtime17/files/patch-otp-17.5.2
new file mode 100644
index 000000000000..3be7ef0060d0
--- /dev/null
+++ b/lang/erlang-runtime17/files/patch-otp-17.5.2
@@ -0,0 +1,427 @@
+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 :