Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Apr 2015 12:45:04 +0000 (UTC)
From:      Jimmy Olgeni <olgeni@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r384560 - in head/lang/erlang-runtime17: . files
Message-ID:  <201504231245.t3NCj4vR044351@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: olgeni
Date: Thu Apr 23 12:45:03 2015
New Revision: 384560
URL: https://svnweb.freebsd.org/changeset/ports/384560

Log:
  Upgrade to version 17.5.2.

Added:
  head/lang/erlang-runtime17/files/patch-otp-17.5.2   (contents, props changed)
Modified:
  head/lang/erlang-runtime17/Makefile

Modified: head/lang/erlang-runtime17/Makefile
==============================================================================
--- head/lang/erlang-runtime17/Makefile	Thu Apr 23 12:21:45 2015	(r384559)
+++ head/lang/erlang-runtime17/Makefile	Thu Apr 23 12:45:03 2015	(r384560)
@@ -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}:er
 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
 

Added: head/lang/erlang-runtime17/files/patch-otp-17.5.2
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/erlang-runtime17/files/patch-otp-17.5.2	Thu Apr 23 12:45:03 2015	(r384560)
@@ -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 :



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201504231245.t3NCj4vR044351>