1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
{- -*- Mode: haskell; -*-
Haskell LDAP Interface
Copyright (C) 2005 John Goerzen <jgoerzen@complete.org>
This code is under a 3-clause BSD license; see COPYING for details.
-}
{- |
Module : LDAP.Init
Copyright : Copyright (C) 2005 John Goerzen
License : BSD
Maintainer : John Goerzen,
Maintainer : jgoerzen\@complete.org
Stability : provisional
Portability: portable
Initialization and shutdown for LDAP programs
Written by John Goerzen, jgoerzen\@complete.org
-}
module LDAP.Init(ldapOpen,
ldapInit,
ldapSimpleBind)
where
import Foreign.Ptr
import Foreign.C.String
import LDAP.Types
import Foreign.C.Types
import LDAP.Utils
import Foreign.Marshal.Utils
#include <ldap.h>
{- | Preferred way to initialize a LDAP connection.
The default port is given in 'LDAP.Constants.ldapPort'.
Could throw IOError on failure. -}
ldapInit :: String -- ^ Host
-> LDAPInt -- ^ Port
-> IO LDAP -- ^ New LDAP Obj
ldapInit host port =
withCString host (\cs ->
with ((#{const LDAP_VERSION3})::LDAPInt) (\copt ->
do cld <- cldap_init cs port
rv <- fromLDAPPtr "ldapInit" (return cld)
ldap_set_option cld #{const LDAP_OPT_PROTOCOL_VERSION} (castPtr copt)
return rv
))
{- | Like 'ldapInit', but establish network connection immediately. -}
ldapOpen :: String -- ^ Host
-> LDAPInt -- ^ Port
-> IO LDAP -- ^ New LDAP Obj
ldapOpen host port =
withCString host (\cs ->
fromLDAPPtr "ldapOpen" $ cldap_open cs port)
{- | Bind to the remote server. -}
ldapSimpleBind :: LDAP -- ^ LDAP Object
-> String -- ^ DN (Distinguished Name)
-> String -- ^ Password
-> IO ()
ldapSimpleBind ld dn passwd =
withLDAPPtr ld (\ptr ->
withCString dn (\cdn ->
withCString passwd (\cpasswd ->
do checkLE "ldapSimpleBind" ld
(ldap_simple_bind_s ptr cdn cpasswd)
return ()
)))
foreign import ccall unsafe "ldap.h ldap_init"
cldap_init :: CString -> CInt -> IO LDAPPtr
foreign import ccall unsafe "ldap.h ldap_open"
cldap_open :: CString -> CInt -> IO LDAPPtr
foreign import ccall unsafe "ldap.h ldap_simple_bind_s"
ldap_simple_bind_s :: LDAPPtr -> CString -> CString -> IO LDAPInt
foreign import ccall unsafe "ldap.h ldap_set_option"
ldap_set_option :: LDAPPtr -> LDAPInt -> Ptr () -> IO LDAPInt
|