ldap-client 0.2.0 → 0.3.0
raw patch · 4 files changed
+43/−29 lines, 4 filesdep +failnew-uploaderPVP ok
version bump matches the API change (PVP)
Dependencies added: fail
API changes (from Hackage documentation)
- Ldap.Asn1.ToAsn1: instance Ldap.Asn1.ToAsn1.ToAsn1 a => Ldap.Asn1.ToAsn1.ToAsn1 (Data.List.NonEmpty.NonEmpty a)
- Ldap.Client: instance GHC.Exception.Exception Ldap.Client.Disconnect
- Ldap.Client: instance GHC.Exception.Exception Ldap.Client.WrappedIOError
- Ldap.Client.Internal: instance GHC.Exception.Exception Ldap.Client.Internal.ResponseError
- Ldap.Client.Search: instance Data.Semigroup.Semigroup (Ldap.Client.Search.Mod a)
+ Ldap.Asn1.FromAsn1: instance Control.Monad.Fail.MonadFail (Ldap.Asn1.FromAsn1.Parser s)
+ Ldap.Asn1.ToAsn1: instance Ldap.Asn1.ToAsn1.ToAsn1 a => Ldap.Asn1.ToAsn1.ToAsn1 (GHC.Base.NonEmpty a)
+ Ldap.Client: instance GHC.Exception.Type.Exception Ldap.Client.Disconnect
+ Ldap.Client: instance GHC.Exception.Type.Exception Ldap.Client.WrappedIOError
+ Ldap.Client.Internal: instance GHC.Exception.Type.Exception Ldap.Client.Internal.ResponseError
+ Ldap.Client.Search: instance GHC.Base.Semigroup (Ldap.Client.Search.Mod a)
- Ldap.Asn1.Type: And :: !(NonEmpty Filter) -> Filter
+ Ldap.Asn1.Type: And :: !NonEmpty Filter -> Filter
- Ldap.Asn1.Type: Attribute :: !AttributeDescription -> !(NonEmpty AttributeValue) -> Attribute
+ Ldap.Asn1.Type: Attribute :: !AttributeDescription -> !NonEmpty AttributeValue -> Attribute
- Ldap.Asn1.Type: BindResponse :: !LdapResult -> !(Maybe ByteString) -> ProtocolServerOp
+ Ldap.Asn1.Type: BindResponse :: !LdapResult -> !Maybe ByteString -> ProtocolServerOp
- Ldap.Asn1.Type: Control :: !LdapOid -> !Bool -> !(Maybe ByteString) -> Control
+ Ldap.Asn1.Type: Control :: !LdapOid -> !Bool -> !Maybe ByteString -> Control
- Ldap.Asn1.Type: ExtendedRequest :: !LdapOid -> !(Maybe ByteString) -> ProtocolClientOp
+ Ldap.Asn1.Type: ExtendedRequest :: !LdapOid -> !Maybe ByteString -> ProtocolClientOp
- Ldap.Asn1.Type: ExtendedResponse :: !LdapResult -> !(Maybe LdapOid) -> !(Maybe ByteString) -> ProtocolServerOp
+ Ldap.Asn1.Type: ExtendedResponse :: !LdapResult -> !Maybe LdapOid -> !Maybe ByteString -> ProtocolServerOp
- Ldap.Asn1.Type: IntermediateResponse :: !(Maybe LdapOid) -> !(Maybe ByteString) -> ProtocolServerOp
+ Ldap.Asn1.Type: IntermediateResponse :: !Maybe LdapOid -> !Maybe ByteString -> ProtocolServerOp
- Ldap.Asn1.Type: LdapMessage :: !Id -> !op -> !(Maybe Controls) -> LdapMessage op
+ Ldap.Asn1.Type: LdapMessage :: !Id -> !op -> !Maybe Controls -> LdapMessage op
- Ldap.Asn1.Type: LdapResult :: !ResultCode -> !LdapDn -> !LdapString -> !(Maybe ReferralUris) -> LdapResult
+ Ldap.Asn1.Type: LdapResult :: !ResultCode -> !LdapDn -> !LdapString -> !Maybe ReferralUris -> LdapResult
- Ldap.Asn1.Type: MatchingRuleAssertion :: !(Maybe MatchingRuleId) -> !(Maybe AttributeDescription) -> !AssertionValue -> !Bool -> MatchingRuleAssertion
+ Ldap.Asn1.Type: MatchingRuleAssertion :: !Maybe MatchingRuleId -> !Maybe AttributeDescription -> !AssertionValue -> !Bool -> MatchingRuleAssertion
- Ldap.Asn1.Type: ModifyDnRequest :: !LdapDn -> !RelativeLdapDn -> !Bool -> !(Maybe LdapDn) -> ProtocolClientOp
+ Ldap.Asn1.Type: ModifyDnRequest :: !LdapDn -> !RelativeLdapDn -> !Bool -> !Maybe LdapDn -> ProtocolClientOp
- Ldap.Asn1.Type: Or :: !(NonEmpty Filter) -> Filter
+ Ldap.Asn1.Type: Or :: !NonEmpty Filter -> Filter
- Ldap.Asn1.Type: ReferralUris :: (NonEmpty Uri) -> ReferralUris
+ Ldap.Asn1.Type: ReferralUris :: NonEmpty Uri -> ReferralUris
- Ldap.Asn1.Type: Sasl :: !SaslMechanism -> !(Maybe Text) -> AuthenticationChoice
+ Ldap.Asn1.Type: Sasl :: !SaslMechanism -> !Maybe Text -> AuthenticationChoice
- Ldap.Asn1.Type: SearchResultReference :: !(NonEmpty Uri) -> ProtocolServerOp
+ Ldap.Asn1.Type: SearchResultReference :: !NonEmpty Uri -> ProtocolServerOp
- Ldap.Asn1.Type: SubstringFilter :: !AttributeDescription -> !(NonEmpty Substring) -> SubstringFilter
+ Ldap.Asn1.Type: SubstringFilter :: !AttributeDescription -> !NonEmpty Substring -> SubstringFilter
- Ldap.Asn1.Type: [ldapMessageControls] :: LdapMessage op -> !(Maybe Controls)
+ Ldap.Asn1.Type: [ldapMessageControls] :: LdapMessage op -> !Maybe Controls
- Ldap.Client: And :: !(NonEmpty Filter) -> Filter
+ Ldap.Client: And :: !NonEmpty Filter -> Filter
- Ldap.Client: Or :: !(NonEmpty Filter) -> Filter
+ Ldap.Client: Or :: !NonEmpty Filter -> Filter
- Ldap.Client: SearchEntry :: !Dn -> !(AttrList []) -> SearchEntry
+ Ldap.Client: SearchEntry :: !Dn -> !AttrList [] -> SearchEntry
- Ldap.Client: data NonEmpty a :: * -> *
+ Ldap.Client: data NonEmpty a
- Ldap.Client: data PortNumber :: *
+ Ldap.Client: data PortNumber
- Ldap.Client.Internal: New :: !Request -> !(TMVar (NonEmpty ProtocolServerOp)) -> ClientMessage
+ Ldap.Client.Internal: New :: !Request -> !TMVar (NonEmpty ProtocolServerOp) -> ClientMessage
- Ldap.Client.Internal: data PortNumber :: *
+ Ldap.Client.Internal: data PortNumber
- Ldap.Client.Search: And :: !(NonEmpty Filter) -> Filter
+ Ldap.Client.Search: And :: !NonEmpty Filter -> Filter
- Ldap.Client.Search: Or :: !(NonEmpty Filter) -> Filter
+ Ldap.Client.Search: Or :: !NonEmpty Filter -> Filter
- Ldap.Client.Search: SearchEntry :: !Dn -> !(AttrList []) -> SearchEntry
+ Ldap.Client.Search: SearchEntry :: !Dn -> !AttrList [] -> SearchEntry
Files
- README.markdown +18/−18
- ldap-client.cabal +12/−11
- src/Ldap/Asn1/FromAsn1.hs +8/−0
- src/Ldap/Client/Internal.hs +5/−0
README.markdown view
@@ -1,27 +1,27 @@ ldap-client =========== [](https://hackage.haskell.org/package/ldap-client)-[](https://travis-ci.org/supki/ldap-client)+[](https://travis-ci.org/alasconnect/ldap-client) This library implements (the parts of) [RFC 4511][rfc4511] - Feature | RFC Section | Support-:--------------------------- |:---------------:|:-----------:-Bind Operation | [4.2][4.2] | ✔-Unbind Operation | [4.3][4.3] | ✔-Unsolicited Notification | [4.4][4.4] | ✔-Notice of Disconnection | [4.4.1][4.4.1] | ✔-Search Operation | [4.5][4.5] | ✔\*-Modify Operation | [4.6][4.6] | ✔-Add Operation | [4.7][4.7] | ✔-Delete Operation | [4.8][4.8] | ✔-Modify DN Operation | [4.9][4.9] | ✔-Compare Operation | [4.10][4.10] | ✔-Abandon Operation | [4.11][4.11] | ✘-Extended Operation | [4.12][4.12] | ✔-IntermediateResponse Message | [4.13][4.13] | ✔-StartTLS Operation | [4.14][4.14] | ✔†-LDAP over TLS | - | ✔+| Feature | RFC Section | Support+|:---------------------------- |:---------------:|:-----------:+| Bind Operation | [4.2][4.2] | ✔+| Unbind Operation | [4.3][4.3] | ✔+| Unsolicited Notification | [4.4][4.4] | ✔+| Notice of Disconnection | [4.4.1][4.4.1] | ✔+| Search Operation | [4.5][4.5] | ✔\*+| Modify Operation | [4.6][4.6] | ✔+| Add Operation | [4.7][4.7] | ✔+| Delete Operation | [4.8][4.8] | ✔+| Modify DN Operation | [4.9][4.9] | ✔+| Compare Operation | [4.10][4.10] | ✔+| Abandon Operation | [4.11][4.11] | ✘+| Extended Operation | [4.12][4.12] | ✔+| IntermediateResponse Message | [4.13][4.13] | ✔+| StartTLS Operation | [4.14][4.14] | ✔†+| LDAP over TLS | - | ✔ \* The `:dn` thing is unsupported in Extensible matches † Only serves as an example of Extended Operation. It's useless for all practical purposes as it does not actually enable TLS. In other words, use LDAP over TLS instead.
ldap-client.cabal view
@@ -1,30 +1,30 @@ name: ldap-client-version: 0.2.0+version: 0.3.0 synopsis: Pure Haskell LDAP Client Library description: Pure Haskell LDAP client library implementing (the parts of) RFC 4511.-homepage: https://supki.github.io/ldap-client+homepage: https://github.com/alasconnect/ldap-client license: BSD2 license-file: LICENSE-author: Matvey Aksenov-maintainer: matvey.aksenov@gmail.com-copyright: 2015 Matvey Aksenov+author: Matvey Aksenov, AlasConnect LLC+maintainer: matvey.aksenov@gmail.com, software@alasconnect.com+copyright: 2015 Matvey Aksenov, 2019 AlasConnect LLC category: Network build-type: Simple cabal-version: >= 1.10 tested-with:- GHC == 7.6.3- , GHC == 7.8.4- , GHC == 7.10.1- , GHC == 8.0.1+ GHC == 8.0.1+ , GHC == 8.2.2+ , GHC == 8.4.4+ , GHC == 8.6.5 extra-source-files: README.markdown CHANGELOG.markdown source-repository head type: git- location: git@github.com:supki/ldap-client- tag: 0.2.0+ location: git@github.com:alasconnect/ldap-client+ tag: 0.3.0 library ghc-options:@@ -57,6 +57,7 @@ , bytestring , connection >= 0.2 , containers+ , fail , network >= 2.6 , semigroups >= 0.16 , stm
src/Ldap/Asn1/FromAsn1.hs view
@@ -11,6 +11,9 @@ import Control.Applicative (Applicative(..), Alternative(..), liftA2, optional) #endif import Control.Monad (MonadPlus(..), (>=>), guard)+#if __GLASGOW_HASKELL__ >= 86+import Control.Monad.Fail (MonadFail, fail)+#endif import Data.ASN1.Types (ASN1) import qualified Data.ASN1.Types as Asn1 import Data.Foldable (asum)@@ -415,6 +418,11 @@ mzero = Parser (\_ -> mzero) Parser ma `mplus` Parser mb = Parser (\s -> ma s `mplus` mb s)++#if __GLASGOW_HASKELL__ >= 86+instance MonadFail (Parser s) where+ fail _ = mzero+#endif parse :: Parser s a -> s -> Maybe (s, a) parse = unParser
src/Ldap/Client/Internal.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE NamedFieldPuns #-} module Ldap.Client.Internal@@ -35,7 +36,11 @@ import Data.List.NonEmpty (NonEmpty) import Data.Text (Text) import Data.Typeable (Typeable)+#if __GLASGOW_HASKELL__ >= 84+import Network.Socket (PortNumber)+#else import Network (PortNumber)+#endif import Network.Connection (TLSSettings) import qualified Ldap.Asn1.Type as Type