]> gitweb @ CieloNegro.org - haskell-dns.git/blobdiff - ExampleDNSServer.hs
defaultUserHooks --> simpleUserHooks
[haskell-dns.git] / ExampleDNSServer.hs
index 428f261856dd892fa8d8a2862996239eb8b91f9d..2dd9564ed8554c20dc52534feab9c09ddf6d001e 100644 (file)
@@ -1,12 +1,12 @@
+import           Network.DNS.DomainMap (DomainMap)
 import           Network.DNS.Message
 import           Network.DNS.Named
 import           Network.DNS.Named.Config
 import           Network.DNS.Named.Zone
-import           Network.Socket
-import           System.IO.Unsafe
+import           Network.Socket.IsString ()
 
 main :: IO ()
-main = runNamed cnf (return . findZone)
+main = runNamed cnf zones
     where
       cnf :: Config
       cnf = Config {
@@ -14,62 +14,68 @@ main = runNamed cnf (return . findZone)
             , cnfAllowTransfer = True
             }
 
-      findZone :: DomainName -> Maybe Zone
-      findZone name
-          | name `isInZone` zone = Just zone
-          | otherwise            = Nothing
-
-      zone :: Zone
-      zone = Zone {
-               zoneName = mkDN "cielonegro.org."
-             , zoneSOA  = Just SOAFields {
-                            soaMasterNameServer   = mkDN "ns.cielonegro.org."
-                          , soaResponsibleMailbox = mkDN "root.ns.cielonegro.org."
-                          , soaSerialNumber       = 2008022148
-                          , soaRefreshInterval    = 3600
-                          , soaRetryInterval      = 900
-                          , soaExpirationLimit    = 3600000
-                          , soaMinimumTTL         = 3600
-                          }
-             , zoneRecordNames = return [ mkDN "ns.cielonegro.org."
-                                        , mkDN "www.cielonegro.org."
-                                        , mkDN "git.cielonegro.org."
-                                        ]
-             , zoneResponder   = return . responder
-             }
-
-      responder :: DomainName -> [SomeRR]
-      responder name
-          | name == mkDN "ns.cielonegro.org."
-              = [ wrapRecord ResourceRecord {
-                                   rrName  = name
-                                 , rrType  = A
-                                 , rrClass = IN
-                                 , rrTTL   = 9600
-                                 , rrData  = inetAddr "127.0.0.1"
-                                 }
-                ]
-          | name == mkDN "www.cielonegro.org."
-              = [ wrapRecord ResourceRecord {
-                                   rrName  = name
-                                 , rrType  = A
-                                 , rrClass = IN
-                                 , rrTTL   = 9600
-                                 , rrData  = inetAddr "127.0.0.2"
-                                 }
-                ]
-          | name == mkDN "git.cielonegro.org."
-              = [ wrapRecord ResourceRecord {
-                                   rrName  = name
-                                 , rrType  = CNAME
-                                 , rrClass = IN
-                                 , rrTTL   = 9600
-                                 , rrData  = mkDN "www.cielonegro.org."
-                                 }
-                ]
-          | otherwise
-              = [] -- This means NXDOMAIN.
-
-
-inetAddr :: String -> HostAddress
-inetAddr = unsafePerformIO . inet_addr
+      zones :: DomainMap SomeZone
+      zones = fromZones
+              [ wrapZone StaticZone {
+                               szName    = "cielonegro.org."
+                             , szRecords = fromRecords
+                                           [ wrapRecord ResourceRecord {
+                                                              rrName  = "cielonegro.org."
+                                                            , rrType  = SOA
+                                                            , rrClass = IN
+                                                            , rrTTL   = 3600
+                                                            , rrData  = SOAFields {
+                                                                          soaMasterNameServer   = "ns.cielonegro.org."
+                                                                        , soaResponsibleMailbox = "root.ns.cielonegro.org."
+                                                                        , soaSerialNumber       = 2008022148
+                                                                        , soaRefreshInterval    = 3600
+                                                                        , soaRetryInterval      = 900
+                                                                        , soaExpirationLimit    = 3600000
+                                                                        , soaMinimumTTL         = 3600
+                                                                        }
+                                               }
+                                           , wrapRecord ResourceRecord {
+                                                              rrName  = "cielonegro.org."
+                                                            , rrType  = NS
+                                                            , rrClass = IN
+                                                            , rrTTL   = 3600
+                                                            , rrData  = "ns.cielonegro.org."
+                                                            }
+                                           , wrapRecord ResourceRecord {
+                                                              rrName  = "ns.cielonegro.org."
+                                                            , rrType  = A
+                                                            , rrClass = IN
+                                                            , rrTTL   = 9600
+                                                            , rrData  = "127.0.0.1"
+                                                            }
+                                           , wrapRecord ResourceRecord {
+                                                              rrName  = "ns.cielonegro.org."
+                                                            , rrType  = AAAA
+                                                            , rrClass = IN
+                                                            , rrTTL   = 9600
+                                                            , rrData  = "::1"
+                                                            }
+                                           , wrapRecord ResourceRecord {
+                                                              rrName  = "www.cielonegro.org."
+                                                            , rrType  = A
+                                                            , rrClass = IN
+                                                            , rrTTL   = 9600
+                                                            , rrData  = "127.0.0.2"
+                                                            }
+                                           , wrapRecord ResourceRecord {
+                                                              rrName  = "www.cielonegro.org."
+                                                            , rrType  = AAAA
+                                                            , rrClass = IN
+                                                            , rrTTL   = 9600
+                                                            , rrData  = "fe80::216:cbff:fe39:56a4"
+                                                            }
+                                           , wrapRecord ResourceRecord {
+                                                              rrName  = "git.cielonegro.org."
+                                                            , rrType  = CNAME
+                                                            , rrClass = IN
+                                                            , rrTTL   = 9600
+                                                            , rrData  = "www.cielonegro.org."
+                                                            }
+                                           ]
+                             }
+              ]