-- GENERATED by C->Haskell Compiler, version 0.28.8 Switcheroo, 25 November 2017 (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 qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp
import qualified Foreign.Storable as C2HSImp



import Foreign.C
import Foreign.Ptr
import Foreign.Storable



data CPamMessage = CPamMessage { CPamMessage -> CInt
msg_style :: CInt
                               , CPamMessage -> CString
msg :: CString
                               }
                               deriving (Int -> CPamMessage -> ShowS
[CPamMessage] -> ShowS
CPamMessage -> String
(Int -> CPamMessage -> ShowS)
-> (CPamMessage -> String)
-> ([CPamMessage] -> ShowS)
-> Show CPamMessage
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CPamMessage] -> ShowS
$cshowList :: [CPamMessage] -> ShowS
show :: CPamMessage -> String
$cshow :: CPamMessage -> String
showsPrec :: Int -> CPamMessage -> ShowS
$cshowsPrec :: Int -> CPamMessage -> ShowS
Show,CPamMessage -> CPamMessage -> Bool
(CPamMessage -> CPamMessage -> Bool)
-> (CPamMessage -> CPamMessage -> Bool) -> Eq CPamMessage
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CPamMessage -> CPamMessage -> Bool
$c/= :: CPamMessage -> CPamMessage -> Bool
== :: CPamMessage -> CPamMessage -> Bool
$c== :: CPamMessage -> CPamMessage -> Bool
Eq)

instance Storable CPamMessage where
    alignment :: CPamMessage -> Int
alignment CPamMessage
_ = CDouble -> Int
forall a. Storable a => a -> Int
alignment (CDouble
forall a. HasCallStack => a
undefined :: CDouble)
    sizeOf :: CPamMessage -> Int
sizeOf CPamMessage
_ = CInt -> Int
forall a. Storable a => a -> Int
sizeOf (CInt
forall a. HasCallStack => a
undefined :: CInt) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ CString -> Int
forall a. Storable a => a -> Int
sizeOf (CString
forall a. HasCallStack => a
undefined :: CString)
    peek :: Ptr CPamMessage -> IO CPamMessage
peek Ptr CPamMessage
p = CInt -> CString -> CPamMessage
CPamMessage (CInt -> CString -> CPamMessage)
-> IO CInt -> IO (CString -> CPamMessage)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((\Ptr CPamMessage
ptr -> do {Ptr CPamMessage -> Int -> IO CInt
forall a b. Storable a => Ptr b -> Int -> IO a
C2HSImp.peekByteOff Ptr CPamMessage
ptr Int
0 :: IO C2HSImp.CInt}) Ptr CPamMessage
p)
                         IO (CString -> CPamMessage) -> IO CString -> IO CPamMessage
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((\Ptr CPamMessage
ptr -> do {Ptr CPamMessage -> Int -> IO CString
forall a b. Storable a => Ptr b -> Int -> IO a
C2HSImp.peekByteOff Ptr CPamMessage
ptr Int
8 :: IO (C2HSImp.Ptr C2HSImp.CChar)}) Ptr CPamMessage
p)
    poke :: Ptr CPamMessage -> CPamMessage -> IO ()
poke Ptr CPamMessage
p (CPamMessage CInt
ms CString
m) = do
        (\Ptr CPamMessage
ptr CInt
val -> do {Ptr CPamMessage -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
C2HSImp.pokeByteOff Ptr CPamMessage
ptr Int
0 (CInt
val :: C2HSImp.CInt)}) Ptr CPamMessage
p CInt
ms
        (\Ptr CPamMessage
ptr CString
val -> do {Ptr CPamMessage -> Int -> CString -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
C2HSImp.pokeByteOff Ptr CPamMessage
ptr Int
8 (CString
val :: (C2HSImp.Ptr C2HSImp.CChar))}) Ptr CPamMessage
p CString
m

data CPamResponse = CPamResponse { CPamResponse -> CString
resp :: CString
                                 , CPamResponse -> CInt
resp_retcode :: CInt
                                 }
                                 deriving (Int -> CPamResponse -> ShowS
[CPamResponse] -> ShowS
CPamResponse -> String
(Int -> CPamResponse -> ShowS)
-> (CPamResponse -> String)
-> ([CPamResponse] -> ShowS)
-> Show CPamResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CPamResponse] -> ShowS
$cshowList :: [CPamResponse] -> ShowS
show :: CPamResponse -> String
$cshow :: CPamResponse -> String
showsPrec :: Int -> CPamResponse -> ShowS
$cshowsPrec :: Int -> CPamResponse -> ShowS
Show,CPamResponse -> CPamResponse -> Bool
(CPamResponse -> CPamResponse -> Bool)
-> (CPamResponse -> CPamResponse -> Bool) -> Eq CPamResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CPamResponse -> CPamResponse -> Bool
$c/= :: CPamResponse -> CPamResponse -> Bool
== :: CPamResponse -> CPamResponse -> Bool
$c== :: CPamResponse -> CPamResponse -> Bool
Eq)

instance Storable CPamResponse where
    alignment :: CPamResponse -> Int
alignment CPamResponse
_ = CDouble -> Int
forall a. Storable a => a -> Int
alignment (CDouble
forall a. HasCallStack => a
undefined :: CDouble)
    sizeOf :: CPamResponse -> Int
sizeOf CPamResponse
_ = CString -> Int
forall a. Storable a => a -> Int
sizeOf (CString
forall a. HasCallStack => a
undefined :: CString) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ CInt -> Int
forall a. Storable a => a -> Int
sizeOf (CInt
forall a. HasCallStack => a
undefined :: CInt)
    peek :: Ptr CPamResponse -> IO CPamResponse
peek Ptr CPamResponse
p = CString -> CInt -> CPamResponse
CPamResponse (CString -> CInt -> CPamResponse)
-> IO CString -> IO (CInt -> CPamResponse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((\Ptr CPamResponse
ptr -> do {Ptr CPamResponse -> Int -> IO CString
forall a b. Storable a => Ptr b -> Int -> IO a
C2HSImp.peekByteOff Ptr CPamResponse
ptr Int
0 :: IO (C2HSImp.Ptr C2HSImp.CChar)}) Ptr CPamResponse
p)
                          IO (CInt -> CPamResponse) -> IO CInt -> IO CPamResponse
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((\Ptr CPamResponse
ptr -> do {Ptr CPamResponse -> Int -> IO CInt
forall a b. Storable a => Ptr b -> Int -> IO a
C2HSImp.peekByteOff Ptr CPamResponse
ptr Int
8 :: IO C2HSImp.CInt}) Ptr CPamResponse
p)
    poke :: Ptr CPamResponse -> CPamResponse -> IO ()
poke Ptr CPamResponse
p (CPamResponse CString
r CInt
rc) = do
        (\Ptr CPamResponse
ptr CString
val -> do {Ptr CPamResponse -> Int -> CString -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
C2HSImp.pokeByteOff Ptr CPamResponse
ptr Int
0 (CString
val :: (C2HSImp.Ptr C2HSImp.CChar))}) Ptr CPamResponse
p CString
r
        (\Ptr CPamResponse
ptr CInt
val -> do {Ptr CPamResponse -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
C2HSImp.pokeByteOff Ptr CPamResponse
ptr Int
8 (CInt
val :: C2HSImp.CInt)}) Ptr CPamResponse
p CInt
rc

data CPamConv = CPamConv { CPamConv
-> FunPtr
     (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt)
conv :: FunPtr (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt)
                         , CPamConv -> Ptr ()
appdata_ptr :: Ptr ()
                         }
                         deriving (Int -> CPamConv -> ShowS
[CPamConv] -> ShowS
CPamConv -> String
(Int -> CPamConv -> ShowS)
-> (CPamConv -> String) -> ([CPamConv] -> ShowS) -> Show CPamConv
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CPamConv] -> ShowS
$cshowList :: [CPamConv] -> ShowS
show :: CPamConv -> String
$cshow :: CPamConv -> String
showsPrec :: Int -> CPamConv -> ShowS
$cshowsPrec :: Int -> CPamConv -> ShowS
Show, CPamConv -> CPamConv -> Bool
(CPamConv -> CPamConv -> Bool)
-> (CPamConv -> CPamConv -> Bool) -> Eq CPamConv
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CPamConv -> CPamConv -> Bool
$c/= :: CPamConv -> CPamConv -> Bool
== :: CPamConv -> CPamConv -> Bool
$c== :: CPamConv -> CPamConv -> Bool
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 :: CPamConv -> Int
alignment CPamConv
_ = CDouble -> Int
forall a. Storable a => a -> Int
alignment (CDouble
forall a. HasCallStack => a
undefined :: CDouble)
    sizeOf :: CPamConv -> Int
sizeOf CPamConv
_ = FunPtr () -> Int
forall a. Storable a => a -> Int
sizeOf (FunPtr ()
forall a. HasCallStack => a
undefined :: FunPtr ()) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Ptr () -> Int
forall a. Storable a => a -> Int
sizeOf (Ptr ()
forall a. HasCallStack => a
undefined :: Ptr ())
    peek :: Ptr CPamConv -> IO CPamConv
peek Ptr CPamConv
p = FunPtr (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt)
-> Ptr () -> CPamConv
CPamConv (FunPtr (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt)
 -> Ptr () -> CPamConv)
-> IO
     (FunPtr
        (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt))
-> IO (Ptr () -> CPamConv)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((\Ptr CPamConv
ptr -> do {Ptr CPamConv
-> Int
-> IO
     (FunPtr
        (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt))
forall a b. Storable a => Ptr b -> Int -> IO a
C2HSImp.peekByteOff Ptr CPamConv
ptr Int
0 :: IO (C2HSImp.FunPtr (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))))}) Ptr CPamConv
p)
                      IO (Ptr () -> CPamConv) -> IO (Ptr ()) -> IO CPamConv
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((\Ptr CPamConv
ptr -> do {Ptr CPamConv -> Int -> IO (Ptr ())
forall a b. Storable a => Ptr b -> Int -> IO a
C2HSImp.peekByteOff Ptr CPamConv
ptr Int
8 :: IO (C2HSImp.Ptr ())}) Ptr CPamConv
p)
    poke :: Ptr CPamConv -> CPamConv -> IO ()
poke Ptr CPamConv
p (CPamConv FunPtr (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt)
c Ptr ()
ap) = do
        (\Ptr CPamConv
ptr FunPtr (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt)
val -> do {Ptr CPamConv
-> Int
-> FunPtr
     (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt)
-> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
C2HSImp.pokeByteOff Ptr CPamConv
ptr Int
0 (FunPtr (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt)
val :: (C2HSImp.FunPtr (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt)))))))}) Ptr CPamConv
p FunPtr (CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> Ptr () -> IO CInt)
c
        (\Ptr CPamConv
ptr Ptr ()
val -> do {Ptr CPamConv -> Int -> Ptr () -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
C2HSImp.pokeByteOff Ptr CPamConv
ptr Int
8 (Ptr ()
val :: (C2HSImp.Ptr ()))}) Ptr CPamConv
p Ptr ()
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