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
16 findZone :: DomainName -> Maybe Zone
18 | name `isInZone` zone = Just zone
23 zoneName = mkDN "cielonegro.org."
24 , zoneSOA = Just SOAFields {
25 soaMasterNameServer = mkDN "ns.cielonegro.org."
26 , soaResponsibleMailbox = mkDN "root.ns.cielonegro.org."
27 , soaSerialNumber = 2008022148
28 , soaRefreshInterval = 3600
29 , soaRetryInterval = 900
30 , soaExpirationLimit = 3600000
31 , soaMinimumTTL = 3600
33 , zoneRecordNames = return [ mkDN "cielonegro.org."
34 , 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