1 import Network.DNS.Message
2 import Network.DNS.Named
3 import Network.DNS.Named.Config
4 import Network.DNS.Named.Zone
6 import System.IO.Unsafe
9 main = runNamed cnf (return . findZone)
13 cnfServerAddress = SockAddrInet 9090 iNADDR_ANY
14 , cnfAllowTransfer = True
17 findZone :: DomainName -> Maybe Zone
19 | name `isInZone` zone = Just zone
24 zoneName = mkDN "cielonegro.org."
25 , zoneSOA = Just SOAFields {
26 soaMasterNameServer = mkDN "ns.cielonegro.org."
27 , soaResponsibleMailbox = mkDN "root.ns.cielonegro.org."
28 , soaSerialNumber = 2008022148
29 , soaRefreshInterval = 3600
30 , soaRetryInterval = 900
31 , soaExpirationLimit = 3600000
32 , soaMinimumTTL = 3600
34 , zoneRecordNames = return [ mkDN "ns.cielonegro.org."
35 , mkDN "www.cielonegro.org."
36 , mkDN "git.cielonegro.org."
38 , zoneResponder = return . responder
41 responder :: DomainName -> [SomeRR]
43 | name == mkDN "ns.cielonegro.org."
44 = [ wrapRecord ResourceRecord {
49 , rrData = inetAddr "127.0.0.1"
52 | name == mkDN "www.cielonegro.org."
53 = [ wrapRecord ResourceRecord {
58 , rrData = inetAddr "127.0.0.2"
61 | name == mkDN "git.cielonegro.org."
62 = [ wrapRecord ResourceRecord {
67 , rrData = mkDN "www.cielonegro.org."
71 = [] -- This means NXDOMAIN.
74 inetAddr :: String -> HostAddress
75 inetAddr = unsafePerformIO . inet_addr