From ab147f752ccf1e2ed765ed025e3d0c6cc899e05a Mon Sep 17 00:00:00 2001 From: mdw Date: Fri, 24 Jun 2005 11:52:23 +0000 Subject: [PATCH] Add build system. Fix import. --- MANIFEST.in | 1 + Makefile | 24 ++ checkpath.c | 1002 -------------------------------------------------------- checkpath.pyx~ | 14 - checkpath.so | Bin 69051 -> 0 bytes setup.py | 67 ++++ test.py | 12 - test.py~ | 5 - 8 files changed, 92 insertions(+), 1033 deletions(-) create mode 100644 MANIFEST.in create mode 100644 Makefile delete mode 100644 checkpath.c delete mode 100644 checkpath.pyx~ delete mode 100755 checkpath.so create mode 100644 setup.py delete mode 100644 test.py delete mode 100644 test.py~ diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..409b7fd --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +include Makefile MANIFEST MANIFEST.in checkpath.pyx diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e414f7b --- /dev/null +++ b/Makefile @@ -0,0 +1,24 @@ +## Makefile + +PYTHON = python +PYREXC = pyrexc +prefix = /usr/local + +all: setup.py checkpath.c + $(PYTHON) setup.py build + +clean: setup.py + $(PYTHON) setup.py clean + rm -rf build checkpath.c + +checkpath.c: checkpath.pyx + pyrexc -o $@.new checkpath.pyx + mv $@.new $@ + +dist: setup.py checkpath.c + $(PYTHON) setup.py sdist + +install: setup.py checkpath.c + $(PYTHON) setup.py install --prefix $(prefix) + +.PHONY: all clean dist install diff --git a/checkpath.c b/checkpath.c deleted file mode 100644 index cc3afe3..0000000 --- a/checkpath.c +++ /dev/null @@ -1,1002 +0,0 @@ -/* Generated by Pyrex 0.9.3 on Thu Jun 9 16:58:27 2005 */ - -#include "Python.h" -#include "structmember.h" -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#include "checkpath.h" - - -typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/ -typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/ -static PyObject *__Pyx_UnpackItem(PyObject *, int); /*proto*/ -static int __Pyx_EndUnpack(PyObject *, int); /*proto*/ -static int __Pyx_PrintItem(PyObject *); /*proto*/ -static int __Pyx_PrintNewline(void); /*proto*/ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ -static void __Pyx_ReRaise(void); /*proto*/ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/ -static PyObject *__Pyx_GetExcValue(void); /*proto*/ -static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name); /*proto*/ -static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ -static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], int nargs, PyObject **args2, PyObject **kwds2); /*proto*/ -static void __Pyx_WriteUnraisable(char *name); /*proto*/ -static void __Pyx_AddTraceback(char *funcname); /*proto*/ -static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size); /*proto*/ -static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/ -static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/ -static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/ -static int __Pyx_InternStrings(__Pyx_InternTabEntry *t); /*proto*/ -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ -static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ - -static PyObject *__pyx_m; -static PyObject *__pyx_b; -static int __pyx_lineno; -static char *__pyx_filename; -staticforward char **__pyx_f; - -/* Declarations from checkpath */ - -staticforward PyTypeObject __pyx_type_9checkpath_CheckPath; - -struct __pyx_obj_9checkpath_CheckPath { - PyObject_HEAD - struct checkpath cp; -}; - -static PyTypeObject *__pyx_ptype_9checkpath_CheckPath = 0; -static void (__pyx_f_9checkpath_cp_report(unsigned int ,int ,char (*),char (*),void (*))); /*proto*/ - -/* Implementation of checkpath */ - -static PyObject *__pyx_n_ERROR; -static PyObject *__pyx_n_WRWORLD; -static PyObject *__pyx_n_WRGRP; -static PyObject *__pyx_n_WROTHGRP; -static PyObject *__pyx_n_WROTHUSR; -static PyObject *__pyx_n_PROBLEMS; -static PyObject *__pyx_n_SYMLINK; -static PyObject *__pyx_n_REPORT; -static PyObject *__pyx_n_STICKYOK; - -static PyObject *__pyx_n_report; - -static char (__pyx_k1[]) = ""; - -static void __pyx_f_9checkpath_cp_report(unsigned int __pyx_v_what,int __pyx_v_verb,char (*__pyx_v_path),char (*__pyx_v_msg),void (*__pyx_v_arg)) { - PyObject *__pyx_v_cp; - PyObject *__pyx_1 = 0; - int __pyx_2; - PyObject *__pyx_3 = 0; - PyObject *__pyx_4 = 0; - PyObject *__pyx_5 = 0; - PyObject *__pyx_6 = 0; - PyObject *__pyx_7 = 0; - __pyx_v_cp = Py_None; Py_INCREF(__pyx_v_cp); - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":44 */ - __pyx_1 = (PyObject *)__pyx_v_arg; - Py_INCREF(__pyx_1); - Py_DECREF(__pyx_v_cp); - __pyx_v_cp = __pyx_1; - __pyx_1 = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":45 */ - __pyx_2 = (__pyx_v_msg == 0); - if (__pyx_2) { - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":46 */ - __pyx_v_msg = __pyx_k1; - goto __pyx_L2; - } - __pyx_L2:; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":47 */ - __pyx_1 = PyObject_GetAttr(__pyx_v_cp, __pyx_n_report); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;} - __pyx_3 = PyInt_FromLong(__pyx_v_what); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;} - __pyx_4 = PyInt_FromLong(__pyx_v_verb); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;} - __pyx_5 = PyString_FromString(__pyx_v_path); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;} - __pyx_6 = PyString_FromString(__pyx_v_msg); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;} - __pyx_7 = PyTuple_New(4); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_7, 0, __pyx_3); - PyTuple_SET_ITEM(__pyx_7, 1, __pyx_4); - PyTuple_SET_ITEM(__pyx_7, 2, __pyx_5); - PyTuple_SET_ITEM(__pyx_7, 3, __pyx_6); - __pyx_3 = 0; - __pyx_4 = 0; - __pyx_5 = 0; - __pyx_6 = 0; - __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_7); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_7); __pyx_7 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_3); - Py_XDECREF(__pyx_4); - Py_XDECREF(__pyx_5); - Py_XDECREF(__pyx_6); - Py_XDECREF(__pyx_7); - __Pyx_WriteUnraisable("checkpath.cp_report"); - __pyx_L0:; - Py_DECREF(__pyx_v_cp); -} - -static int __pyx_f_9checkpath_9CheckPath___init__(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_f_9checkpath_9CheckPath___init__(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds) { - int __pyx_r; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return -1; - Py_INCREF(__pyx_v_me); - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":52 */ - ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_uid = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":53 */ - ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_gids = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":54 */ - ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_verbose = 1; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":55 */ - ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_what = CP_PROBLEMS; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":56 */ - ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_report = __pyx_f_9checkpath_cp_report; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":57 */ - ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_arg = ((void (*))__pyx_v_me); - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":58 */ - checkpath_setids((&((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp)); - - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("checkpath.CheckPath.__init__"); - __pyx_r = -1; - __pyx_L0:; - Py_DECREF(__pyx_v_me); - return __pyx_r; -} - -static PyObject *__pyx_f_9checkpath_9CheckPath_setids(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_9checkpath_9CheckPath_setids(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_r; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0; - Py_INCREF(__pyx_v_me); - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":60 */ - checkpath_setids((&((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp)); - - __pyx_r = Py_None; Py_INCREF(__pyx_r); - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("checkpath.CheckPath.setids"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_me); - return __pyx_r; -} - -static PyObject *__pyx_f_9checkpath_9CheckPath_3uid___get__(PyObject *__pyx_v_me); /*proto*/ -static PyObject *__pyx_f_9checkpath_9CheckPath_3uid___get__(PyObject *__pyx_v_me) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - Py_INCREF(__pyx_v_me); - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":63 */ - __pyx_1 = PyInt_FromLong(((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_uid); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(__pyx_r); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("checkpath.CheckPath.uid.__get__"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_me); - return __pyx_r; -} - -static int __pyx_f_9checkpath_9CheckPath_3uid___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val); /*proto*/ -static int __pyx_f_9checkpath_9CheckPath_3uid___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val) { - int __pyx_r; - uid_t __pyx_1; - Py_INCREF(__pyx_v_me); - Py_INCREF(__pyx_v_val); - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":65 */ - __pyx_1 = PyInt_AsLong(__pyx_v_val); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; goto __pyx_L1;} - ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_uid = __pyx_1; - - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("checkpath.CheckPath.uid.__set__"); - __pyx_r = -1; - __pyx_L0:; - Py_DECREF(__pyx_v_me); - Py_DECREF(__pyx_v_val); - return __pyx_r; -} - -static PyObject *__pyx_f_9checkpath_9CheckPath_4gids___get__(PyObject *__pyx_v_me); /*proto*/ -static PyObject *__pyx_f_9checkpath_9CheckPath_4gids___get__(PyObject *__pyx_v_me) { - PyObject *__pyx_v_g; - PyObject *__pyx_v_i; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - long __pyx_2; - int __pyx_3; - int __pyx_4; - Py_INCREF(__pyx_v_me); - __pyx_v_g = Py_None; Py_INCREF(__pyx_v_g); - __pyx_v_i = Py_None; Py_INCREF(__pyx_v_i); - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":68 */ - __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; goto __pyx_L1;} - Py_DECREF(__pyx_v_g); - __pyx_v_g = __pyx_1; - __pyx_1 = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":69 */ - __pyx_3 = ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_gids; - for (__pyx_2 = 0; __pyx_2 < __pyx_3; ++__pyx_2) { - __pyx_1 = PyInt_FromLong(__pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; goto __pyx_L1;} - Py_DECREF(__pyx_v_i); - __pyx_v_i = __pyx_1; - __pyx_1 = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":70 */ - __pyx_4 = PyInt_AsLong(__pyx_v_i); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; goto __pyx_L1;} - __pyx_1 = PyInt_FromLong((((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_gid[__pyx_4])); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_g, __pyx_v_i, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_L2:; - } - __pyx_L3:; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":71 */ - Py_INCREF(__pyx_v_g); - __pyx_r = __pyx_v_g; - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(__pyx_r); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("checkpath.CheckPath.gids.__get__"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_g); - Py_DECREF(__pyx_v_i); - Py_DECREF(__pyx_v_me); - return __pyx_r; -} - -static PyObject *__pyx_n_len; -static PyObject *__pyx_n_TypeError; - -static PyObject *__pyx_k2p; - -static char (__pyx_k2[]) = "too many groups"; - -static int __pyx_f_9checkpath_9CheckPath_4gids___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val); /*proto*/ -static int __pyx_f_9checkpath_9CheckPath_4gids___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val) { - PyObject *__pyx_v_i; - int __pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - int __pyx_4; - long __pyx_5; - long __pyx_6; - gid_t __pyx_7; - Py_INCREF(__pyx_v_me); - Py_INCREF(__pyx_v_val); - __pyx_v_i = Py_None; Py_INCREF(__pyx_v_i); - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":73 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; goto __pyx_L1;} - Py_INCREF(__pyx_v_val); - PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_val); - __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyInt_FromLong((NGROUPS_MAX + 1)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; goto __pyx_L1;} - if (PyObject_Cmp(__pyx_3, __pyx_1, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; goto __pyx_L1;} - __pyx_4 = __pyx_4 >= 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - if (__pyx_4) { - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":74 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_TypeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_k2p, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":75 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; goto __pyx_L1;} - __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; goto __pyx_L1;} - Py_INCREF(__pyx_v_val); - PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_val); - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_6 = PyInt_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - for (__pyx_5 = 0; __pyx_5 < __pyx_6; ++__pyx_5) { - __pyx_3 = PyInt_FromLong(__pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; goto __pyx_L1;} - Py_DECREF(__pyx_v_i); - __pyx_v_i = __pyx_3; - __pyx_3 = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":76 */ - __pyx_1 = PyObject_GetItem(__pyx_v_val, __pyx_v_i); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; goto __pyx_L1;} - __pyx_7 = PyInt_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_4 = PyInt_AsLong(__pyx_v_i); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; goto __pyx_L1;} - (((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_gid[__pyx_4]) = __pyx_7; - __pyx_L3:; - } - __pyx_L4:; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":77 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; goto __pyx_L1;} - Py_INCREF(__pyx_v_val); - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_val); - __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_4 = PyInt_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_gids = __pyx_4; - - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("checkpath.CheckPath.gids.__set__"); - __pyx_r = -1; - __pyx_L0:; - Py_DECREF(__pyx_v_i); - Py_DECREF(__pyx_v_me); - Py_DECREF(__pyx_v_val); - return __pyx_r; -} - -static PyObject *__pyx_f_9checkpath_9CheckPath_7verbose___get__(PyObject *__pyx_v_me); /*proto*/ -static PyObject *__pyx_f_9checkpath_9CheckPath_7verbose___get__(PyObject *__pyx_v_me) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - Py_INCREF(__pyx_v_me); - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":80 */ - __pyx_1 = PyInt_FromLong(((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_verbose); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(__pyx_r); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("checkpath.CheckPath.verbose.__get__"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_me); - return __pyx_r; -} - -static int __pyx_f_9checkpath_9CheckPath_7verbose___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val); /*proto*/ -static int __pyx_f_9checkpath_9CheckPath_7verbose___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val) { - int __pyx_r; - int __pyx_1; - Py_INCREF(__pyx_v_me); - Py_INCREF(__pyx_v_val); - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":82 */ - __pyx_1 = PyInt_AsLong(__pyx_v_val); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; goto __pyx_L1;} - ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_verbose = __pyx_1; - - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("checkpath.CheckPath.verbose.__set__"); - __pyx_r = -1; - __pyx_L0:; - Py_DECREF(__pyx_v_me); - Py_DECREF(__pyx_v_val); - return __pyx_r; -} - -static PyObject *__pyx_f_9checkpath_9CheckPath_4what___get__(PyObject *__pyx_v_me); /*proto*/ -static PyObject *__pyx_f_9checkpath_9CheckPath_4what___get__(PyObject *__pyx_v_me) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - Py_INCREF(__pyx_v_me); - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":85 */ - __pyx_1 = PyInt_FromLong(((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_what); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(__pyx_r); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("checkpath.CheckPath.what.__get__"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_me); - return __pyx_r; -} - -static int __pyx_f_9checkpath_9CheckPath_4what___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val); /*proto*/ -static int __pyx_f_9checkpath_9CheckPath_4what___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val) { - int __pyx_r; - unsigned int __pyx_1; - Py_INCREF(__pyx_v_me); - Py_INCREF(__pyx_v_val); - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":87 */ - __pyx_1 = PyInt_AsLong(__pyx_v_val); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; goto __pyx_L1;} - ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_what = __pyx_1; - - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("checkpath.CheckPath.what.__set__"); - __pyx_r = -1; - __pyx_L0:; - Py_DECREF(__pyx_v_me); - Py_DECREF(__pyx_v_val); - return __pyx_r; -} - -static PyObject *__pyx_f_9checkpath_9CheckPath_check(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_9checkpath_9CheckPath_check(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_path = 0; - PyObject *__pyx_r; - char (*__pyx_1); - int __pyx_2; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"path",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_path)) return 0; - Py_INCREF(__pyx_v_me); - Py_INCREF(__pyx_v_path); - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":89 */ - __pyx_1 = PyString_AsString(__pyx_v_path); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; goto __pyx_L1;} - __pyx_2 = checkpath(__pyx_1,(&((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp)); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; goto __pyx_L1;} - __pyx_3 = PyInt_FromLong(__pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; goto __pyx_L1;} - __pyx_r = __pyx_3; - __pyx_3 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(__pyx_r); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("checkpath.CheckPath.check"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_me); - Py_DECREF(__pyx_v_path); - return __pyx_r; -} - -static PyObject *__pyx_f_9checkpath_9CheckPath_report(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_9checkpath_9CheckPath_report(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_what = 0; - PyObject *__pyx_v_verb = 0; - PyObject *__pyx_v_path = 0; - PyObject *__pyx_v_msg = 0; - PyObject *__pyx_r; - static char *__pyx_argnames[] = {"what","verb","path","msg",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OOOO", __pyx_argnames, &__pyx_v_what, &__pyx_v_verb, &__pyx_v_path, &__pyx_v_msg)) return 0; - Py_INCREF(__pyx_v_me); - Py_INCREF(__pyx_v_what); - Py_INCREF(__pyx_v_verb); - Py_INCREF(__pyx_v_path); - Py_INCREF(__pyx_v_msg); - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":91 */ - - __pyx_r = Py_None; Py_INCREF(__pyx_r); - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("checkpath.CheckPath.report"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_me); - Py_DECREF(__pyx_v_what); - Py_DECREF(__pyx_v_verb); - Py_DECREF(__pyx_v_path); - Py_DECREF(__pyx_v_msg); - return __pyx_r; -} - -static __Pyx_InternTabEntry __pyx_intern_tab[] = { - {&__pyx_n_ERROR, "ERROR"}, - {&__pyx_n_PROBLEMS, "PROBLEMS"}, - {&__pyx_n_REPORT, "REPORT"}, - {&__pyx_n_STICKYOK, "STICKYOK"}, - {&__pyx_n_SYMLINK, "SYMLINK"}, - {&__pyx_n_TypeError, "TypeError"}, - {&__pyx_n_WRGRP, "WRGRP"}, - {&__pyx_n_WROTHGRP, "WROTHGRP"}, - {&__pyx_n_WROTHUSR, "WROTHUSR"}, - {&__pyx_n_WRWORLD, "WRWORLD"}, - {&__pyx_n_len, "len"}, - {&__pyx_n_report, "report"}, - {0, 0} -}; - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_k2p, __pyx_k2, sizeof(__pyx_k2)}, - {0, 0, 0} -}; - -static PyObject *__pyx_tp_new_9checkpath_CheckPath(PyTypeObject *t, PyObject *a, PyObject *k) { - PyObject *o = (*t->tp_alloc)(t, 0); - struct __pyx_obj_9checkpath_CheckPath *p = (struct __pyx_obj_9checkpath_CheckPath *)o; - return o; -} - -static void __pyx_tp_dealloc_9checkpath_CheckPath(PyObject *o) { - struct __pyx_obj_9checkpath_CheckPath *p = (struct __pyx_obj_9checkpath_CheckPath *)o; - (*o->ob_type->tp_free)(o); -} - -static int __pyx_tp_traverse_9checkpath_CheckPath(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_9checkpath_CheckPath *p = (struct __pyx_obj_9checkpath_CheckPath *)o; - return 0; -} - -static int __pyx_tp_clear_9checkpath_CheckPath(PyObject *o) { - struct __pyx_obj_9checkpath_CheckPath *p = (struct __pyx_obj_9checkpath_CheckPath *)o; - return 0; -} - -static PyObject *__pyx_getprop_9checkpath_9CheckPath_uid(PyObject *o, void *x) { - return __pyx_f_9checkpath_9CheckPath_3uid___get__(o); -} - -static int __pyx_setprop_9checkpath_9CheckPath_uid(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_f_9checkpath_9CheckPath_3uid___set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_9checkpath_9CheckPath_gids(PyObject *o, void *x) { - return __pyx_f_9checkpath_9CheckPath_4gids___get__(o); -} - -static int __pyx_setprop_9checkpath_9CheckPath_gids(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_f_9checkpath_9CheckPath_4gids___set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_9checkpath_9CheckPath_verbose(PyObject *o, void *x) { - return __pyx_f_9checkpath_9CheckPath_7verbose___get__(o); -} - -static int __pyx_setprop_9checkpath_9CheckPath_verbose(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_f_9checkpath_9CheckPath_7verbose___set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_9checkpath_9CheckPath_what(PyObject *o, void *x) { - return __pyx_f_9checkpath_9CheckPath_4what___get__(o); -} - -static int __pyx_setprop_9checkpath_9CheckPath_what(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_f_9checkpath_9CheckPath_4what___set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static struct PyMethodDef __pyx_methods_9checkpath_CheckPath[] = { - {"setids", (PyCFunction)__pyx_f_9checkpath_9CheckPath_setids, METH_VARARGS|METH_KEYWORDS, 0}, - {"check", (PyCFunction)__pyx_f_9checkpath_9CheckPath_check, METH_VARARGS|METH_KEYWORDS, 0}, - {"report", (PyCFunction)__pyx_f_9checkpath_9CheckPath_report, METH_VARARGS|METH_KEYWORDS, 0}, - {0, 0, 0, 0} -}; - -static struct PyGetSetDef __pyx_getsets_9checkpath_CheckPath[] = { - {"uid", __pyx_getprop_9checkpath_9CheckPath_uid, __pyx_setprop_9checkpath_9CheckPath_uid, 0, 0}, - {"gids", __pyx_getprop_9checkpath_9CheckPath_gids, __pyx_setprop_9checkpath_9CheckPath_gids, 0, 0}, - {"verbose", __pyx_getprop_9checkpath_9CheckPath_verbose, __pyx_setprop_9checkpath_9CheckPath_verbose, 0, 0}, - {"what", __pyx_getprop_9checkpath_9CheckPath_what, __pyx_setprop_9checkpath_9CheckPath_what, 0, 0}, - {0, 0, 0, 0, 0} -}; - -static PyNumberMethods __pyx_tp_as_number_CheckPath = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - 0, /*nb_divide*/ - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - 0, /*nb_coerce*/ - 0, /*nb_int*/ - 0, /*nb_long*/ - 0, /*nb_float*/ - 0, /*nb_oct*/ - 0, /*nb_hex*/ - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - 0, /*nb_inplace_divide*/ - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ -}; - -static PySequenceMethods __pyx_tp_as_sequence_CheckPath = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - 0, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; - -static PyMappingMethods __pyx_tp_as_mapping_CheckPath = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ -}; - -static PyBufferProcs __pyx_tp_as_buffer_CheckPath = { - 0, /*bf_getreadbuffer*/ - 0, /*bf_getwritebuffer*/ - 0, /*bf_getsegcount*/ - 0, /*bf_getcharbuffer*/ -}; - -statichere PyTypeObject __pyx_type_9checkpath_CheckPath = { - PyObject_HEAD_INIT(0) - 0, /*ob_size*/ - "checkpath.CheckPath", /*tp_name*/ - sizeof(struct __pyx_obj_9checkpath_CheckPath), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_9checkpath_CheckPath, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - &__pyx_tp_as_number_CheckPath, /*tp_as_number*/ - &__pyx_tp_as_sequence_CheckPath, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_CheckPath, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - &__pyx_tp_as_buffer_CheckPath, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_9checkpath_CheckPath, /*tp_traverse*/ - __pyx_tp_clear_9checkpath_CheckPath, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_9checkpath_CheckPath, /*tp_methods*/ - 0, /*tp_members*/ - __pyx_getsets_9checkpath_CheckPath, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_f_9checkpath_9CheckPath___init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_9checkpath_CheckPath, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ -}; - -static struct PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -DL_EXPORT(void) initcheckpath(void); /*proto*/ -DL_EXPORT(void) initcheckpath(void) { - PyObject *__pyx_1 = 0; - __pyx_m = Py_InitModule4("checkpath", __pyx_methods, 0, 0, PYTHON_API_VERSION); - if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; - __pyx_b = PyImport_AddModule("__builtin__"); - if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; - if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; - if (PyType_Ready(&__pyx_type_9checkpath_CheckPath) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; goto __pyx_L1;} - if (PyObject_SetAttrString(__pyx_m, "CheckPath", (PyObject *)&__pyx_type_9checkpath_CheckPath) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; goto __pyx_L1;} - __pyx_ptype_9checkpath_CheckPath = &__pyx_type_9checkpath_CheckPath; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":31 */ - __pyx_1 = PyInt_FromLong(CP_ERROR); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ERROR, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":32 */ - __pyx_1 = PyInt_FromLong(CP_WRWORLD); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_WRWORLD, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":33 */ - __pyx_1 = PyInt_FromLong(CP_WRGRP); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_WRGRP, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":34 */ - __pyx_1 = PyInt_FromLong(CP_WROTHGRP); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_WROTHGRP, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":35 */ - __pyx_1 = PyInt_FromLong(CP_WROTHUSR); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_WROTHUSR, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":36 */ - __pyx_1 = PyInt_FromLong(CP_PROBLEMS); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_PROBLEMS, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":37 */ - __pyx_1 = PyInt_FromLong(CP_SYMLINK); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_SYMLINK, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":38 */ - __pyx_1 = PyInt_FromLong(CP_REPORT); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_REPORT, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":39 */ - __pyx_1 = PyInt_FromLong(CP_STICKYOK); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_STICKYOK, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/home/mdw/src/chkpath-python/checkpath.pyx":90 */ - return; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("checkpath"); -} - -static char *__pyx_filenames[] = { - "checkpath.pyx", -}; -statichere char **__pyx_f = __pyx_filenames; - -/* Runtime support code */ - -static void __Pyx_WriteUnraisable(char *name) { - PyObject *old_exc, *old_val, *old_tb; - PyObject *ctx; - PyErr_Fetch(&old_exc, &old_val, &old_tb); - ctx = PyString_FromString(name); - PyErr_Restore(old_exc, old_val, old_tb); - if (!ctx) - ctx = Py_None; - PyErr_WriteUnraisable(ctx); -} - -static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) { - PyObject *result; - result = PyObject_GetAttr(dict, name); - if (!result) - PyErr_SetObject(PyExc_NameError, name); - return result; -} - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) { - Py_XINCREF(type); - Py_XINCREF(value); - Py_XINCREF(tb); - /* First, check the traceback argument, replacing None with NULL. */ - if (tb == Py_None) { - Py_DECREF(tb); - tb = 0; - } - else if (tb != NULL && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - /* Next, replace a missing value with None */ - if (value == NULL) { - value = Py_None; - Py_INCREF(value); - } - /* Next, repeatedly, replace a tuple exception with its first item */ - while (PyTuple_Check(type) && PyTuple_Size(type) > 0) { - PyObject *tmp = type; - type = PyTuple_GET_ITEM(type, 0); - Py_INCREF(type); - Py_DECREF(tmp); - } - if (PyString_Check(type)) - ; - else if (PyClass_Check(type)) - ; /*PyErr_NormalizeException(&type, &value, &tb);*/ - else if (PyInstance_Check(type)) { - /* Raising an instance. The value should be a dummy. */ - if (value != Py_None) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - else { - /* Normalize to raise , */ - Py_DECREF(value); - value = type; - type = (PyObject*) ((PyInstanceObject*)type)->in_class; - Py_INCREF(type); - } - } - else { - /* Not something you can raise. You get an exception - anyway, just not what you specified :-) */ - PyErr_Format(PyExc_TypeError, - "exceptions must be strings, classes, or " - "instances, not %s", type->ob_type->tp_name); - goto raise_error; - } - PyErr_Restore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} - -static int __Pyx_InternStrings(__Pyx_InternTabEntry *t) { - while (t->p) { - *t->p = PyString_InternFromString(t->s); - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" - -static void __Pyx_AddTraceback(char *funcname) { - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - PyObject *py_globals = 0; - PyObject *empty_tuple = 0; - PyObject *empty_string = 0; - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - - py_srcfile = PyString_FromString(__pyx_filename); - if (!py_srcfile) goto bad; - py_funcname = PyString_FromString(funcname); - if (!py_funcname) goto bad; - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - empty_tuple = PyTuple_New(0); - if (!empty_tuple) goto bad; - empty_string = PyString_FromString(""); - if (!empty_string) goto bad; - py_code = PyCode_New( - 0, /*int argcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - empty_string, /*PyObject *code,*/ - empty_tuple, /*PyObject *consts,*/ - empty_tuple, /*PyObject *names,*/ - empty_tuple, /*PyObject *varnames,*/ - empty_tuple, /*PyObject *freevars,*/ - empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - __pyx_lineno, /*int firstlineno,*/ - empty_string /*PyObject *lnotab*/ - ); - if (!py_code) goto bad; - py_frame = PyFrame_New( - PyThreadState_Get(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = __pyx_lineno; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - Py_XDECREF(empty_tuple); - Py_XDECREF(empty_string); - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} diff --git a/checkpath.pyx~ b/checkpath.pyx~ deleted file mode 100644 index 46ead15..0000000 --- a/checkpath.pyx~ +++ /dev/null @@ -1,14 +0,0 @@ -cdef extern from "checkpath.h": - struct checkpath: - ctypedef int uid_t - ctypedef int gid_t - uid_t cp_uid - gid_t cp_gid[] - int cp_gids - int cp_verbose - unsigned cp_what - void (*cp_report)(unsigned, int, char *, char *, void *) - void *cp_arg - int checkpath(char *path, checkpath *cp) - void checkpath_setids(checkpath *cp) - diff --git a/checkpath.so b/checkpath.so deleted file mode 100755 index 2ee1b2cf69f28f84fb9502949e5806abda16d761..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69051 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 z 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 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..5ae8c34 --- /dev/null +++ b/setup.py @@ -0,0 +1,67 @@ +#! /usr/bin/python + +from distutils.core import setup, Extension +from os import * +from errno import * + +incdirs = [] +libdirs = [] +libs = [] + +def progoutput(cmd): + p = popen(cmd) + out = p.readline() + if p.read() != '': raise 'extra junk from %s' % cmd + p.close() + return out.rstrip('\n') + +def libconfig(lib, ver): + config = lib + '-config' + if system('%s --check %s' % (config, ver)): + raise '%s version %s not found' % (lib, ver) + version = progoutput('%s --version' % config) + for i in progoutput('%s --cflags' % config).split(): + if i[:2] == '-I': incdirs.append(i[2:]) + else: raise 'strange cflags item %s' % i + for i in progoutput('%s --libs' % config).split(): + if i[:2] == '-L': libdirs.append(i[2:]) + elif i[:2] == '-l': libs.append(i[2:]) + else: raise 'strange libs item %s' % i + +def uniquify(l): + u = {} + o = [] + for i in l: + if i not in u: + o.append(i) + u[i] = 1 + return o + +libconfig('mLib', '2.0.3') +libconfig('checkpath', '1.1.0') + +class SubprocessFailure (Exception): + def __init__(me, file, rc): + me.args = (file, rc) + me.file = file + me.rc = rc + def __str__(me): + if WIFEXITED(me.rc): + return '%s failed (rc = %d)' % (me.file, WEXITSTATUS(me.rc)) + elif WIFSIGNALED(me.rc): + return '%s died (signal %d)' % (me.file, WTERMSIG(me.rc)) + else: + return '%s died inexplicably' % (me.file) + +chk = Extension('checkpath', + ['checkpath.c'], + include_dirs = uniquify(incdirs), + library_dirs = uniquify(libdirs), + libraries = uniquify(libs)) +setup(name = 'CheckPath', + version = '1.1.0', + description = 'Checking paths for security', + author = 'Straylight/Edgeware', + author_email = 'mdw@nsict.org', + license = 'GNU General Public License', + ext_modules = [chk]) diff --git a/test.py b/test.py deleted file mode 100644 index 9eb2d8d..0000000 --- a/test.py +++ /dev/null @@ -1,12 +0,0 @@ -import checkpath as CP - -class VerboseCheck (CP.CheckPath): - def __init__(me): - CP.CheckPath.__init__(me) - me.what |= CP.REPORT - def report(me, what, verb, path, msg): - print msg - -cp = VerboseCheck() -cp.check('/home/mdw') - diff --git a/test.py~ b/test.py~ deleted file mode 100644 index f0f882a..0000000 --- a/test.py~ +++ /dev/null @@ -1,5 +0,0 @@ -import checkpath as CP - -cp = CP.CheckPath() -cp.check('/home/mdw') - -- 2.11.0