1 import Network.DNS.Message
2 import Network.DNS.Named
3 import Network.DNS.Named.Config
4 import Network.DNS.Named.Responder
5 import Network.DNS.Named.Zone
7 import System.IO.Unsafe
10 main = runNamed cnf zoneFor
14 cnfServerAddress = SockAddrInet 9090 iNADDR_ANY
17 zoneFor :: DomainName -> Maybe Zone
19 | name `isInZone` zone = Just zone
24 zoneName = mkDN "cielonegro.org."
25 , zoneResponders = [ wrapResponder' $
26 do name <- getQueryName
27 if name == mkDN "ns.cielonegro.org." then
28 respond ResourceRecord {
33 , rrData = inetAddr "127.0.0.1"
36 fail "FIXME: we want to throw NameError but we can't for now"
38 , zoneIsAuthoritative = True
41 wrapResponder' :: Responder A IN () -> SomeResponder
42 wrapResponder' = wrapResponder
45 inetAddr :: String -> HostAddress
46 inetAddr = unsafePerformIO . inet_addr