diff -ur whitelister-0.8.orig/rules.ml whitelister-0.8/rules.ml
--- whitelister-0.8.orig/rules.ml	2006-02-13 23:15:55.000000000 +0100
+++ whitelister-0.8/rules.ml	2007-04-29 18:35:01.000000000 +0200
@@ -104,3 +104,23 @@
       | Spf.Error -> raise (Dirty "SPF Internal error")
       | Policy.DSN     -> ()
 
+(* TODO : See if we can avoid DNS queries and use Postfix policy vars *)
+let check_dns_client dorej pcy =
+  if dorej then
+    try
+      let ip = (client_address pcy) in
+	Unix.gethostbyaddr (Unix.inet_addr_of_string ip);
+	()
+    with
+      | Not_found    -> raise (Dirty "No client IP reverse")
+
+(* TODO : Compare A record with client_address *)
+let check_dns_rev_client dorej pcy =
+  if dorej then
+    try
+      let name = (client_name pcy) in
+	Unix.gethostbyname (name);
+	()
+    with
+      | Not_found    -> raise (Dirty "No A record for client reverse")
+
diff -ur whitelister-0.8.orig/rules.mli whitelister-0.8/rules.mli
--- whitelister-0.8.orig/rules.mli	2005-08-26 09:49:38.000000000 +0200
+++ whitelister-0.8/rules.mli	2007-04-29 18:32:25.000000000 +0200
@@ -48,3 +48,7 @@
 val check_rhbl : rhbl_type -> string list -> Policy.t -> unit
 
 val check_spf : spf_mode -> bool -> Policy.t -> unit
+
+val check_dns_client : bool -> Policy.t -> unit
+
+val check_dns_rev_client : bool -> Policy.t -> unit
diff -ur whitelister-0.8.orig/whitelister.ml whitelister-0.8/whitelister.ml
--- whitelister-0.8.orig/whitelister.ml	2006-02-13 23:15:55.000000000 +0100
+++ whitelister-0.8/whitelister.ml	2007-04-29 18:40:11.000000000 +0200
@@ -41,6 +41,9 @@
   mutable rhbl_rcpt:   string list;
   mutable rhbl_sender: string list;
   mutable rhbl_helo:   string list;
+ 
+  mutable dns_client:  bool;
+  mutable dns_rev_client: bool;
 }
 
 (* Checker *)
@@ -65,7 +68,9 @@
           Rules.check_rhbl Rules.Sender cfg.rhbl_sender pcy;
           Rules.check_rhbl Rules.Rcpt   cfg.rhbl_rcpt   pcy;
           Rules.check_rhbl Rules.Client cfg.rhbl_client pcy;
-          Rules.check_spf cfg.spf cfg.spfrej pcy;
+          Rules.check_spf 		cfg.spf cfg.spfrej pcy;
+          Rules.check_dns_client 	cfg.dns_client	pcy;
+          Rules.check_dns_rev_client 	cfg.dns_rev_client pcy;
           if cfg.verb > 0 then log_event "Clean" "OK" pcy;
           "OK"
         with
@@ -100,6 +105,9 @@
   rhbl_rcpt   = [] ;
   rhbl_sender = [] ;
   rhbl_helo   = [] ;
+
+  dns_client = false;
+  dns_rev_client = false;
 }
 
 let to_bool s =
@@ -137,6 +145,9 @@
           | ["rhbl_rcpt"; h]   -> cfg.rhbl_rcpt   <- h::cfg.rhbl_rcpt
           | ["rhbl_sender"; h] -> cfg.rhbl_sender <- h::cfg.rhbl_sender
 
+          | ["dns_client"; d]     -> cfg.dns_client     <- to_bool "dns_client" d
+          | ["dns_rev_client"; e] -> cfg.dns_rev_client <- to_bool "dns_rev_client" e
+
         (* deprecated settings *)
           | ["rhbl"; h]        -> prerr_endline "rhbl is deprecated, it defaults to rhbl_client which may not be what you want.";
                                   cfg.rhbl_client <- h::cfg.rhbl_client
