radius 0.5.0.0 → 0.5.0.1
raw patch · 3 files changed
+139/−4 lines, 3 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Network.RADIUS.Encoding: authenticatorLength :: Int64
+ Network.RADIUS.Encoding: decodeAttributes :: [PacketAttribute] -> Get [PacketAttribute]
+ Network.RADIUS.Encoding: decodeHeader :: Get Header
+ Network.RADIUS.Encoding: decodePacket :: Header -> Get Packet
+ Network.RADIUS.Encoding: encodeAttributes :: [PacketAttribute] -> ByteString
+ Network.RADIUS.Encoding: getAttribute :: Word8 -> Get PacketAttribute
+ Network.RADIUS.Encoding: getAttributeStr :: Get ByteString
+ Network.RADIUS.Encoding: getAttributeValue :: (Binary a) => Get a
+ Network.RADIUS.Encoding: getEnum :: (Enum a) => Get a
+ Network.RADIUS.Encoding: hashMD5 :: ByteString -> ByteString
+ Network.RADIUS.Encoding: instance Data.Binary.Class.Binary Network.RADIUS.Types.Authentic
+ Network.RADIUS.Encoding: instance Data.Binary.Class.Binary Network.RADIUS.Types.StatusType
+ Network.RADIUS.Encoding: instance Data.Binary.Class.Binary Network.RADIUS.Types.TerminateCause
+ Network.RADIUS.Encoding: putAttribute :: (Binary a) => Word8 -> a -> Put
+ Network.RADIUS.Encoding: putAttributeStr :: Word8 -> ByteString -> Put
+ Network.RADIUS.Encoding: putEnum :: (Enum a) => a -> Put
+ Network.RADIUS.Types: AccountingOff :: StatusType
+ Network.RADIUS.Types: AccountingOn :: StatusType
+ Network.RADIUS.Types: AcctAuthenticAttribute :: Authentic -> PacketAttribute
+ Network.RADIUS.Types: AcctDelayTimeAttribute :: Word32 -> PacketAttribute
+ Network.RADIUS.Types: AcctInputOctetsAttribute :: Word32 -> PacketAttribute
+ Network.RADIUS.Types: AcctInputPacketsAttribute :: Word32 -> PacketAttribute
+ Network.RADIUS.Types: AcctLinkCountAttribute :: Word32 -> PacketAttribute
+ Network.RADIUS.Types: AcctMultiSessionIdAttribute :: ByteString -> PacketAttribute
+ Network.RADIUS.Types: AcctOutputOctetsAttribute :: Word32 -> PacketAttribute
+ Network.RADIUS.Types: AcctOutputPacketsAttribute :: Word32 -> PacketAttribute
+ Network.RADIUS.Types: AcctSessionIdAttribute :: ByteString -> PacketAttribute
+ Network.RADIUS.Types: AcctSessionTimeAttribute :: Word32 -> PacketAttribute
+ Network.RADIUS.Types: AcctStatusTypeAttribute :: StatusType -> PacketAttribute
+ Network.RADIUS.Types: AcctTerminateCauseAttribute :: TerminateCause -> PacketAttribute
+ Network.RADIUS.Types: AdminReboot :: TerminateCause
+ Network.RADIUS.Types: AdminReset :: TerminateCause
+ Network.RADIUS.Types: Callback :: TerminateCause
+ Network.RADIUS.Types: Failed :: StatusType
+ Network.RADIUS.Types: HostRequest :: TerminateCause
+ Network.RADIUS.Types: IdleTimeout :: TerminateCause
+ Network.RADIUS.Types: InterimUpdate :: StatusType
+ Network.RADIUS.Types: Local :: Authentic
+ Network.RADIUS.Types: LostCarrier :: TerminateCause
+ Network.RADIUS.Types: LostService :: TerminateCause
+ Network.RADIUS.Types: NASError :: TerminateCause
+ Network.RADIUS.Types: NASReboot :: TerminateCause
+ Network.RADIUS.Types: NASRequest :: TerminateCause
+ Network.RADIUS.Types: PortError :: TerminateCause
+ Network.RADIUS.Types: PortPreempted :: TerminateCause
+ Network.RADIUS.Types: PortSuspended :: TerminateCause
+ Network.RADIUS.Types: PortUnneeded :: TerminateCause
+ Network.RADIUS.Types: Radius :: Authentic
+ Network.RADIUS.Types: Remote :: Authentic
+ Network.RADIUS.Types: ServiceUnavailable :: TerminateCause
+ Network.RADIUS.Types: SessionTimeout :: TerminateCause
+ Network.RADIUS.Types: Start :: StatusType
+ Network.RADIUS.Types: Stop :: StatusType
+ Network.RADIUS.Types: UserError :: TerminateCause
+ Network.RADIUS.Types: UserRequest :: TerminateCause
+ Network.RADIUS.Types: [getAcctAuthenticAttribute] :: PacketAttribute -> Authentic
+ Network.RADIUS.Types: [getAcctDelayTimeAttribute] :: PacketAttribute -> Word32
+ Network.RADIUS.Types: [getAcctInputOctetsAttribute] :: PacketAttribute -> Word32
+ Network.RADIUS.Types: [getAcctInputPacketsAttribute] :: PacketAttribute -> Word32
+ Network.RADIUS.Types: [getAcctLinkCountAttribute] :: PacketAttribute -> Word32
+ Network.RADIUS.Types: [getAcctMultiSessionIdAttribute] :: PacketAttribute -> ByteString
+ Network.RADIUS.Types: [getAcctOutputOctetsAttribute] :: PacketAttribute -> Word32
+ Network.RADIUS.Types: [getAcctOutputPacketsAttribute] :: PacketAttribute -> Word32
+ Network.RADIUS.Types: [getAcctSessionIdAttribute] :: PacketAttribute -> ByteString
+ Network.RADIUS.Types: [getAcctSessionTimeAttribute] :: PacketAttribute -> Word32
+ Network.RADIUS.Types: [getAcctStatusTypeAttribute] :: PacketAttribute -> StatusType
+ Network.RADIUS.Types: [getAcctTerminateCauseAttribute] :: PacketAttribute -> TerminateCause
+ Network.RADIUS.Types: data Authentic
+ Network.RADIUS.Types: data StatusType
+ Network.RADIUS.Types: data TerminateCause
+ Network.RADIUS.Types: instance Data.Data.Data Network.RADIUS.Types.Authentic
+ Network.RADIUS.Types: instance Data.Data.Data Network.RADIUS.Types.StatusType
+ Network.RADIUS.Types: instance Data.Data.Data Network.RADIUS.Types.TerminateCause
+ Network.RADIUS.Types: instance GHC.Classes.Eq Network.RADIUS.Types.Authentic
+ Network.RADIUS.Types: instance GHC.Classes.Eq Network.RADIUS.Types.StatusType
+ Network.RADIUS.Types: instance GHC.Classes.Eq Network.RADIUS.Types.TerminateCause
+ Network.RADIUS.Types: instance GHC.Enum.Enum Network.RADIUS.Types.Authentic
+ Network.RADIUS.Types: instance GHC.Enum.Enum Network.RADIUS.Types.StatusType
+ Network.RADIUS.Types: instance GHC.Enum.Enum Network.RADIUS.Types.TerminateCause
+ Network.RADIUS.Types: instance GHC.Show.Show Network.RADIUS.Types.Authentic
+ Network.RADIUS.Types: instance GHC.Show.Show Network.RADIUS.Types.StatusType
+ Network.RADIUS.Types: instance GHC.Show.Show Network.RADIUS.Types.TerminateCause
Files
- radius.cabal +1/−1
- src/Network/RADIUS/Encoding.hs +37/−3
- src/Network/RADIUS/Types.hs +101/−0
radius.cabal view
@@ -1,5 +1,5 @@ name: radius-version: 0.5.0.0+version: 0.5.0.1 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://github.com/erickg/radius#readme
src/Network/RADIUS/Encoding.hs view
@@ -13,7 +13,7 @@ -} -module Network.RADIUS.Encoding (radiusHeaderSize, sign) where+module Network.RADIUS.Encoding where import Control.Monad (when) import Data.Binary (Binary(..), encode)@@ -82,7 +82,6 @@ return Packet { getHeader = header, getPacketAttributes = attributes } --- | Add authenticator field to a RADIUS packet using the specified secret sign :: ByteString -> ByteString -> ByteString sign packet secret = let authenticator = hashMD5 $ packet `append` secret@@ -90,7 +89,6 @@ attributes = B.drop (fromIntegral radiusHeaderSize) packet in prologue `append` authenticator `append` attributes --- | Used internally to calculate authenticator field hashMD5 :: ByteString -> ByteString hashMD5 = B.fromStrict . convert . (hashlazy :: ByteString -> Digest MD5) @@ -135,6 +133,8 @@ put (LoginLATNodeAttribute str) = putAttributeStr 35 str put (LoginLATGroupAttribute str) = putAttributeStr 36 str put (FramedAppleTalkZoneAttribute str) = putAttributeStr 39 str+ put (AcctSessionIdAttribute str) = putAttributeStr 44 str+ put (AcctMultiSessionIdAttribute str) = putAttributeStr 50 str put (CHAPChallengeAttribute str) = putAttributeStr 60 str put (LoginLATPortAttribute str) = putAttributeStr 63 str put (ARAPPasswordAttribute str) = putAttributeStr 70 str@@ -155,6 +155,16 @@ put (IdleTimeoutAttribute value) = putAttribute 28 value put (FramedAppleTalkLinkAttribute value) = putAttribute 37 value put (FramedAppleTalkNetworkAttribute value) = putAttribute 38 value+ put (AcctStatusTypeAttribute value) = putAttribute 40 value+ put (AcctDelayTimeAttribute value) = putAttribute 41 value+ put (AcctInputOctetsAttribute value) = putAttribute 42 value+ put (AcctOutputOctetsAttribute value) = putAttribute 43 value+ put (AcctAuthenticAttribute value) = putAttribute 45 value+ put (AcctSessionTimeAttribute value) = putAttribute 46 value+ put (AcctInputPacketsAttribute value) = putAttribute 47 value+ put (AcctOutputPacketsAttribute value) = putAttribute 48 value+ put (AcctTerminateCauseAttribute value) = putAttribute 49 value+ put (AcctLinkCountAttribute value) = putAttribute 51 value put (PortLimitAttribute value) = putAttribute 62 value put (NASIPAddress value) = putAttribute 4 value put (NASIPv6Address value) = putAttribute 95 value@@ -240,6 +250,8 @@ getAttribute 35 = getAttributeStr >>= return . LoginLATNodeAttribute getAttribute 36 = getAttributeStr >>= return . LoginLATGroupAttribute getAttribute 39 = getAttributeStr >>= return . FramedAppleTalkZoneAttribute+getAttribute 44 = getAttributeStr >>= return . AcctSessionIdAttribute+getAttribute 50 = getAttributeStr >>= return . AcctMultiSessionIdAttribute getAttribute 60 = getAttributeStr >>= return . CHAPChallengeAttribute getAttribute 63 = getAttributeStr >>= return . LoginLATPortAttribute getAttribute 70 = getAttributeStr >>= return . ARAPPasswordAttribute@@ -274,6 +286,16 @@ getAttribute 98 = getAttributeValue >>= return . LoginIPv6HostAttribute getAttribute 15 = getAttributeValue >>= return . LoginServiceAttribute getAttribute 29 = getAttributeValue >>= return . TerminationActionAttribute+getAttribute 40 = getAttributeValue >>= return . AcctStatusTypeAttribute+getAttribute 41 = getAttributeValue >>= return . AcctDelayTimeAttribute+getAttribute 42 = getAttributeValue >>= return . AcctInputOctetsAttribute+getAttribute 43 = getAttributeValue >>= return . AcctOutputOctetsAttribute+getAttribute 45 = getAttributeValue >>= return . AcctAuthenticAttribute+getAttribute 46 = getAttributeValue >>= return . AcctSessionTimeAttribute+getAttribute 47 = getAttributeValue >>= return . AcctInputPacketsAttribute+getAttribute 48 = getAttributeValue >>= return . AcctOutputPacketsAttribute+getAttribute 49 = getAttributeValue >>= return . AcctTerminateCauseAttribute+getAttribute 51 = getAttributeValue >>= return . AcctLinkCountAttribute getAttribute 61 = getAttributeValue >>= return . NASPortTypeAttribute getAttribute 52 = getAttributeValue >>= return . AccountInputGigawordsAttribute getAttribute 53 = getAttributeValue >>= return . AccountOutputGigawordsAttribute@@ -333,6 +355,18 @@ get = getEnum instance Binary TerminationAction where+ put = putEnum+ get = getEnum++instance Binary StatusType where+ put = putEnum+ get = getEnum++instance Binary Authentic where+ put = putEnum+ get = getEnum++instance Binary TerminateCause where put = putEnum get = getEnum
src/Network/RADIUS/Types.hs view
@@ -110,6 +110,18 @@ | FramedAppleTalkLinkAttribute { getFramedAppleTalkLinkAttribute :: Word32 } | FramedAppleTalkNetworkAttribute { getFramedAppleTalkNetworkAttribute :: Word32 } | FramedAppleTalkZoneAttribute { getFramedAppleTalkZoneAttribute :: ByteString }+ | AcctStatusTypeAttribute { getAcctStatusTypeAttribute :: StatusType }+ | AcctDelayTimeAttribute { getAcctDelayTimeAttribute :: Word32 }+ | AcctInputOctetsAttribute { getAcctInputOctetsAttribute :: Word32 }+ | AcctOutputOctetsAttribute { getAcctOutputOctetsAttribute :: Word32 }+ | AcctSessionIdAttribute { getAcctSessionIdAttribute :: ByteString }+ | AcctAuthenticAttribute { getAcctAuthenticAttribute :: Authentic }+ | AcctSessionTimeAttribute { getAcctSessionTimeAttribute :: Word32 }+ | AcctInputPacketsAttribute { getAcctInputPacketsAttribute :: Word32 }+ | AcctOutputPacketsAttribute { getAcctOutputPacketsAttribute :: Word32 }+ | AcctTerminateCauseAttribute { getAcctTerminateCauseAttribute :: TerminateCause }+ | AcctMultiSessionIdAttribute { getAcctMultiSessionIdAttribute :: ByteString }+ | AcctLinkCountAttribute { getAcctLinkCountAttribute :: Word32 } | CHAPChallengeAttribute { getCHAPChallengeAttribute :: ByteString } | NASPortTypeAttribute { getNASPortTypeAttribute :: NASPortType } | PortLimitAttribute { getPortLimitAttribute :: Word32 }@@ -221,6 +233,95 @@ data TerminationAction = DefaultTerminationAction | RADIUSRequestTerminationAction deriving (Show, Eq, Enum, Data)++data StatusType = Start | Stop | InterimUpdate | AccountingOn | AccountingOff | Failed+ deriving (Show, Eq, Data)++instance Enum StatusType where+ fromEnum Start = 1+ fromEnum Stop = 2+ fromEnum InterimUpdate = 3+ fromEnum AccountingOn = 7+ fromEnum AccountingOff = 8+ fromEnum Failed = 15+ toEnum 1 = Start+ toEnum 2 = Stop+ toEnum 3 = InterimUpdate+ toEnum 7 = AccountingOn+ toEnum 8 = AccountingOff+ toEnum 15 = Failed+ toEnum x = error $ "Invalid Acct-Status-Type attribute " ++ show x++data Authentic = Radius | Local | Remote+ deriving (Show, Eq, Data)++instance Enum Authentic where+ fromEnum Radius = 1+ fromEnum Local = 2+ fromEnum Remote = 3+ toEnum 1 = Radius+ toEnum 2 = Local+ toEnum 3 = Remote+ toEnum x = error $ "Invalid Acc-Authentic attribute " ++ show x++data TerminateCause = UserRequest+ | LostCarrier+ | LostService+ | IdleTimeout+ | SessionTimeout+ | AdminReset+ | AdminReboot+ | PortError+ | NASError+ | NASRequest+ | NASReboot+ | PortUnneeded+ | PortPreempted+ | PortSuspended+ | ServiceUnavailable+ | Callback+ | UserError+ | HostRequest+ deriving (Show, Eq, Data)++instance Enum TerminateCause where+ fromEnum UserRequest = 1+ fromEnum LostCarrier = 2+ fromEnum LostService = 3+ fromEnum IdleTimeout = 4+ fromEnum SessionTimeout = 5+ fromEnum AdminReset = 6+ fromEnum AdminReboot = 7+ fromEnum PortError = 8+ fromEnum NASError = 9+ fromEnum NASRequest = 10+ fromEnum NASReboot = 11+ fromEnum PortUnneeded = 12+ fromEnum PortPreempted = 13+ fromEnum PortSuspended = 14+ fromEnum ServiceUnavailable = 15+ fromEnum Callback = 16+ fromEnum UserError = 17+ fromEnum HostRequest = 18+ toEnum 1 = UserRequest+ toEnum 2 = LostCarrier+ toEnum 3 = LostService+ toEnum 4 = IdleTimeout+ toEnum 5 = SessionTimeout+ toEnum 6 = AdminReset+ toEnum 7 = AdminReboot+ toEnum 8 = PortError+ toEnum 9 = NASError+ toEnum 10 = NASRequest+ toEnum 11 = NASReboot+ toEnum 12 = PortUnneeded+ toEnum 13 = PortPreempted+ toEnum 14 = PortSuspended+ toEnum 15 = ServiceUnavailable+ toEnum 16 = Callback+ toEnum 17 = UserError+ toEnum 18 = HostRequest+ toEnum x = error $ "Invalid Acct-Terminate-Cause attribute " ++ show x data NASPortType = AsyncNASPort | SyncNASPort