-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Haskell binding for C PAM API
--   
--   This package provides PAM interface for Haskell programs. See the
--   README on GitHub at <a>see the README on GitHub at
--   &lt;https://github.com/oscar-h64/pam-haskell#readme</a> for more
--   information.
@package pam
@version 0.2.0.0

module System.Posix.PAM.Internals
data CPamMessage
CPamMessage :: CInt -> CString -> CPamMessage
[msg_style] :: CPamMessage -> CInt
[msg] :: CPamMessage -> CString
data CPamResponse
CPamResponse :: CString -> CInt -> CPamResponse
[resp] :: CPamResponse -> CString
[resp_retcode] :: CPamResponse -> CInt
data CPamConv
CPamConv :: FunPtr (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt) -> Ptr () -> CPamConv
[conv] :: CPamConv -> FunPtr (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt)
[appdata_ptr] :: CPamConv -> Ptr ()
type ConvFunc = CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt
mkconvFunc :: ConvFunc -> IO (FunPtr ConvFunc)
type CPamHandleT = ()
c_pam_start :: CString -> CString -> Ptr CPamConv -> Ptr (Ptr CPamHandleT) -> IO CInt
c_pam_end :: Ptr CPamHandleT -> CInt -> IO CInt
c_pam_authenticate :: Ptr CPamHandleT -> CInt -> IO CInt
c_pam_acct_mgmt :: Ptr CPamHandleT -> CInt -> IO CInt
instance GHC.Classes.Eq System.Posix.PAM.Internals.CPamMessage
instance GHC.Show.Show System.Posix.PAM.Internals.CPamMessage
instance GHC.Classes.Eq System.Posix.PAM.Internals.CPamResponse
instance GHC.Show.Show System.Posix.PAM.Internals.CPamResponse
instance GHC.Classes.Eq System.Posix.PAM.Internals.CPamConv
instance GHC.Show.Show System.Posix.PAM.Internals.CPamConv
instance Foreign.Storable.Storable System.Posix.PAM.Internals.CPamConv
instance Foreign.Storable.Storable System.Posix.PAM.Internals.CPamResponse
instance Foreign.Storable.Storable System.Posix.PAM.Internals.CPamMessage

module System.Posix.PAM.Types
data PamMessage
PamMessage :: String -> PamStyle -> PamMessage
[pmString] :: PamMessage -> String
[pmStyle] :: PamMessage -> PamStyle
data PamStyle
PamPromptEchoOff :: PamStyle
PamPromptEchoOn :: PamStyle
PamErrorMsg :: PamStyle
PamTextInfo :: PamStyle

-- | 
--   <a>http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/adg-interface-of-app-expected.html#adg-pam_conv</a>
--   - resp_code member in C sturct is unused and should be set to zero,
--   that's why there is no code field in the haskell data type
data PamResponse
PamResponse :: String -> PamResponse
data PamRetCode
PamSuccess :: PamRetCode
PamRetCode :: Int -> PamRetCode
data PamFlag
PamSilent :: PamFlag
PamDisallowNullAuthTok :: PamFlag
PamEstablishCred :: PamFlag
PamDeleteCred :: PamFlag
PamReinitializeCred :: PamFlag
PamRefreshCred :: PamFlag
PamChangeExpiredAuthTok :: PamFlag
PamNone :: PamFlag
type PamConv = Ptr () -> [PamMessage] -> IO [PamResponse]
data PamHandle
PamHandle :: Ptr () -> FunPtr (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt) -> PamHandle
[cPamHandle] :: PamHandle -> Ptr ()
[cPamCallback] :: PamHandle -> FunPtr (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt)
instance GHC.Classes.Eq System.Posix.PAM.Types.PamStyle
instance GHC.Show.Show System.Posix.PAM.Types.PamStyle
instance GHC.Classes.Eq System.Posix.PAM.Types.PamMessage
instance GHC.Show.Show System.Posix.PAM.Types.PamMessage
instance GHC.Classes.Eq System.Posix.PAM.Types.PamResponse
instance GHC.Show.Show System.Posix.PAM.Types.PamResponse
instance GHC.Classes.Eq System.Posix.PAM.Types.PamRetCode
instance GHC.Show.Show System.Posix.PAM.Types.PamRetCode
instance GHC.Enum.Enum System.Posix.PAM.Types.PamFlag
instance GHC.Classes.Eq System.Posix.PAM.Types.PamFlag
instance GHC.Show.Show System.Posix.PAM.Types.PamFlag
instance GHC.Classes.Eq System.Posix.PAM.Types.PamHandle
instance GHC.Show.Show System.Posix.PAM.Types.PamHandle

module System.Posix.PAM.LowLevel

-- | <a>retCodeFromC</a> <tt>responseCode</tt> converts
--   <tt>responseCode</tt> from PAM to a PamRetCode
retCodeFromC :: CInt -> PamRetCode

-- | <a>retCodeToC</a> <tt>retCode</tt> converts <tt>retCode</tt> to the
--   corresponding integer used in the PAM C library
retCodeToC :: PamRetCode -> CInt
responseToC :: PamResponse -> IO CPamResponse
messageFromC :: CPamMessage -> IO PamMessage
cConv :: (Ptr () -> [PamMessage] -> IO [PamResponse]) -> CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt
pamStart :: String -> String -> (PamConv, Ptr ()) -> IO (PamHandle, PamRetCode)
pamEnd :: PamHandle -> PamRetCode -> IO PamRetCode
pamAuthenticate :: PamHandle -> PamFlag -> IO PamRetCode
pamAcctMgmt :: PamHandle -> PamFlag -> IO PamRetCode

module System.Posix.PAM

-- | <a>isSuccess</a> <tt>responseCode</tt> checks if <tt>responseCode</tt>
--   is equal to <a>PamSuccess</a>, i.e. checking if the account
--   check/authentication succeeded
isSuccess :: PamRetCode -> Bool

-- | <a>whenSuccess</a> <tt>responseCode action</tt> returns
--   <tt>action</tt> if <tt>responseCode</tt> is <a>PamSuccess</a>,
--   otherwise returns <tt>responseCode</tt>
whenSuccess :: MonadIO m => PamRetCode -> m PamRetCode -> m PamRetCode

-- | <a>authenticate</a> <tt>service user password</tt> attempts to
--   authenticate <tt>user</tt> and <tt>password</tt> with PAM using
--   <tt>service</tt> to determine which file in <i>etc</i>pam.d to use
authenticate :: MonadIO m => String -> String -> String -> m PamRetCode

-- | <a>checkAccount</a> <tt>service user</tt> checks if <tt>user</tt> is a
--   valid user. <tt>service</tt> is is the service name given to PAM (see
--   <a>authenticate</a>)
checkAccount :: MonadIO m => String -> String -> m PamRetCode

-- | <a>pamCodeToMessage</a> <tt>responseCode</tt> returns a description of
--   <tt>responseCode</tt> in the context of PAM
pamCodeToMessage :: PamRetCode -> String

-- | <a>pamCodeToMessage</a> <tt>responseCode</tt> returns the name of the
--   define used in C to represent <tt>responseCode</tt>
pamCodeToCDefine :: PamRetCode -> String

-- | <a>pamCodeDetails</a> <tt>responseCode</tt> returns a tuple of the
--   name of the C define and a description of <tt>responseCode</tt>
pamCodeDetails :: PamRetCode -> (String, String)
