packages feed

landlock-0.2.1.0: internal/System/Landlock/Hsc.hsc

module System.Landlock.Hsc (
  aT_FDCWD,

  o_PATH,
  o_RDONLY,
  o_DIRECTORY,
  o_NOFOLLOW,
  o_CLOEXEC,

  lANDLOCK_ACCESS_FS_EXECUTE,
  lANDLOCK_ACCESS_FS_WRITE_FILE,
  lANDLOCK_ACCESS_FS_READ_FILE,
  lANDLOCK_ACCESS_FS_READ_DIR,
  lANDLOCK_ACCESS_FS_REMOVE_DIR,
  lANDLOCK_ACCESS_FS_REMOVE_FILE,
  lANDLOCK_ACCESS_FS_MAKE_CHAR,
  lANDLOCK_ACCESS_FS_MAKE_DIR,
  lANDLOCK_ACCESS_FS_MAKE_REG,
  lANDLOCK_ACCESS_FS_MAKE_SOCK,
  lANDLOCK_ACCESS_FS_MAKE_FIFO,
  lANDLOCK_ACCESS_FS_MAKE_BLOCK,
  lANDLOCK_ACCESS_FS_MAKE_SYM,
  lANDLOCK_ACCESS_FS_REFER,
  lANDLOCK_ACCESS_FS_TRUNCATE,

  lANDLOCK_CREATE_RULESET_VERSION,

  U32,
  U64,
  Landlock_rule_type,

  pR_SET_NO_NEW_PRIVS,

  landlock_ruleset_attr_size,
  landlock_ruleset_attr_alignment,
  landlock_ruleset_attr_peek_handled_access_fs,
  landlock_ruleset_attr_poke_handled_access_fs,

  lANDLOCK_RULE_PATH_BENEATH,
  landlock_path_beneath_attr_size,
  landlock_path_beneath_attr_alignment,
  landlock_path_beneath_attr_peek_allowed_access,
  landlock_path_beneath_attr_poke_allowed_access,
  landlock_path_beneath_attr_peek_parent_fd,
  landlock_path_beneath_attr_poke_parent_fd,
) where

#define _GNU_SOURCE

#include <fcntl.h>
#include <stddef.h>
#include <sys/prctl.h>
#include <sys/types.h>

#include "hs-landlock.h"
#include "linux/landlock.h"

import Data.Int (Int32)
import Data.Word (Word32, Word64)
import Foreign.C.Types (CInt)
import Foreign.Ptr (Ptr)
import Foreign.Storable (peekByteOff, pokeByteOff)

aT_FDCWD :: CInt
aT_FDCWD = #{const AT_FDCWD}

o_PATH :: CInt
o_PATH = #{const O_PATH}

o_RDONLY :: CInt
o_RDONLY = #{const O_RDONLY}

o_DIRECTORY :: CInt
o_DIRECTORY = #{const O_DIRECTORY}

o_NOFOLLOW :: CInt
o_NOFOLLOW = #{const O_NOFOLLOW}

o_CLOEXEC :: CInt
o_CLOEXEC = #{const O_CLOEXEC}

lANDLOCK_ACCESS_FS_EXECUTE :: #{type __u64}
lANDLOCK_ACCESS_FS_EXECUTE = #{const LANDLOCK_ACCESS_FS_EXECUTE}

lANDLOCK_ACCESS_FS_WRITE_FILE :: #{type __u64}
lANDLOCK_ACCESS_FS_WRITE_FILE = #{const LANDLOCK_ACCESS_FS_WRITE_FILE}

lANDLOCK_ACCESS_FS_READ_FILE :: #{type __u64}
lANDLOCK_ACCESS_FS_READ_FILE = #{const LANDLOCK_ACCESS_FS_READ_FILE}

lANDLOCK_ACCESS_FS_READ_DIR :: #{type __u64}
lANDLOCK_ACCESS_FS_READ_DIR = #{const LANDLOCK_ACCESS_FS_READ_DIR}

lANDLOCK_ACCESS_FS_REMOVE_DIR :: #{type __u64}
lANDLOCK_ACCESS_FS_REMOVE_DIR = #{const LANDLOCK_ACCESS_FS_REMOVE_DIR}

lANDLOCK_ACCESS_FS_REMOVE_FILE :: #{type __u64}
lANDLOCK_ACCESS_FS_REMOVE_FILE = #{const LANDLOCK_ACCESS_FS_REMOVE_FILE}

lANDLOCK_ACCESS_FS_MAKE_CHAR :: #{type __u64}
lANDLOCK_ACCESS_FS_MAKE_CHAR = #{const LANDLOCK_ACCESS_FS_MAKE_CHAR}

lANDLOCK_ACCESS_FS_MAKE_DIR :: #{type __u64}
lANDLOCK_ACCESS_FS_MAKE_DIR = #{const LANDLOCK_ACCESS_FS_MAKE_DIR}

lANDLOCK_ACCESS_FS_MAKE_REG :: #{type __u64}
lANDLOCK_ACCESS_FS_MAKE_REG = #{const LANDLOCK_ACCESS_FS_MAKE_REG}

lANDLOCK_ACCESS_FS_MAKE_SOCK :: #{type __u64}
lANDLOCK_ACCESS_FS_MAKE_SOCK = #{const LANDLOCK_ACCESS_FS_MAKE_SOCK}

lANDLOCK_ACCESS_FS_MAKE_FIFO :: #{type __u64}
lANDLOCK_ACCESS_FS_MAKE_FIFO = #{const LANDLOCK_ACCESS_FS_MAKE_FIFO}

lANDLOCK_ACCESS_FS_MAKE_BLOCK :: #{type __u64}
lANDLOCK_ACCESS_FS_MAKE_BLOCK = #{const LANDLOCK_ACCESS_FS_MAKE_BLOCK}

lANDLOCK_ACCESS_FS_MAKE_SYM :: #{type __u64}
lANDLOCK_ACCESS_FS_MAKE_SYM = #{const LANDLOCK_ACCESS_FS_MAKE_SYM}

lANDLOCK_ACCESS_FS_REFER :: #{type __u64}
lANDLOCK_ACCESS_FS_REFER = #{const LANDLOCK_ACCESS_FS_REFER}

lANDLOCK_ACCESS_FS_TRUNCATE :: #{type __u64}
lANDLOCK_ACCESS_FS_TRUNCATE = #{const LANDLOCK_ACCESS_FS_TRUNCATE}

lANDLOCK_CREATE_RULESET_VERSION :: #{type __u32}
lANDLOCK_CREATE_RULESET_VERSION = #{const LANDLOCK_CREATE_RULESET_VERSION}

type U32 = #{type __u32}
type U64 = #{type __u64}

type Landlock_rule_type = #{type enum landlock_rule_type}

pR_SET_NO_NEW_PRIVS :: CInt
pR_SET_NO_NEW_PRIVS = #{const PR_SET_NO_NEW_PRIVS}

landlock_ruleset_attr_size :: Int
landlock_ruleset_attr_size = #{size struct landlock_ruleset_attr}

landlock_ruleset_attr_alignment :: Int
landlock_ruleset_attr_alignment = #{alignment struct landlock_ruleset_attr}

landlock_ruleset_attr_peek_handled_access_fs :: Ptr a -> IO #{type __u64}
landlock_ruleset_attr_peek_handled_access_fs =
  #{peek struct landlock_ruleset_attr, handled_access_fs}

landlock_ruleset_attr_poke_handled_access_fs :: Ptr a -> #{type __u64} -> IO ()
landlock_ruleset_attr_poke_handled_access_fs =
  #{poke struct landlock_ruleset_attr, handled_access_fs}

lANDLOCK_RULE_PATH_BENEATH :: #{type enum landlock_rule_type}
lANDLOCK_RULE_PATH_BENEATH = #{const LANDLOCK_RULE_PATH_BENEATH}

landlock_path_beneath_attr_size :: Int
landlock_path_beneath_attr_size = #{size struct landlock_path_beneath_attr}

landlock_path_beneath_attr_alignment :: Int
landlock_path_beneath_attr_alignment =
  #{alignment struct landlock_path_beneath_attr}

landlock_path_beneath_attr_peek_allowed_access :: Ptr a -> IO #{type __u64}
landlock_path_beneath_attr_peek_allowed_access =
  #{peek struct landlock_path_beneath_attr, allowed_access}

landlock_path_beneath_attr_peek_parent_fd :: Ptr a -> IO #{type __s32}
landlock_path_beneath_attr_peek_parent_fd =
  #{peek struct landlock_path_beneath_attr, parent_fd}

landlock_path_beneath_attr_poke_allowed_access ::
  Ptr a -> #{type __u64} -> IO ()
landlock_path_beneath_attr_poke_allowed_access =
  #{poke struct landlock_path_beneath_attr, allowed_access}

landlock_path_beneath_attr_poke_parent_fd :: Ptr a -> #{type __s32} -> IO ()
landlock_path_beneath_attr_poke_parent_fd =
  #{poke struct landlock_path_beneath_attr, parent_fd}