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 +2/−1
- src/Network/RADIUS/Encoding.hs +32/−20
- src/Network/RADIUS/Microsoft.hs +17/−1
- src/Network/RADIUS/Types.hs +26/−6
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+