dns 4.1.0 → 4.1.1
raw patch · 7 files changed
+33/−1 lines, 7 filesdep +case-insensitivePVP ok
version bump matches the API change (PVP)
Dependencies added: case-insensitive
API changes (from Hackage documentation)
+ Network.DNS.Types: RD_CAA :: Word8 -> CI ByteString -> ByteString -> RData
Files
- Changelog.md +4/−0
- dns.cabal +3/−1
- internal/Network/DNS/Decode/Parsers.hs +8/−0
- internal/Network/DNS/Encode/Builders.hs +7/−0
- internal/Network/DNS/Memo.hs +2/−0
- internal/Network/DNS/Types/Internal.hs +7/−0
- test/RoundTripSpec.hs +2/−0
Changelog.md view
@@ -1,5 +1,9 @@ # ChangeLog +## 4.1.1++- Adding encoder/decoder for CAA RR.+ ## 4.1.0 - Breaking change: GHC 7.x and earlier no longer supported.
dns.cabal view
@@ -1,5 +1,5 @@ Name: dns-Version: 4.1.0+Version: 4.1.1 Author: Kazu Yamamoto <kazu@iij.ad.jp> Maintainer: Kazu Yamamoto <kazu@iij.ad.jp> License: BSD3@@ -43,6 +43,7 @@ , base16-bytestring , base64-bytestring , bytestring+ , case-insensitive , containers , cryptonite , hourglass@@ -113,6 +114,7 @@ , QuickCheck >= 2.9 , base , bytestring+ , case-insensitive , hspec , iproute >= 1.3.2 , word8
internal/Network/DNS/Decode/Parsers.hs view
@@ -12,6 +12,7 @@ import qualified Data.ByteString as B import qualified Data.ByteString.Char8 as BS+import qualified Data.CaseInsensitive as CI import qualified Data.IP import Data.IP (IP(..), toIPv4, toIPv6b, makeAddrRange) @@ -280,6 +281,13 @@ decodeFlags = get8 decodeIterations = get16 decodeSalt = getInt8 >>= getNByteString+--+getRData CAA len = do+ dend <- rdataEnd len+ flags <- get8+ tag <- getInt8 >>= getNByteString+ tpos <- getPosition+ RD_CAA flags (CI.mk tag) <$> getNByteString (dend - tpos) -- getRData _ len = UnknownRData <$> getNByteString len
internal/Network/DNS/Encode/Builders.hs view
@@ -19,6 +19,7 @@ import qualified Data.ByteString.Builder as BB import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Lazy.Char8 as LBS+import qualified Data.CaseInsensitive as CI import qualified Data.IP import Data.IP (IP(..), fromIPv4, fromIPv6b, makeAddrRange) import GHC.Exts (the, groupWith)@@ -146,6 +147,7 @@ RD_NSEC3 a f i s h types -> putNSEC3 a f i s h types RD_NSEC3PARAM a f iter salt -> putNSEC3PARAM a f iter salt RD_TLSA u s m dgst -> putTLSA u s m dgst+ RD_CAA f t v -> putCAA f t v UnknownRData bytes -> putByteString bytes where putSOA mn mr serial refresh retry expire minttl = mconcat@@ -211,6 +213,11 @@ , put8 selector , put8 mtype , putByteString assocData+ ]+ putCAA flags tag value = mconcat+ [ put8 flags+ , putByteStringWithLength (CI.original tag)+ , putByteString value ] -- | Encode DNSSEC NSEC type bits
internal/Network/DNS/Memo.hs view
@@ -4,6 +4,7 @@ import qualified Control.Reaper as R import qualified Data.ByteString as B+import qualified Data.CaseInsensitive as CI import Data.Hourglass (Elapsed) import Data.OrdPSQ (OrdPSQ) import qualified Data.OrdPSQ as PSQ@@ -82,6 +83,7 @@ copysig s@RDREP_RRSIG{..} = s { rrsigZone = B.copy rrsigZone , rrsigValue = B.copy rrsigValue }+copy (RD_CAA f t v) = RD_CAA f (CI.mk (B.copy (CI.original t))) (B.copy v) copy (UnknownRData is) = UnknownRData $ B.copy is copyOData :: OData -> OData
internal/Network/DNS/Types/Internal.hs view
@@ -12,6 +12,8 @@ import qualified Data.ByteString.Base16 as B16 import qualified Data.ByteString.Base64 as B64 import qualified Data.ByteString.Char8 as BS+import Data.CaseInsensitive (CI)+import qualified Data.CaseInsensitive as CI import Data.Char (intToDigit) import qualified Data.Hourglass as H import Data.IP (IP(..), IPv4, IPv6)@@ -998,6 +1000,8 @@ -- ^ Child DS (RFC7344) | RD_CDNSKEY Word16 Word8 Word8 ByteString -- ^ Child DNSKEY (RFC7344)+ | RD_CAA Word8 (CI ByteString) ByteString+ -- ^ CAA (RFC 6844) --RD_CSYNC | UnknownRData ByteString -- ^ Unknown resource data deriving (Eq, Ord)@@ -1026,6 +1030,7 @@ RD_TLSA u s m d -> showTLSA u s m d RD_CDS tag alg dalg d -> showDS tag alg dalg d RD_CDNSKEY f p a k -> showDNSKEY f p a k+ RD_CAA f t v -> showCAA f t v UnknownRData bytes -> showOpaque bytes where showSalt "" = "-"@@ -1074,6 +1079,8 @@ showTLSA usage selector mtype digest = show usage ++ " " ++ show selector ++ " " ++ show mtype ++ " " ++ _b16encode digest+ showCAA flags tag value =+ show flags ++ " " ++ BS.unpack (CI.original tag) ++ " " ++ show value -- | Opaque RData: <https://tools.ietf.org/html/rfc3597#section-5> showOpaque bs = unwords ["\\#", show (BS.length bs), _b16encode bs]
test/RoundTripSpec.hs view
@@ -6,6 +6,7 @@ import Data.IP (Addr, IP(..), IPv4, IPv6, toIPv4, toIPv6, makeAddrRange) import qualified Data.ByteString as B import qualified Data.ByteString.Char8 as BS+import qualified Data.CaseInsensitive as CI import Test.Hspec import Test.Hspec.QuickCheck import Test.QuickCheck (Gen, arbitrary, elements, forAll, frequency, listOf, oneof)@@ -118,6 +119,7 @@ NSEC -> RD_NSEC <$> genDomain <*> genNsecTypes NSEC3 -> genNSEC3 TLSA -> RD_TLSA <$> genWord8 <*> genWord8 <*> genWord8 <*> genByteString+ CAA -> RD_CAA <$> genWord8 <*> (CI.mk <$> genByteString) <*> genByteString _ -> pure . RD_TXT $ "Unhandled type " <> BS.pack (show typ) where