support some more RRs
authorEugene Crosser <crosser@average.org>
Thu, 17 Apr 2014 14:02:27 +0000 (18:02 +0400)
committerEugene Crosser <crosser@average.org>
Thu, 17 Apr 2014 14:02:27 +0000 (18:02 +0400)
NmcDom.hs
PowerDns.hs
pdns-pipe-nmc.hs

index 8153a1dd7dad2d0b3128b455cf465bf0a93aa381..477def1b8b2418a7202b429d9cc864096fea9bd6 100644 (file)
--- a/NmcDom.hs
+++ b/NmcDom.hs
@@ -4,6 +4,7 @@ module NmcDom   ( NmcDom(..)
                 , NmcRRService(..)
                 , NmcRRI2p(..)
                 , NmcRRTls(..)
+                , NmcRRDs(..)
                 , emptyNmcDom
                 , mergeNmcDom
                 ) where
index 12768508d55c72a32e71c777e7b746f049149eaa..76bcba772d23ff6d0f27e64bda1a18a9684a0826 100644 (file)
@@ -85,7 +85,7 @@ pdnsOut ver id name rrtype edom = case edom of
       n2p RRTypeANY   =
         foldr (\r accum -> (n2p r) ++ accum) []
           [RRTypeSRV, RRTypeA, RRTypeAAAA, RRTypeCNAME, RRTypeDNAME,
-           RRTypeSOA, RRTypeRP, RRTypeLOC, RRTypeNS, RRTypeDS, RRTypeMX]
+           RRTypeRP, RRTypeLOC, RRTypeNS, RRTypeDS, RRTypeMX]
       n2p RRTypeSRV   = mapto    "SRV"   $ domSrv dom
       n2p RRTypeMX    = mapto    "MX"    $ domMx dom
       n2p RRTypeA     = mapto    "A"     $ domIp dom
@@ -93,21 +93,33 @@ pdnsOut ver id name rrtype edom = case edom of
       n2p RRTypeCNAME = takejust "CNAME" $ domAlias dom
       n2p RRTypeDNAME = takejust "DNAME" $ domTranslate dom
       n2p RRTypeSOA   = -- FIXME generate only for top domain
+                        -- FIXME make realistic version field
+                        -- FIXME make realistic nameserver field
         if dom == emptyNmcDom then []
-        else
-          let
+        else [(name, "SOA", "ns " ++ email ++ " 99999 10800 3600 604800 86400")]
+          where
             email = case domEmail dom of
               Nothing   -> "hostmaster." ++ name
-              Just addr ->
-                let (aname, adom) = break (== '@') addr
-                in case adom of
-                  "" -> aname
-                  _  -> aname ++ "." ++ (tail adom)
-          in [(name, "SOA", email ++ " 99999999 10800 3600 604800 86400")]
-      n2p RRTypeRP    = [] --FIXME
+              Just addr -> dotmail addr
+      n2p RRTypeRP    = case domEmail dom of
+        Nothing   -> []
+        Just addr -> [(name, "RP", (dotmail addr) ++ " .")]
       n2p RRTypeLOC   = takejust "LOC"  $ domLoc dom
       n2p RRTypeNS    = mapto    "NS"   $ domNs dom
-      n2p RRTypeDS    = [] --FIXME
+      n2p RRTypeDS    = case domDs dom of
+        Nothing  -> []
+        Just dss -> map (\x -> (name, "DS", dsStr x)) dss
+          where
+            dsStr x = (show (dsKeyTag x)) ++ " "
+                   ++ (show (dsAlgo x)) ++ " "
+                   ++ (show (dsHashType x)) ++ " "
+                   ++ (dsHashValue x)
+
+      dotmail addr = 
+        let (aname, adom) = break (== '@') addr
+        in case adom of
+          "" -> aname
+          _  -> aname ++ "." ++ (tail adom)
       
       mapto    rrstr maybel   = case maybel of
         Nothing  -> []
index 737c9e771f4d0c81c32518eae45e97961a332231..d047b4fbe00112617e9508174fd1b3896f7ae9ae 100644 (file)
@@ -101,7 +101,8 @@ mainPdnsNmc = do
       Right preq -> do
         case preq of
           PdnsRequestQ qname qtype id _ _ _ ->
-            queryDom (queryOpNmc cfg mgr id) qname >>= putStr . (pdnsOut ver id qname qtype)
+            queryDom (queryOpNmc cfg mgr id) qname
+              >>= putStr . (pdnsOut ver id qname qtype)
           PdnsRequestAXFR xfrreq ->
             putStr $ pdnsReport ("No support for AXFR " ++ xfrreq)
           PdnsRequestPing -> putStrLn "END"