{-# LINE 1 "System/Linux/Capabilities.hsc" #-}
module System.Linux.Capabilities
( hasSysAdminCap
) where
import Foreign
import Foreign.C
import System.Posix (getProcessID)
hasSysAdminCap :: IO Bool
hasSysAdminCap =
flip testBit (21) <$> getCapabilities
{-# LINE 17 "System/Linux/Capabilities.hsc" #-}
getCapabilities :: IO Word64
getCapabilities =
allocaBytes ((8)) $ \hdrp ->
{-# LINE 21 "System/Linux/Capabilities.hsc" #-}
allocaBytes (2 * ((12))) $ \datap -> do
{-# LINE 22 "System/Linux/Capabilities.hsc" #-}
pid <- getProcessID
((\hsc_ptr -> pokeByteOff hsc_ptr 0)) hdrp ((537333798) :: Word32)
{-# LINE 24 "System/Linux/Capabilities.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 4)) hdrp (fromIntegral pid :: Word32)
{-# LINE 25 "System/Linux/Capabilities.hsc" #-}
throwErrnoIfMinus1_ "capget" $ c_capget hdrp datap
effective0 <- ((\hsc_ptr -> peekByteOff hsc_ptr 0)) datap :: IO Word32
{-# LINE 27 "System/Linux/Capabilities.hsc" #-}
let datap1 = datap `plusPtr` ((12))
{-# LINE 28 "System/Linux/Capabilities.hsc" #-}
effective1 <- ((\hsc_ptr -> peekByteOff hsc_ptr 0)) datap1 :: IO Word32
{-# LINE 29 "System/Linux/Capabilities.hsc" #-}
return (fromIntegral effective1 `unsafeShiftL` 32 .|. fromIntegral effective0)
data CapUserHeader
data CapUserData
foreign import ccall unsafe "sys/capability.h capget"
c_capget :: Ptr CapUserHeader -> Ptr CapUserData -> IO CInt