diff --git a/src/python-lxc/lxc.c b/src/python-lxc/lxc.c index 4899339c6..e0123c097 100644 --- a/src/python-lxc/lxc.c +++ b/src/python-lxc/lxc.c @@ -25,6 +25,7 @@ #include "structmember.h" #include #include +#include #include #include @@ -718,6 +719,8 @@ static int lxc_attach_python_exec(void* _payload) return -1; } +static void lxc_attach_free_options(lxc_attach_options_t *options); + static lxc_attach_options_t *lxc_attach_parse_options(PyObject *kwds) { static char *kwlist[] = {"attach_flags", "namespaces", "personality", "initial_cwd", "uid", "gid", "env_policy", "extra_env_vars", "extra_keep_env", "stdin", "stdout", "stderr", NULL}; @@ -1170,14 +1173,31 @@ PyInit__lxc(void) /* add constants */ d = PyModule_GetDict(m); - PyDict_SetItemString(d, "LXC_ATTACH_KEEP_ENV", PyLong_FromLong(LXC_ATTACH_KEEP_ENV)); - PyDict_SetItemString(d, "LXC_ATTACH_CLEAR_ENV", PyLong_FromLong(LXC_ATTACH_CLEAR_ENV)); - PyDict_SetItemString(d, "LXC_ATTACH_MOVE_TO_CGROUP", PyLong_FromLong(LXC_ATTACH_MOVE_TO_CGROUP)); - PyDict_SetItemString(d, "LXC_ATTACH_DROP_CAPABILITIES", PyLong_FromLong(LXC_ATTACH_DROP_CAPABILITIES)); - PyDict_SetItemString(d, "LXC_ATTACH_SET_PERSONALITY", PyLong_FromLong(LXC_ATTACH_SET_PERSONALITY)); - PyDict_SetItemString(d, "LXC_ATTACH_APPARMOR", PyLong_FromLong(LXC_ATTACH_APPARMOR)); - PyDict_SetItemString(d, "LXC_ATTACH_REMOUNT_PROC_SYS", PyLong_FromLong(LXC_ATTACH_REMOUNT_PROC_SYS)); - PyDict_SetItemString(d, "LXC_ATTACH_DEFAULT", PyLong_FromLong(LXC_ATTACH_DEFAULT)); + + #define PYLXC_EXPORT_CONST(c) PyDict_SetItemString(d, #c, PyLong_FromLong(c)) + + /* environment variable handling */ + PYLXC_EXPORT_CONST(LXC_ATTACH_KEEP_ENV); + PYLXC_EXPORT_CONST(LXC_ATTACH_CLEAR_ENV); + + /* attach options */ + PYLXC_EXPORT_CONST(LXC_ATTACH_MOVE_TO_CGROUP); + PYLXC_EXPORT_CONST(LXC_ATTACH_DROP_CAPABILITIES); + PYLXC_EXPORT_CONST(LXC_ATTACH_SET_PERSONALITY); + PYLXC_EXPORT_CONST(LXC_ATTACH_APPARMOR); + PYLXC_EXPORT_CONST(LXC_ATTACH_REMOUNT_PROC_SYS); + PYLXC_EXPORT_CONST(LXC_ATTACH_DEFAULT); + + /* namespace flags (no other python lib exports this) */ + PYLXC_EXPORT_CONST(CLONE_NEWUTS); + PYLXC_EXPORT_CONST(CLONE_NEWIPC); + PYLXC_EXPORT_CONST(CLONE_NEWUSER); + PYLXC_EXPORT_CONST(CLONE_NEWPID); + PYLXC_EXPORT_CONST(CLONE_NEWNET); + PYLXC_EXPORT_CONST(CLONE_NEWNS); + + #undef PYLXC_EXPORT_CONST + return m; } diff --git a/src/python-lxc/lxc/__init__.py b/src/python-lxc/lxc/__init__.py index 50b40550c..aecbf8cb0 100644 --- a/src/python-lxc/lxc/__init__.py +++ b/src/python-lxc/lxc/__init__.py @@ -459,3 +459,9 @@ LXC_ATTACH_SET_PERSONALITY = _lxc.LXC_ATTACH_SET_PERSONALITY LXC_ATTACH_APPARMOR = _lxc.LXC_ATTACH_APPARMOR LXC_ATTACH_REMOUNT_PROC_SYS = _lxc.LXC_ATTACH_REMOUNT_PROC_SYS LXC_ATTACH_DEFAULT = _lxc.LXC_ATTACH_DEFAULT +CLONE_NEWUTS = _lxc.CLONE_NEWUTS +CLONE_NEWIPC = _lxc.CLONE_NEWIPC +CLONE_NEWUSER = _lxc.CLONE_NEWUSER +CLONE_NEWPID = _lxc.CLONE_NEWPID +CLONE_NEWNET = _lxc.CLONE_NEWNET +CLONE_NEWNS = _lxc.CLONE_NEWNS