2010-01-11 02:19:22 +03:00
/*
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>
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 )
{
2011-08-10 15:15:18 +02:00
struct xattr_NTACL * ntacl = pytalloc_get_ptr ( self ) ;
2010-01-11 02:19:22 +03:00
struct ndr_print * pr ;
TALLOC_CTX * mem_ctx ;
mem_ctx = talloc_new ( NULL ) ;
pr = talloc_zero ( mem_ctx , struct ndr_print ) ;
2010-01-21 16:29:15 +13:00
if ( ! pr ) {
PyErr_NoMemory ( ) ;
talloc_free ( mem_ctx ) ;
return NULL ;
}
2010-01-11 02:19:22 +03:00
pr - > print = ntacl_print_debug_helper ;
ndr_print_xattr_NTACL ( pr , " file " , ntacl ) ;
2010-01-21 16:44:12 +13:00
talloc_free ( mem_ctx ) ;
2010-01-11 02:19:22 +03:00
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