about summary refs log tree commit diff stats
path: root/openbsd/__init__.py
blob: 88103705ebb6a836851c13a6a14c3beb42510261 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import sys
from cffi import FFI
from _openbsd import lib as _lib

__all__ = ["pledge", "unveil"]

_ffi = FFI()


def pledge(promises=None, execpromises=None):
    promises = _ffi.NULL if promises is None else _encode(promises)
    execpromises = _ffi.NULL if execpromises is None else _encode(execpromises)
    ret = _lib.pledge(promises, execpromises)
    if ret < 0:
        errno = _ffi.errno
        raise OSError(errno, _decode(_ffi.string(_lib.strerror(errno), 256)))


def unveil(path=None, permissions=None):
    path = _ffi.NULL if path is None else _encode(path)
    permissions = _ffi.NULL if permissions is None else _encode(permissions)
    ret = _lib.unveil(path, permissions)
    if ret < 0:
        errno = _ffi.errno
        raise OSError(errno, _decode(_ffi.string(_lib.strerror(errno), 256)))


if isinstance(b"openbsd", str):
    # Python 2
    def _encode(text):
        if isinstance(text, unicode):
            return text.encode("ascii")
        return text

    def _decode(text):
        return text
else:
    # Python 3
    def _encode(text):
        if isinstance(text, str):
            return text.encode("ascii")
        return text

    def _decode(text):
        return text.decode("ascii")