diff options
| author | Matthieu Patou <mat@matws.net> | 2010-01-11 02:19:22 +0300 | 
|---|---|---|
| committer | Andrew Bartlett <abartlet@samba.org> | 2010-01-21 07:11:18 +1300 | 
| commit | 1a143b8a590f5173ccacb7368f3cf36a8785da33 (patch) | |
| tree | 00a2b3a2074c5c245442909f49ebe2f09aa45716 | |
| parent | c637c528762e5972bc47cc18f158186c670b4f7d (diff) | |
| download | samba-1a143b8a590f5173ccacb7368f3cf36a8785da33.tar.gz samba-1a143b8a590f5173ccacb7368f3cf36a8785da33.tar.bz2 samba-1a143b8a590f5173ccacb7368f3cf36a8785da33.zip  | |
s4: allow python code to dump NTACL object as well
| -rw-r--r-- | librpc/idl/xattr.idl | 1 | ||||
| -rw-r--r-- | source4/librpc/ndr/py_xattr.c | 94 | 
2 files changed, 95 insertions, 0 deletions
diff --git a/librpc/idl/xattr.idl b/librpc/idl/xattr.idl index 1dd98a9588..bc8c20c9ea 100644 --- a/librpc/idl/xattr.idl +++ b/librpc/idl/xattr.idl @@ -14,6 +14,7 @@ import "security.idl";    uuid("12345778-1234-abcd-0001-00000002"),    version(0.0),    helper("../librpc/ndr/ndr_xattr.h"), +  pyhelper("librpc/ndr/py_xattr.c"),    pointer_default(unique)  ]  interface xattr diff --git a/source4/librpc/ndr/py_xattr.c b/source4/librpc/ndr/py_xattr.c new file mode 100644 index 0000000000..15f2b9c33a --- /dev/null +++ b/source4/librpc/ndr/py_xattr.c @@ -0,0 +1,94 @@ +/* +   Unix SMB/CIFS implementation. +   Samba utility functions +   Copyright (C) Matthieu Patou <mat@matws.net> 2010 + +   This program is free software; you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation; either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <Python.h> + +#ifndef Py_RETURN_NONE +#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None +#endif +static void PyType_AddMethods(PyTypeObject *type, PyMethodDef *methods) +{ +        PyObject *dict; +        int i; +        if (type->tp_dict == NULL) +                type->tp_dict = PyDict_New(); +        dict = type->tp_dict; +        for (i = 0; methods[i].ml_name; i++) { +                PyObject *descr; +                if (methods[i].ml_flags & METH_CLASS) +                        descr = PyCFunction_New(&methods[i], (PyObject *)type); +                else +                        descr = PyDescr_NewMethod(type, &methods[i]); +                PyDict_SetItemString(dict, methods[i].ml_name, +                                     descr); +        } +} + +static void ntacl_print_debug_helper(struct ndr_print *ndr, const char *format, ...) PRINTF_ATTRIBUTE(2,3); + +static void ntacl_print_debug_helper(struct ndr_print *ndr, const char *format, ...) +{ +        va_list ap; +        char *s = NULL; +        int i; + +        va_start(ap, format); +        vasprintf(&s, format, ap); +        va_end(ap); + +        for (i=0;i<ndr->depth;i++) { +                printf("    "); +        } + +        printf("%s\n", s); +        free(s); +} + +static PyObject *py_ntacl_print(PyObject *self, PyObject *args) +{ +	struct xattr_NTACL *ntacl = py_talloc_get_ptr(self); +	struct ndr_print *pr; +	TALLOC_CTX *mem_ctx; + +	mem_ctx = talloc_new(NULL); + +	pr = talloc_zero(mem_ctx, struct ndr_print); +	if (!pr) return; +	pr->print = ntacl_print_debug_helper; +	ndr_print_xattr_NTACL(pr, "file", ntacl); + +	talloc_free(pr); + +	Py_RETURN_NONE; +} + +static PyMethodDef py_ntacl_extra_methods[] = { +	{ "dump", (PyCFunction)py_ntacl_print, METH_NOARGS, +		NULL }, +	{ NULL } +}; + +static void py_xattr_NTACL_patch(PyTypeObject *type) +{ +	PyType_AddMethods(type, py_ntacl_extra_methods); +} + +#define PY_NTACL_PATCH py_xattr_NTACL_patch + +  | 
