]> gitweb @ CieloNegro.org - haskell-dns.git/blob - ExampleDNSServer.hs
ZoneFinder comes back
[haskell-dns.git] / ExampleDNSServer.hs
1 import           Network.DNS.DomainMap (DomainMap)
2 import           Network.DNS.Message
3 import           Network.DNS.Named
4 import           Network.DNS.Named.Config
5 import           Network.DNS.Named.Zone
6 import           Network.Socket.IsString ()
7
8 main :: IO ()
9 main = runNamed cnf zones
10     where
11       cnf :: Config
12       cnf = Config {
13               cnfServerPort    = "9090"
14             , cnfAllowTransfer = True
15             }
16
17       zones :: DomainMap Zone
18       zones = fromZones
19               [ Zone {
20                   zoneName = "cielonegro.org."
21                 , zoneSOA  = Just SOAFields {
22                                soaMasterNameServer   = "ns.cielonegro.org."
23                              , soaResponsibleMailbox = "root.ns.cielonegro.org."
24                              , soaSerialNumber       = 2008022148
25                              , soaRefreshInterval    = 3600
26                              , soaRetryInterval      = 900
27                              , soaExpirationLimit    = 3600000
28                              , soaMinimumTTL         = 3600
29                              }
30                 , zoneRecordNames = return [ "ns.cielonegro.org."
31                                            , "www.cielonegro.org."
32                                            , "git.cielonegro.org."
33                                            ]
34                 , zoneResponder   = return . responder
35                 }
36               ]
37
38       responder :: DomainName -> [SomeRR]
39       responder name
40           | name == "ns.cielonegro.org."
41               = [ wrapRecord ResourceRecord {
42                                    rrName  = name
43                                  , rrType  = A
44                                  , rrClass = IN
45                                  , rrTTL   = 9600
46                                  , rrData  = "127.0.0.1"
47                                  }
48                 , wrapRecord ResourceRecord {
49                                    rrName  = name
50                                  , rrType  = AAAA
51                                  , rrClass = IN
52                                  , rrTTL   = 9600
53                                  , rrData  = "::1"
54                                  }
55                 ]
56           | name == "www.cielonegro.org."
57               = [ wrapRecord ResourceRecord {
58                                    rrName  = name
59                                  , rrType  = A
60                                  , rrClass = IN
61                                  , rrTTL   = 9600
62                                  , rrData  = "127.0.0.2"
63                                  }
64                 , wrapRecord ResourceRecord {
65                                    rrName  = name
66                                  , rrType  = AAAA
67                                  , rrClass = IN
68                                  , rrTTL   = 9600
69                                  , rrData  = "fe80::216:cbff:fe39:56a4"
70                                  }
71                 ]
72           | name == "git.cielonegro.org."
73               = [ wrapRecord ResourceRecord {
74                                    rrName  = name
75                                  , rrType  = CNAME
76                                  , rrClass = IN
77                                  , rrTTL   = 9600
78                                  , rrData  = "www.cielonegro.org."
79                                  }
80                 ]
81           | otherwise
82               = [] -- This means NXDOMAIN.
83