packages feed

radius 0.6.1.0 → 0.7.1.0

raw patch · 4 files changed

+77/−28 lines, 4 filesdep +lensPVP ok

version bump matches the API change (PVP)

Dependencies added: lens

API changes (from Hackage documentation)

- Network.RADIUS.Types: [getHeader] :: Packet -> Header
- Network.RADIUS.Types: [getPacketAttributes] :: Packet -> [PacketAttribute]
- Network.RADIUS.Types: [getPacketAuthenticator] :: Header -> ByteString
- Network.RADIUS.Types: [getPacketId] :: Header -> Word8
- Network.RADIUS.Types: [getPacketLength] :: Header -> Word16
- Network.RADIUS.Types: [getPacketType] :: Header -> PacketType
+ Network.RADIUS.Encoding: getFromBytes :: Binary a => Int64 -> Int64 -> Get a
+ Network.RADIUS.Microsoft: encodePrimaryDNSServer :: IPv4 -> PacketAttribute
+ Network.RADIUS.Microsoft: encodeSecondaryDNSServer :: IPv4 -> PacketAttribute
+ Network.RADIUS.Types: DNSServerIPv6AddressAttribute :: IPv6 -> PacketAttribute
+ Network.RADIUS.Types: [_getHeader] :: Packet -> Header
+ Network.RADIUS.Types: [_getPacketAttributes] :: Packet -> [PacketAttribute]
+ Network.RADIUS.Types: [_getPacketAuthenticator] :: Header -> ByteString
+ Network.RADIUS.Types: [_getPacketId] :: Header -> Word8
+ Network.RADIUS.Types: [_getPacketLength] :: Header -> Word16
+ Network.RADIUS.Types: [_getPacketType] :: Header -> PacketType
+ Network.RADIUS.Types: [getDNSServerIPv6AddressAttribute] :: PacketAttribute -> IPv6
+ Network.RADIUS.Types: _ADSLCAPNASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _ADSLDMTNASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _ARAPChallengeResponseAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _ARAPFeaturesAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _ARAPFramedProtocol :: Prism' FramedProtocol ()
+ Network.RADIUS.Types: _ARAPPasswordAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _ARAPSecurityAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _ARAPSecurityDataAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _ARAPZoneAccessAttribute :: Prism' PacketAttribute ARAPZoneAccess
+ Network.RADIUS.Types: _AccessAccept :: Prism' PacketType ()
+ Network.RADIUS.Types: _AccessChallenge :: Prism' PacketType ()
+ Network.RADIUS.Types: _AccessReject :: Prism' PacketType ()
+ Network.RADIUS.Types: _AccessRequest :: Prism' PacketType ()
+ Network.RADIUS.Types: _AccountInputGigawordsAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _AccountOutputGigawordsAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _AccountingOff :: Prism' StatusType ()
+ Network.RADIUS.Types: _AccountingOn :: Prism' StatusType ()
+ Network.RADIUS.Types: _AccountingRequest :: Prism' PacketType ()
+ Network.RADIUS.Types: _AccountingResponse :: Prism' PacketType ()
+ Network.RADIUS.Types: _AcctAuthenticAttribute :: Prism' PacketAttribute Authentic
+ Network.RADIUS.Types: _AcctDelayTimeAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _AcctInputOctetsAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _AcctInputPacketsAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _AcctInterimIntervalAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _AcctLinkCountAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _AcctMultiSessionIdAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _AcctOutputOctetsAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _AcctOutputPacketsAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _AcctSessionIdAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _AcctSessionTimeAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _AcctStatusTypeAttribute :: Prism' PacketAttribute StatusType
+ Network.RADIUS.Types: _AcctTerminateCauseAttribute :: Prism' PacketAttribute TerminateCause
+ Network.RADIUS.Types: _AdminReboot :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _AdminReset :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _AdministrativeService :: Prism' ServiceType ()
+ Network.RADIUS.Types: _AsyncNASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _AuthenticateOnlyService :: Prism' ServiceType ()
+ Network.RADIUS.Types: _CHAPChallengeAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _CHAPPassword :: Prism' PacketAttribute (Word8, ByteString)
+ Network.RADIUS.Types: _CableNASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _CallCheckService :: Prism' ServiceType ()
+ Network.RADIUS.Types: _Callback :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _CallbackAdministrativeService :: Prism' ServiceType ()
+ Network.RADIUS.Types: _CallbackFramedService :: Prism' ServiceType ()
+ Network.RADIUS.Types: _CallbackIdAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _CallbackLoginService :: Prism' ServiceType ()
+ Network.RADIUS.Types: _CallbackNASPrompt :: Prism' ServiceType ()
+ Network.RADIUS.Types: _CallbackNumberAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _CalledStationIdAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _CallingStationIdAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _ClassAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _ConfigurationTokenAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _ConnectInfoAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _DNSServerIPv6AddressAttribute :: Prism' PacketAttribute IPv6
+ Network.RADIUS.Types: _DefaultTerminationAction :: Prism' TerminationAction ()
+ Network.RADIUS.Types: _DefaultZoneOnlyARAPAccess :: Prism' ARAPZoneAccess ()
+ Network.RADIUS.Types: _DelegatedIPv6Prefix :: Prism' PacketAttribute (Word8, IPv6)
+ Network.RADIUS.Types: _EAPMessageAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _EthernetNASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _EventTimeStampAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _Failed :: Prism' StatusType ()
+ Network.RADIUS.Types: _FilterIdAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _FramedAppleTalkLinkAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _FramedAppleTalkNetworkAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _FramedAppleTalkZoneAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _FramedCompressionAttribute :: Prism' PacketAttribute FramedCompression
+ Network.RADIUS.Types: _FramedIPAddressAttribute :: Prism' PacketAttribute IPv4
+ Network.RADIUS.Types: _FramedIPNetmaskAttribute :: Prism' PacketAttribute IPv4
+ Network.RADIUS.Types: _FramedIPXNetworkAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _FramedIPv6Pool :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _FramedIPv6Prefix :: Prism' PacketAttribute (Word8, IPv6)
+ Network.RADIUS.Types: _FramedIPv6Route :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _FramedInterfaceIdAttribute :: Prism' PacketAttribute Word64
+ Network.RADIUS.Types: _FramedMTUAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _FramedPoolAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _FramedProtocolAttribute :: Prism' PacketAttribute FramedProtocol
+ Network.RADIUS.Types: _FramedRouteAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _FramedRoutingAttribute :: Prism' PacketAttribute FramedRouting
+ Network.RADIUS.Types: _FramedService :: Prism' ServiceType ()
+ Network.RADIUS.Types: _G3FaxNASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _GandalfFramedProtocol :: Prism' FramedProtocol ()
+ Network.RADIUS.Types: _HDLCClearChannelNASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _HostRequest :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _IDSLNASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _IPXHeaderCompression :: Prism' FramedCompression ()
+ Network.RADIUS.Types: _ISDNAsyncV110Port :: Prism' NASPortType ()
+ Network.RADIUS.Types: _ISDNAsyncV120Port :: Prism' NASPortType ()
+ Network.RADIUS.Types: _ISDNSyncPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _IdleTimeout :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _IdleTimeoutAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _InterimUpdate :: Prism' StatusType ()
+ Network.RADIUS.Types: _LATService :: Prism' LoginService ()
+ Network.RADIUS.Types: _ListenFramedRouting :: Prism' FramedRouting ()
+ Network.RADIUS.Types: _Local :: Prism' Authentic ()
+ Network.RADIUS.Types: _LoginIPHostAttribute :: Prism' PacketAttribute IPv4
+ Network.RADIUS.Types: _LoginIPv6HostAttribute :: Prism' PacketAttribute IPv6
+ Network.RADIUS.Types: _LoginLATGroupAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _LoginLATNodeAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _LoginLATPortAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _LoginLATServiceAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _LoginService :: Prism' ServiceType ()
+ Network.RADIUS.Types: _LoginServiceAttribute :: Prism' PacketAttribute LoginService
+ Network.RADIUS.Types: _LoginTCPPortAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _LostCarrier :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _LostService :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _MessageAuthenticatorAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _NASError :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _NASIPAddress :: Prism' PacketAttribute IPv4
+ Network.RADIUS.Types: _NASIPv6Address :: Prism' PacketAttribute IPv6
+ Network.RADIUS.Types: _NASIdentifierAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _NASPortAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _NASPortIdAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _NASPortTypeAttribute :: Prism' PacketAttribute NASPortType
+ Network.RADIUS.Types: _NASPromptService :: Prism' ServiceType ()
+ Network.RADIUS.Types: _NASReboot :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _NASRequest :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _NoCompression :: Prism' FramedCompression ()
+ Network.RADIUS.Types: _NoneFramedRouting :: Prism' FramedRouting ()
+ Network.RADIUS.Types: _OutboundService :: Prism' ServiceType ()
+ Network.RADIUS.Types: _PIAFSNASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _PPPFramedProtocol :: Prism' FramedProtocol ()
+ Network.RADIUS.Types: _PasswordRetryAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _PortError :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _PortLimitAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _PortMasterService :: Prism' LoginService ()
+ Network.RADIUS.Types: _PortPreempted :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _PortSuspended :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _PortUnneeded :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _PromptAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _ProxyStateAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _RADIUSRequestTerminationAction :: Prism' TerminationAction ()
+ Network.RADIUS.Types: _Radius :: Prism' Authentic ()
+ Network.RADIUS.Types: _Remote :: Prism' Authentic ()
+ Network.RADIUS.Types: _ReplyMessageAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _RloginService :: Prism' LoginService ()
+ Network.RADIUS.Types: _SDSLNASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _SLIPFramedProtocol :: Prism' FramedProtocol ()
+ Network.RADIUS.Types: _SendAndListenFramedRouting :: Prism' FramedRouting ()
+ Network.RADIUS.Types: _SendFramedRouting :: Prism' FramedRouting ()
+ Network.RADIUS.Types: _ServiceTypeAttribute :: Prism' PacketAttribute ServiceType
+ Network.RADIUS.Types: _ServiceUnavailable :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _SessionTimeout :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _SessionTimeoutAttribute :: Prism' PacketAttribute Word32
+ Network.RADIUS.Types: _StacLZSCompression :: Prism' FramedCompression ()
+ Network.RADIUS.Types: _Start :: Prism' StatusType ()
+ Network.RADIUS.Types: _StateAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _StatusClient :: Prism' PacketType ()
+ Network.RADIUS.Types: _StatusServer :: Prism' PacketType ()
+ Network.RADIUS.Types: _Stop :: Prism' StatusType ()
+ Network.RADIUS.Types: _SyncNASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _TCPClearQuietService :: Prism' LoginService ()
+ Network.RADIUS.Types: _TCPClearService :: Prism' LoginService ()
+ Network.RADIUS.Types: _TelnetService :: Prism' LoginService ()
+ Network.RADIUS.Types: _TerminationActionAttribute :: Prism' PacketAttribute TerminationAction
+ Network.RADIUS.Types: _UnknownARAPZoneAccess :: Prism' ARAPZoneAccess Int
+ Network.RADIUS.Types: _UnknownAttribute :: Prism' PacketAttribute (Word8, ByteString)
+ Network.RADIUS.Types: _UnknownAuthentic :: Prism' Authentic Int
+ Network.RADIUS.Types: _UnknownFramedCompression :: Prism' FramedCompression Int
+ Network.RADIUS.Types: _UnknownFramedProtocol :: Prism' FramedProtocol Int
+ Network.RADIUS.Types: _UnknownFramedRouting :: Prism' FramedRouting Int
+ Network.RADIUS.Types: _UnknownLoginService :: Prism' LoginService Int
+ Network.RADIUS.Types: _UnknownNASPortType :: Prism' NASPortType Int
+ Network.RADIUS.Types: _UnknownPacketType :: Prism' PacketType Int
+ Network.RADIUS.Types: _UnknownServiceType :: Prism' ServiceType Int
+ Network.RADIUS.Types: _UnknownStatusType :: Prism' StatusType Int
+ Network.RADIUS.Types: _UnknownTerminateCause :: Prism' TerminateCause Int
+ Network.RADIUS.Types: _UnknownTerminationAction :: Prism' TerminationAction Int
+ Network.RADIUS.Types: _UnusedService :: Prism' LoginService ()
+ Network.RADIUS.Types: _UseZoneFilterExclusivelyARAPAccess :: Prism' ARAPZoneAccess ()
+ Network.RADIUS.Types: _UseZoneFilterInclusivelyARAPAccess :: Prism' ARAPZoneAccess ()
+ Network.RADIUS.Types: _UserError :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _UserNameAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _UserPasswordAttribute :: Prism' PacketAttribute ByteString
+ Network.RADIUS.Types: _UserRequest :: Prism' TerminateCause ()
+ Network.RADIUS.Types: _VJTCPIPHeaderCompression :: Prism' FramedCompression ()
+ Network.RADIUS.Types: _VendorSpecificAttribute :: Prism' PacketAttribute (Word32, ByteString)
+ Network.RADIUS.Types: _VirtualNASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _WirelessIEEE80211NASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _WirelessOtherNASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _X25NASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _X25PADService :: Prism' LoginService ()
+ Network.RADIUS.Types: _X25T3POSService :: Prism' LoginService ()
+ Network.RADIUS.Types: _X75FramedProtocol :: Prism' FramedProtocol ()
+ Network.RADIUS.Types: _X75NASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _XDSLNASPort :: Prism' NASPortType ()
+ Network.RADIUS.Types: _XylogicsFramedProtocol :: Prism' FramedProtocol ()
+ Network.RADIUS.Types: getHeader :: Lens' Packet Header
+ Network.RADIUS.Types: getPacketAttributes :: Lens' Packet [PacketAttribute]
+ Network.RADIUS.Types: getPacketAuthenticator :: Lens' Header ByteString
+ Network.RADIUS.Types: getPacketId :: Lens' Header Word8
+ Network.RADIUS.Types: getPacketLength :: Lens' Header Word16
+ Network.RADIUS.Types: getPacketType :: Lens' Header PacketType

Files

radius.cabal view
@@ -1,5 +1,5 @@ name:                radius-version:             0.6.1.0+version:             0.7.1.0 synopsis:            Remote Authentication Dial In User Service (RADIUS) description:         This module provides types and on the wire de/coding of RADIUS packets as per RFC2865 homepage:            https://gitlab.com/codemonkeylabs/RADIUS@@ -24,6 +24,7 @@                      , cryptonite                      , iproute                      , memory+                     , lens   default-language:    Haskell2010   ghc-options:         -Wall 
src/Network/RADIUS/Encoding.hs view
@@ -16,7 +16,7 @@ module Network.RADIUS.Encoding where  import Control.Monad               (when)-import Data.Binary                 (Binary(..), encode)+import Data.Binary                 (Binary(..), decode, encode) import Data.Binary.Put             (Put, putLazyByteString, putWord8, putWord16be, putWord32be, runPut) import Data.Binary.Get             (Get,                                     getLazyByteString,@@ -46,17 +46,17 @@ authenticatorLength = 16  instance Binary Packet where-    put Packet{ getHeader = Header{..} , .. } = do-      let iD         = fromIntegral $ getPacketId-          authLen    = B.length getPacketAuthenticator-          attributes = encodeAttributes getPacketAttributes+    put Packet{ _getHeader = Header{..} , .. } = do+      let iD         = fromIntegral $ _getPacketId+          authLen    = B.length _getPacketAuthenticator+          attributes = encodeAttributes _getPacketAttributes           attrsLen   = fromIntegral $ B.length $ attributes       when (authLen /= authenticatorLength) $            error $ "RADIUS.Encoding: Invalid Authenticator length " ++ show authLen-      put getPacketType+      put _getPacketType       putWord8 iD       putWord16be $ attrsLen + radiusHeaderSize-      putLazyByteString getPacketAuthenticator+      putLazyByteString _getPacketAuthenticator       putLazyByteString attributes     get = do       header <- decodeHeader@@ -69,18 +69,18 @@   iD            <- getWord8   packetLength  <- getWord16be   authenticator <- getLazyByteString authenticatorLength-  return Header { getPacketType          = packetType,-                  getPacketId            = iD,-                  getPacketLength        = packetLength,-                  getPacketAuthenticator = authenticator }+  return Header { _getPacketType          = packetType,+                  _getPacketId            = iD,+                  _getPacketLength        = packetLength,+                  _getPacketAuthenticator = authenticator }  -- | Given an already decoded header, this function can be used to decode the complete packet -- from the available data decodePacket :: Header -> Get Packet decodePacket header@Header{..} = do   attributes <- decodeAttributes []-  return Packet { getHeader           = header,-                  getPacketAttributes = attributes }+  return Packet { _getHeader           = header,+                  _getPacketAttributes = attributes }  sign :: ByteString -> ByteString -> ByteString sign packet secret =@@ -188,6 +188,7 @@     put (PasswordRetryAttribute value)          = putAttribute     75 value     put (PromptAttribute value)                 = putAttribute     76 value     put (AcctInterimIntervalAttribute value)    = putAttribute     85 value+    put (DNSServerIPv6AddressAttribute value)   = putAttribute    169 value     put (UnknownAttribute attributeType value)  = putAttribute attributeType value     put (FramedIPv6Prefix prefixLength prefix)    = putAttributeM  97 $ do       putWord8 0  -- reserved@@ -198,7 +199,7 @@       putWord8 prefixLength       putLazyByteString $ encode prefix     put (VendorSpecificAttribute vendorId str)    = putAttributeM  26 $ do-      when (not $ B.null str) $ error $ "Empty String not allowed in Vendor-Specific Attribute "+      when (B.null str) $ error "Empty String not allowed in Vendor-Specific Attribute "       putWord32be vendorId       putLazyByteString str     put (CHAPPassword identity str)               = putAttributeM   3 $ do@@ -299,13 +300,15 @@ getAttribute 75 = getAttributeValue >>= return . PasswordRetryAttribute getAttribute 76 = getAttributeValue >>= return . PromptAttribute getAttribute 85 = getAttributeValue >>= return . AcctInterimIntervalAttribute+getAttribute 169 = getAttributeValue >>= return . DNSServerIPv6AddressAttribute getAttribute 97 = do   attrLen      <- getWord8   _reserved    <- getWord8   prefixLength <- getWord8-  when (attrLen /= 20) $ error $ "Unsupported RADIUS Framed IPv6 Prefix attribute length "-           ++ show attrLen-  prefix <- get+  when (attrLen < 4 || attrLen > 20) $+    error $ show attrLen ++ " is an invalid RADIUS Framed IPv6 Prefix attribute length"+  let available = fromIntegral $ attrLen - 4+  prefix <- getFromBytes available 20   return $ FramedIPv6Prefix prefixLength prefix getAttribute 26 = do   attrLen  <- getWord8@@ -320,15 +323,24 @@   return $ CHAPPassword identity attrData getAttribute 123 = do   attrLen      <- getWord8-  when (attrLen /= 20) $ error $ "Unsupported RADIUS Delegated IPv6 Prefix attribute length "-           ++ show attrLen+  when (attrLen < 4 || attrLen > 20) $+    error $ show attrLen +++              " is an invalid RADIUS Delegated IPv6 Prefix attribute length"   _reserved    <- getWord8   prefixLength <- getWord8-  prefix       <- get+  let available = fromIntegral $ attrLen - 4+  prefix <- getFromBytes available 20   return $ DelegatedIPv6Prefix prefixLength prefix getAttribute n  = getAttributeStr >>= return . UnknownAttribute n  -- | For internal use.+getFromBytes :: Binary a => Int64 -> Int64 -> Get a+getFromBytes len size = do+  let padBytes    = size - len+      pad         = B.replicate padBytes '\0'+  str <- getLazyByteString len+  return . decode $ B.append str pad+ getAttributeStr :: Get ByteString getAttributeStr = getWord8 >>= getLazyByteString . fromIntegral . (subtract 2) -- minus type + len 
src/Network/RADIUS/Microsoft.hs view
@@ -15,7 +15,9 @@ module Network.RADIUS.Microsoft (encodeMPPESendKeyAttribute,                                  encodeMPPERecvKeyAttribute,                                  encodeMPPEEncryptionPolicyAttribute,-                                 encodeMPPEEncryptionTypesAttribute) where+                                 encodeMPPEEncryptionTypesAttribute,+                                 encodePrimaryDNSServer,+                                 encodeSecondaryDNSServer) where  import Prelude hiding (zipWith) import Crypto.Hash.Algorithms    (MD5)@@ -25,7 +27,9 @@ import Data.ByteArray            (convert) import Data.ByteString           (ByteString, pack, zipWith) import Data.ByteString.Internal  (w2c)+import Data.IP                   (IPv4) import Data.Word                 (Word8, Word16, Word32)+import Network.RADIUS.Encoding   (putAttribute) import Network.RADIUS.Types  import qualified Data.ByteString.Lazy.Char8 as LB@@ -100,3 +104,15 @@       putWord8 8 -- for MS-MPPE-Encryption-Types.       putWord8 6 -- fixed length       putWord32be types++-- | Encode MS-DNS-Primary-DNA-Server as per [RFC2548]+encodePrimaryDNSServer :: IPv4+                       -> PacketAttribute+encodePrimaryDNSServer =+    vendorSpecificAttribute . runPut . putAttribute 28++-- | Encode MS-DNS-Secondary-DNA-Server as per [RFC2548]+encodeSecondaryDNSServer :: IPv4+                       -> PacketAttribute+encodeSecondaryDNSServer =+    vendorSpecificAttribute . runPut . putAttribute 29
src/Network/RADIUS/Types.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE TemplateHaskell    #-} {-| Module      : Network.RADIUS.Types Description : Provides types and definitions for RADIUS as per RFC 2865@@ -21,15 +22,16 @@ import Data.Data                     (Data) import Data.Word                     (Word8, Word16, Word32, Word64) import Data.IP                       (IPv4, IPv6)+import Control.Lens.TH               (makePrisms, makeLenses) -data Header = Header { getPacketType          :: PacketType,-                       getPacketId            :: Word8,-                       getPacketLength        :: Word16,-                       getPacketAuthenticator :: ByteString }+data Header = Header { _getPacketType          :: PacketType,+                       _getPacketId            :: Word8,+                       _getPacketLength        :: Word16,+                       _getPacketAuthenticator :: ByteString }               deriving (Show, Eq) -data Packet = Packet { getHeader           :: Header,-                       getPacketAttributes :: [PacketAttribute] }+data Packet = Packet { _getHeader           :: Header,+                       _getPacketAttributes :: [PacketAttribute] }               deriving (Show, Eq)  data PacketType = AccessRequest@@ -146,6 +148,7 @@   | AcctTerminateCauseAttribute     { getAcctTerminateCauseAttribute     :: TerminateCause    }   | AcctMultiSessionIdAttribute     { getAcctMultiSessionIdAttribute     :: ByteString        }   | AcctLinkCountAttribute          { getAcctLinkCountAttribute          :: Word32            }+  | DNSServerIPv6AddressAttribute   { getDNSServerIPv6AddressAttribute   :: IPv6              }   | UnknownAttribute                { getUnknownType                     :: Word8,                                       getUnknownAttribute                :: ByteString        }   deriving (Show, Eq, Data)@@ -484,3 +487,20 @@     fromEnum UseZoneFilterInclusivelyARAPAccess = 2     fromEnum UseZoneFilterExclusivelyARAPAccess = 4     fromEnum (UnknownARAPZoneAccess x)          = x++makeLenses ''Header+makeLenses ''Packet+makePrisms ''PacketType+makePrisms ''PacketAttribute+makePrisms ''StatusType+makePrisms ''Authentic+makePrisms ''TerminateCause+makePrisms ''ServiceType+makePrisms ''FramedProtocol+makePrisms ''FramedRouting+makePrisms ''FramedCompression+makePrisms ''LoginService+makePrisms ''TerminationAction+makePrisms ''NASPortType+makePrisms ''ARAPZoneAccess+