import Data.List ( intercalate )
import Data.Maybe ( catMaybes )
import Network.DNS (
+ Domain,
DNSError,
Resolver,
defaultResolvConf,
makeResolvSeed,
withResolver )
-import Network.DNS.RBL.Host ( Host, host, reverse_labels )
+import Network.DNS.RBL.Host ( Host(..), host )
import Network.DNS.RBL.IPv4Pattern ( addresses )
import Network.DNS.RBL.Pretty ( Pretty(..) )
+import Network.DNS.RBL.Reversible ( Reversible(..) )
import Network.DNS.RBL.Site ( Site(..), sites )
return_codes = intercalate "," (map show codes)
+-- | Make the given 'Host' relative (if it was absolute), and reverse
+-- its labels. This is done in order to look it up in the DNS in
+-- standard reverse lookup form. For example, if we wanted to look
+-- up @192.168.0.1@ on @rbl.example.com@, we would want to look up
+-- the name @1.0.168.192.rbl.example.com@.
+--
+reverse_host :: Host -> Domain
+reverse_host h =
+ pack $ case (backwards h) of
+ (HostRelative _) -> pretty_show h
+ (HostAbsolute d) -> pretty_show d
+
+
+
-- | This code is stolen from 'Network.DNS.lookupRDNS', which I'm
-- pretty sure I wrote anyway.
--
dnslookup rlv rbl h = lookupA rlv dom
where
suffix = pack $ "." ++ (pretty_show rbl)
- dom = (reverse_labels h) `append` suffix
+ dom = (reverse_host h) `append` suffix
-- | See 'lookup_single'. The \"prime\" version here takes an