-- GENERATED by C->Haskell Compiler, version 0.16.0 Crystal Seed, 24 Jan 2009 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "src/System/Posix/PAM/Internals.chs" #-}{-# LANGUAGE CPP, ForeignFunctionInterface #-}
module System.Posix.PAM.Internals where

import Control.Applicative
import Foreign.C
import Foreign.Ptr
import Foreign.Storable


data CPamMessage = CPamMessage { msg_style :: CInt
                               , msg :: CString
                               }
                               deriving (Show,Eq)

instance Storable CPamMessage where
    alignment _ = alignment (undefined :: CDouble)
    sizeOf _ = sizeOf (undefined :: CInt) + sizeOf (undefined :: CString)
    peek p = CPamMessage <$> ((\ptr -> do {peekByteOff ptr 0 ::IO CInt}) p)
                         <*> ((\ptr -> do {peekByteOff ptr 4 ::IO (Ptr CChar)}) p)
    poke p (CPamMessage ms m) = do
        (\ptr val -> do {pokeByteOff ptr 0 (val::CInt)}) p ms
        (\ptr val -> do {pokeByteOff ptr 4 (val::(Ptr CChar))}) p m

data CPamResponse = CPamResponse { resp :: CString
                                 , resp_retcode :: CInt
                                 }
                                 deriving (Show,Eq)

instance Storable CPamResponse where
    alignment _ = alignment (undefined :: CDouble)
    sizeOf _ = sizeOf (undefined :: CString) + sizeOf (undefined :: CInt)
    peek p = CPamResponse <$> ((\ptr -> do {peekByteOff ptr 0 ::IO (Ptr CChar)}) p)
                          <*> ((\ptr -> do {peekByteOff ptr 4 ::IO CInt}) p)
    poke p (CPamResponse r rc) = do
        (\ptr val -> do {pokeByteOff ptr 0 (val::(Ptr CChar))}) p r
        (\ptr val -> do {pokeByteOff ptr 4 (val::CInt)}) p rc

data CPamConv = CPamConv { conv :: FunPtr (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt)
                         , appdata_ptr :: Ptr ()
                         }
                         deriving (Show, Eq)

type ConvFunc = CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt
foreign import ccall "wrapper" mkconvFunc :: ConvFunc -> IO (FunPtr ConvFunc)

instance Storable CPamConv where
    alignment _ = alignment (undefined :: CDouble)
    sizeOf _ = sizeOf (undefined :: FunPtr ()) + sizeOf (undefined :: Ptr ())
    peek p = CPamConv <$> ((\ptr -> do {peekByteOff ptr 0 ::IO (FunPtr (CInt -> ((Ptr (Ptr ())) -> ((Ptr (Ptr ())) -> ((Ptr ()) -> (IO CInt))))))}) p)
                      <*> ((\ptr -> do {peekByteOff ptr 4 ::IO (Ptr ())}) p)
    poke p (CPamConv c ap) = do
        (\ptr val -> do {pokeByteOff ptr 0 (val::(FunPtr (CInt -> ((Ptr (Ptr ())) -> ((Ptr (Ptr ())) -> ((Ptr ()) -> (IO CInt)))))))}) p c
        (\ptr val -> do {pokeByteOff ptr 4 (val::(Ptr ()))}) p ap

type CPamHandleT = ()

foreign import ccall "security/pam_appl.h pam_start" c_pam_start :: CString -> CString -> Ptr CPamConv -> Ptr (Ptr CPamHandleT) -> IO CInt
foreign import ccall "security/pam_appl.h pam_end" c_pam_end :: Ptr CPamHandleT -> CInt -> IO CInt
foreign import ccall "security/pam_appl.h pam_authenticate" c_pam_authenticate :: Ptr CPamHandleT -> CInt -> IO CInt
foreign import ccall "security/pam_appl.h pam_acct_mgmt" c_pam_acct_mgmt :: Ptr CPamHandleT -> CInt -> IO CInt