[Pkg-ocaml-maint-commits] r5520 - in /trunk/projects/approx/trunk: _tags control_file.ml debian/NEWS debian/changelog ifaddr.c interface.mli myocamlbuild.ml netstubs.c network.mli server.ml tcp_wrappers.ml tests/_tags tests/ifaddr_test.ml
ecc-guest at users.alioth.debian.org
ecc-guest at users.alioth.debian.org
Thu Apr 17 02:31:31 UTC 2008
Author: ecc-guest
Date: Thu Apr 17 02:31:30 2008
New Revision: 5520
URL: http://svn.debian.org/wsvn/?sc=1&rev=5520
Log:
listen on both IPv4 and IPv6 sockets when available
add C stub for setsockopt IPV6_V6ONLY
build all bytecode executables with -custom
Added:
trunk/projects/approx/trunk/netstubs.c
- copied, changed from r5317, trunk/projects/approx/trunk/ifaddr.c
trunk/projects/approx/trunk/network.mli
- copied, changed from r5317, trunk/projects/approx/trunk/interface.mli
Removed:
trunk/projects/approx/trunk/ifaddr.c
trunk/projects/approx/trunk/interface.mli
Modified:
trunk/projects/approx/trunk/_tags
trunk/projects/approx/trunk/control_file.ml
trunk/projects/approx/trunk/debian/NEWS
trunk/projects/approx/trunk/debian/changelog
trunk/projects/approx/trunk/myocamlbuild.ml
trunk/projects/approx/trunk/server.ml
trunk/projects/approx/trunk/tcp_wrappers.ml
trunk/projects/approx/trunk/tests/_tags
trunk/projects/approx/trunk/tests/ifaddr_test.ml
Modified: trunk/projects/approx/trunk/_tags
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/_tags?rev=5520&op=diff
==============================================================================
--- trunk/projects/approx/trunk/_tags (original)
+++ trunk/projects/approx/trunk/_tags Thu Apr 17 02:31:30 2008
@@ -15,4 +15,4 @@
<**/*.{byte,native}>: use_unix, use_pcre, use_sha
<*.{byte,native}>: use_syslog, use_netsys, use_netstring
<approx.{byte,native}>: use_netcgi, use_nethttpd-for-netcgi2
-<approx.{byte,native}>: ifaddr, libwrap
+<approx.{byte,native}>: netstubs, libwrap
Modified: trunk/projects/approx/trunk/control_file.ml
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/control_file.ml?rev=5520&op=diff
==============================================================================
--- trunk/projects/approx/trunk/control_file.ml (original)
+++ trunk/projects/approx/trunk/control_file.ml Thu Apr 17 02:31:30 2008
@@ -5,7 +5,6 @@
open Printf
open Util
open Log
-open Config
type paragraph = (string * string) list
Modified: trunk/projects/approx/trunk/debian/NEWS
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/debian/NEWS?rev=5520&op=diff
==============================================================================
--- trunk/projects/approx/trunk/debian/NEWS (original)
+++ trunk/projects/approx/trunk/debian/NEWS Thu Apr 17 02:31:30 2008
@@ -1,3 +1,9 @@
+approx (3.2.0) unstable; urgency=low
+
+ If both IPv4 and IPv6 sockets are supported, approx will listen on both.
+
+ -- Eric Cooper <ecc at cmu.edu> Wed, 16 Apr 2008 21:49:01 -0400
+
approx (3.1.0~rc1) experimental; urgency=low
TCP wrappers support has been added. Access control rules can be specified
Modified: trunk/projects/approx/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/debian/changelog?rev=5520&op=diff
==============================================================================
--- trunk/projects/approx/trunk/debian/changelog (original)
+++ trunk/projects/approx/trunk/debian/changelog Thu Apr 17 02:31:30 2008
@@ -1,3 +1,14 @@
+approx (3.2.0) unstable; urgency=low
+
+ * Listen on both IPv4 and IPv6 sockets when available
+ * Add setsockopt IPV6_V6ONLY to allow both kinds of sockets to bind
+ to the same port, as suggested by Julien Cristau <jcristau at debian.org>
+ * Enable -custom for all bytecode executables, not just ones that
+ directly use C stubs, to avoid missing DLLs from libpcre-ocaml, etc.
+ at runtime (closes: #476367)
+
+ -- Eric Cooper <ecc at cmu.edu> Wed, 16 Apr 2008 21:49:01 -0400
+
approx (3.1.0) unstable; urgency=low
* Prevent dh_strip from stripping custom bytecode executables
Modified: trunk/projects/approx/trunk/myocamlbuild.ml
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/myocamlbuild.ml?rev=5520&op=diff
==============================================================================
--- trunk/projects/approx/trunk/myocamlbuild.ml (original)
+++ trunk/projects/approx/trunk/myocamlbuild.ml Thu Apr 17 02:31:30 2008
@@ -8,29 +8,28 @@
let libraries =
["pcre"; "sha"; "syslog";
- "netsys"; "netstring"; "+netcgi2:netcgi"; "nethttpd-for-netcgi2"]
+ "netsys"; "netstring"; "netcgi2:netcgi"; "nethttpd-for-netcgi2"]
let split str =
let i = String.index str ':' in
String.sub str 0 i, String.sub str (i+1) (String.length str - (i+1))
let add_library lib =
- let dir, lib =
- if lib.[0] = '+' then split lib
- else "+" ^ lib, lib
+ let inc, lib =
+ if String.contains lib ':' then split lib
+ else lib, lib
in
- ocaml_lib ~extern: true ~dir lib
+ ocaml_lib ~extern: true ~dir: ("+" ^ inc) lib
let custom_rules () =
rule "Use mkversion to generate version.ml"
~dep: "debian/changelog" ~prod: "version.ml"
(fun _ _ -> Cmd (S [P (concat pwd "mkversion"); Sh "> version.ml"]));
dep ["compile"; "ocaml"; "file:log.ml"] ["version.ml"];
- dep ["link"; "ocaml"; "ifaddr"] ["ifaddr.o"];
- flag ["link"; "ocaml"; "byte"; "ifaddr"] & A "-custom";
+ dep ["link"; "ocaml"; "netstubs"] ["netstubs.o"];
dep ["link"; "ocaml"; "libwrap"] ["libwrap.o"];
flag ["link"; "ocaml"; "libwrap"] & S [A "-cclib"; A "-lwrap"];
- flag ["link"; "ocaml"; "byte"; "libwrap"] & A "-custom";
+ flag ["link"; "ocaml"; "byte"] & A "-custom";
flag ["c"; "compile"] & S [A "-ccopt"; A "-Wall"];
List.iter add_library libraries
Copied: trunk/projects/approx/trunk/netstubs.c (from r5317, trunk/projects/approx/trunk/ifaddr.c)
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/netstubs.c?rev=5520&op=diff
==============================================================================
--- trunk/projects/approx/trunk/ifaddr.c (original)
+++ trunk/projects/approx/trunk/netstubs.c Thu Apr 17 02:31:30 2008
@@ -46,3 +46,15 @@
else
caml_raise_not_found();
}
+
+value
+set_ipv6_only(value descr, value on_off)
+{
+ CAMLparam2(descr, on_off);
+ int fd = Int_val(descr);
+ int v = Bool_val(on_off);
+ if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &v, sizeof(int)) == 0)
+ CAMLreturn(Val_unit);
+ else
+ caml_failwith("set_ipv6_only");
+}
Copied: trunk/projects/approx/trunk/network.mli (from r5317, trunk/projects/approx/trunk/interface.mli)
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/network.mli?rev=5520&op=diff
==============================================================================
--- trunk/projects/approx/trunk/interface.mli (original)
+++ trunk/projects/approx/trunk/network.mli Thu Apr 17 02:31:30 2008
@@ -2,4 +2,6 @@
Copyright (C) 2008 Eric C. Cooper <ecc at cmu.edu>
Released under the GNU General Public License *)
-external address : string -> Unix.inet_addr = "interface_address"
+external interface_address : string -> Unix.inet_addr = "interface_address"
+
+external set_ipv6_only : Unix.file_descr -> bool -> unit = "set_ipv6_only"
Modified: trunk/projects/approx/trunk/server.ml
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/server.ml?rev=5520&op=diff
==============================================================================
--- trunk/projects/approx/trunk/server.ml (original)
+++ trunk/projects/approx/trunk/server.ml Thu Apr 17 02:31:30 2008
@@ -38,24 +38,21 @@
method config_reactor_synch = `Write
end
-type t = file_descr
+type t = file_descr list
let address interface = function
| PF_INET ->
if interface = "any" || interface = "all" then inet_addr_any
- else begin
- try
- Interface.address interface
- with Not_found ->
- error_message "IP address for interface %s not found" interface;
- raise Not_found
+ else begin try
+ Network.interface_address interface
+ with Not_found ->
+ error_message "IP address for interface %s not found" interface;
+ raise Not_found
end
| PF_INET6 ->
if interface = "any" || interface = "all" then inet6_addr_any
else begin
- error_message
- "The $interface parameter (%s) is not supported for IPv6.\n\
- Attempting to listen on IPv4 socket instead.\n" interface;
+ error_message "Cannot use $interface parameter (%s) for IPv6" interface;
raise Not_found
end
| _ -> failwith "invalid protocol family"
@@ -63,32 +60,27 @@
let remote_address ~with_port = function
| ADDR_INET (host, port) ->
let addr = string_of_inet_addr host in
- if with_port then sprintf "%s:%d" addr port else addr
+ if with_port then sprintf "%s port %d" addr port else addr
| ADDR_UNIX path ->
failwith ("Unix domain socket " ^ path)
-let rec find_some f = function
- | x :: rest -> (match f x with Some y -> y | None -> find_some f rest)
- | [] -> raise Not_found
-
let init ~user ~group ~interface ~port =
- let make_socket pf =
+ let add_socket list pf =
try
let sock = socket pf SOCK_STREAM 0 in
+ if pf = PF_INET6 then Network.set_ipv6_only sock true;
setsockopt sock SO_REUSEADDR true;
bind sock (ADDR_INET (address interface pf, port));
listen sock 10;
- Some sock
- with Unix.Unix_error (EAFNOSUPPORT, "socket", _) | Not_found -> None
+ sock :: list
+ with Unix.Unix_error _ | Not_found -> list
in
- try
- let sock = find_some make_socket [PF_INET6; PF_INET] in
- drop_privileges ~user ~group;
- sock
- with Not_found -> failwith "cannot listen on socket"
+ let sockets = List.fold_left add_socket [] [PF_INET6; PF_INET] in
+ drop_privileges ~user ~group;
+ sockets
-let loop sock service =
- while true do
+let loop sockets service =
+ let process sock =
let fd, _ = accept sock in
let address = remote_address (getpeername fd) ~with_port: false in
if Tcp_wrappers.hosts_ctl Version.name ~address then
@@ -106,4 +98,10 @@
close fd;
debug_message "Connection from %s denied by TCP wrappers" address
end
+ in
+ if sockets = [] then failwith "no sockets created";
+ while true do
+ match select sockets [] [] (-1.) with
+ | [], _, _ -> failwith "no sockets selected"
+ | ready, _, _ -> List.iter process ready
done
Modified: trunk/projects/approx/trunk/tcp_wrappers.ml
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/tcp_wrappers.ml?rev=5520&op=diff
==============================================================================
--- trunk/projects/approx/trunk/tcp_wrappers.ml (original)
+++ trunk/projects/approx/trunk/tcp_wrappers.ml Thu Apr 17 02:31:30 2008
@@ -5,5 +5,5 @@
external wrap_hosts_ctl : string -> string -> string -> string -> bool
= "wrap_hosts_ctl"
-let hosts_ctl ?(address="") ?(host="") ?(user="") daemon =
+let hosts_ctl ?(address="unknown") ?(host="unknown") ?(user="unknown") daemon =
wrap_hosts_ctl daemon host address user
Modified: trunk/projects/approx/trunk/tests/_tags
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/tests/_tags?rev=5520&op=diff
==============================================================================
--- trunk/projects/approx/trunk/tests/_tags (original)
+++ trunk/projects/approx/trunk/tests/_tags Thu Apr 17 02:31:30 2008
@@ -5,5 +5,5 @@
<sha1_test.ml>: use_sha
<control_file_test.{byte,native}>: use_syslog
-<ifaddr_test.{byte,native}>: -use_pcre, -use_sha, ifaddr
+<ifaddr_test.{byte,native}>: -use_pcre, -use_sha, netstubs
<metadata_test.{byte,native}>: use_syslog
Modified: trunk/projects/approx/trunk/tests/ifaddr_test.ml
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/tests/ifaddr_test.ml?rev=5520&op=diff
==============================================================================
--- trunk/projects/approx/trunk/tests/ifaddr_test.ml (original)
+++ trunk/projects/approx/trunk/tests/ifaddr_test.ml Thu Apr 17 02:31:30 2008
@@ -14,7 +14,7 @@
let () =
try
printf "%s: %s\n" interface
- (string_of_inet_addr (Interface.address interface))
+ (string_of_inet_addr (Network.interface_address interface))
with Not_found ->
eprintf "address of interface %s not found\n" interface;
exit 1
More information about the Pkg-ocaml-maint-commits
mailing list