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>