From: mdw Date: Fri, 24 Jun 2005 11:11:15 +0000 (+0000) Subject: Load . into chkpath-python/trunk. X-Git-Url: https://git.distorted.org.uk/~mdw/checkpath-python/commitdiff_plain/333870bbf36270a9132707e1cb1aff9fc3ace8ab Load . into chkpath-python/trunk. --- diff --git a/checkpath.c b/checkpath.c new file mode 100644 index 0000000..cc3afe3 --- /dev/null +++ b/checkpath.c @@ -0,0 +1,1002 @@ +/* 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 new file mode 100644 index 0000000..609119b --- /dev/null +++ b/checkpath.pyx @@ -0,0 +1,92 @@ + + +cdef extern from *: + ctypedef int uid_t + ctypedef int gid_t + enum: + NGROUPS_MAX + +cdef extern from "checkpath.h": + struct checkpath: + uid_t cp_uid + gid_t cp_gid[NGROUPS_MAX + 1] + int cp_gids + int cp_verbose + unsigned cp_what + void (*cp_report)(unsigned, int, char *, char *, void *) + void *cp_arg + enum: + c_CP_ERROR "CP_ERROR" + c_CP_WRWORLD "CP_WRWORLD" + c_CP_WRGRP "CP_WRGRP" + c_CP_WROTHGRP "CP_WROTHGRP" + c_CP_WROTHUSR "CP_WROTHUSR" + c_CP_PROBLEMS "CP_PROBLEMS" + c_CP_SYMLINK "CP_SYMLINK" + c_CP_REPORT "CP_REPORT" + c_CP_STICKYOK "CP_STICKYOK" + int c_checkpath "checkpath"(char *path, checkpath *cp) except * + void c_checkpath_setids "checkpath_setids"(checkpath *cp) + +ERROR = c_CP_ERROR +WRWORLD = c_CP_WRWORLD +WRGRP = c_CP_WRGRP +WROTHGRP = c_CP_WROTHGRP +WROTHUSR = c_CP_WROTHUSR +PROBLEMS = c_CP_PROBLEMS +SYMLINK = c_CP_SYMLINK +REPORT = c_CP_REPORT +STICKYOK = c_CP_STICKYOK + +cdef void cp_report(unsigned what, int verb, + char *path, char *msg, void *arg): + cdef object cp + cp = arg + if msg is NULL: + msg = '' + cp.report(what, verb, path, msg) + +cdef class CheckPath: + cdef checkpath cp + def __init__(me): + me.cp.cp_uid = 0 + me.cp.cp_gids = 0 + me.cp.cp_verbose = 1 + me.cp.cp_what = c_CP_PROBLEMS + me.cp.cp_report = cp_report + me.cp.cp_arg = me + c_checkpath_setids(&me.cp) + def setids(me): + c_checkpath_setids(&me.cp) + property uid: + def __get__(me): + return me.cp.cp_uid + def __set__(me, val): + me.cp.cp_uid = val + property gids: + def __get__(me): + g = [] + for i from 0 <= i < me.cp.cp_gids: + g[i] = me.cp.cp_gid[i] + return g + def __set__(me, val): + if len(val) >= NGROUPS_MAX + 1: + raise TypeError, 'too many groups' + for i from 0 <= i < len(val): + me.cp.cp_gid[i] = val[i] + me.cp.cp_gids = len(val) + property verbose: + def __get__(me): + return me.cp.cp_verbose + def __set__(me, val): + me.cp.cp_verbose = val + property what: + def __get__(me): + return me.cp.cp_what + def __set__(me, val): + me.cp.cp_what = val + def check(me, path): + return c_checkpath(path, &me.cp) + def report(me, what, verb, path, msg): + pass + diff --git a/checkpath.pyx~ b/checkpath.pyx~ new file mode 100644 index 0000000..46ead15 --- /dev/null +++ b/checkpath.pyx~ @@ -0,0 +1,14 @@ +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 new file mode 100755 index 0000000..2ee1b2c Binary files /dev/null and b/checkpath.so differ diff --git a/test.py b/test.py new file mode 100644 index 0000000..9eb2d8d --- /dev/null +++ b/test.py @@ -0,0 +1,12 @@ +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~ new file mode 100644 index 0000000..f0f882a --- /dev/null +++ b/test.py~ @@ -0,0 +1,5 @@ +import checkpath as CP + +cp = CP.CheckPath() +cp.check('/home/mdw') +