param: Use IDL-based constants for NBT and NBT dgram ports
[Samba.git] / source4 / librpc / ndr / py_xattr.c
blobfcf2e66977ef217cddcbc574020a6c05ff204d5a
1 /*
2 Unix SMB/CIFS implementation.
3 Samba utility functions
4 Copyright (C) Matthieu Patou <mat@matws.net> 2010
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
20 #include <Python.h>
22 static void PyType_AddMethods(PyTypeObject *type, PyMethodDef *methods)
24 PyObject *dict;
25 int i;
26 if (type->tp_dict == NULL)
27 type->tp_dict = PyDict_New();
28 dict = type->tp_dict;
29 for (i = 0; methods[i].ml_name; i++) {
30 PyObject *descr;
31 if (methods[i].ml_flags & METH_CLASS)
32 descr = PyCFunction_New(&methods[i], (PyObject *)type);
33 else
34 descr = PyDescr_NewMethod(type, &methods[i]);
35 PyDict_SetItemString(dict, methods[i].ml_name,
36 descr);
40 static void ntacl_print_debug_helper(struct ndr_print *ndr, const char *format, ...) PRINTF_ATTRIBUTE(2,3);
42 static void ntacl_print_debug_helper(struct ndr_print *ndr, const char *format, ...)
44 va_list ap;
45 char *s = NULL;
46 int i;
48 va_start(ap, format);
49 vasprintf(&s, format, ap);
50 va_end(ap);
52 for (i=0;i<ndr->depth;i++) {
53 printf(" ");
56 printf("%s\n", s);
57 free(s);
60 static PyObject *py_ntacl_print(PyObject *self, PyObject *args)
62 struct xattr_NTACL *ntacl = pytalloc_get_ptr(self);
63 struct ndr_print *pr;
64 TALLOC_CTX *mem_ctx;
66 mem_ctx = talloc_new(NULL);
68 pr = talloc_zero(mem_ctx, struct ndr_print);
69 if (!pr) {
70 PyErr_NoMemory();
71 talloc_free(mem_ctx);
72 return NULL;
74 pr->print = ntacl_print_debug_helper;
75 ndr_print_xattr_NTACL(pr, "file", ntacl);
77 talloc_free(mem_ctx);
79 Py_RETURN_NONE;
82 static PyMethodDef py_ntacl_extra_methods[] = {
83 { "dump", (PyCFunction)py_ntacl_print, METH_NOARGS,
84 NULL },
85 { NULL }
88 static void py_xattr_NTACL_patch(PyTypeObject *type)
90 PyType_AddMethods(type, py_ntacl_extra_methods);
93 #define PY_NTACL_PATCH py_xattr_NTACL_patch