2002-04-15 07:29:47 +00:00
/*
Python wrappers for DCERPC / SMB client routines .
Copyright ( C ) Tim Potter , 2002
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 2 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 , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# include "python/py_samr.h"
/*
* Exceptions raised by this module
*/
PyObject * samr_error ; /* This indicates a non-RPC related error
such as name lookup failure */
PyObject * samr_ntstatus ; /* This exception is raised when a RPC call
returns a status code other than
NT_STATUS_OK */
2003-04-14 01:15:11 +00:00
/* SAMR group handle object */
static void py_samr_group_hnd_dealloc ( PyObject * self )
{
PyObject_Del ( self ) ;
}
static PyMethodDef samr_group_methods [ ] = {
{ NULL }
} ;
static PyObject * py_samr_group_hnd_getattr ( PyObject * self , char * attrname )
{
return Py_FindMethod ( samr_group_methods , self , attrname ) ;
}
PyTypeObject samr_group_hnd_type = {
PyObject_HEAD_INIT ( NULL )
0 ,
" SAMR Group Handle " ,
sizeof ( samr_group_hnd_object ) ,
0 ,
py_samr_group_hnd_dealloc , /*tp_dealloc*/
0 , /*tp_print*/
py_samr_group_hnd_getattr , /*tp_getattr*/
0 , /*tp_setattr*/
0 , /*tp_compare*/
0 , /*tp_repr*/
0 , /*tp_as_number*/
0 , /*tp_as_sequence*/
0 , /*tp_as_mapping*/
0 , /*tp_hash */
} ;
PyObject * new_samr_group_hnd_object ( struct cli_state * cli , TALLOC_CTX * mem_ctx ,
POLICY_HND * pol )
{
samr_group_hnd_object * o ;
o = PyObject_New ( samr_group_hnd_object , & samr_group_hnd_type ) ;
o - > cli = cli ;
o - > mem_ctx = mem_ctx ;
memcpy ( & o - > group_pol , pol , sizeof ( POLICY_HND ) ) ;
return ( PyObject * ) o ;
}
/* Alias handle object */
static void py_samr_alias_hnd_dealloc ( PyObject * self )
{
PyObject_Del ( self ) ;
}
static PyMethodDef samr_alias_methods [ ] = {
{ NULL }
} ;
static PyObject * py_samr_alias_hnd_getattr ( PyObject * self , char * attrname )
{
return Py_FindMethod ( samr_alias_methods , self , attrname ) ;
}
PyTypeObject samr_alias_hnd_type = {
PyObject_HEAD_INIT ( NULL )
0 ,
" SAMR Alias Handle " ,
sizeof ( samr_alias_hnd_object ) ,
0 ,
py_samr_alias_hnd_dealloc , /*tp_dealloc*/
0 , /*tp_print*/
py_samr_alias_hnd_getattr , /*tp_getattr*/
0 , /*tp_setattr*/
0 , /*tp_compare*/
0 , /*tp_repr*/
0 , /*tp_as_number*/
0 , /*tp_as_sequence*/
0 , /*tp_as_mapping*/
0 , /*tp_hash */
} ;
PyObject * new_samr_alias_hnd_object ( struct cli_state * cli , TALLOC_CTX * mem_ctx ,
POLICY_HND * pol )
{
samr_alias_hnd_object * o ;
o = PyObject_New ( samr_alias_hnd_object , & samr_alias_hnd_type ) ;
o - > cli = cli ;
o - > mem_ctx = mem_ctx ;
memcpy ( & o - > alias_pol , pol , sizeof ( POLICY_HND ) ) ;
return ( PyObject * ) o ;
}
/* SAMR user handle object */
static void py_samr_user_hnd_dealloc ( PyObject * self )
{
PyObject_Del ( self ) ;
}
static PyObject * samr_set_user_info2 ( PyObject * self , PyObject * args ,
PyObject * kw )
{
samr_user_hnd_object * user_hnd = ( samr_user_hnd_object * ) self ;
static char * kwlist [ ] = { " dict " , NULL } ;
PyObject * info , * result = NULL ;
SAM_USERINFO_CTR ctr ;
TALLOC_CTX * mem_ctx ;
uchar sess_key [ 16 ] ;
NTSTATUS ntstatus ;
int level ;
union {
2005-07-19 00:59:25 +00:00
SAM_USER_INFO_16 id16 ;
2003-04-14 01:15:11 +00:00
SAM_USER_INFO_21 id21 ;
} pinfo ;
if ( ! PyArg_ParseTupleAndKeywords (
args , kw , " O! " , kwlist , & PyDict_Type , & info ) )
return NULL ;
if ( ! get_level_value ( info , & level ) ) {
PyErr_SetString ( samr_error , " invalid info level " ) ;
return NULL ;
}
ZERO_STRUCT ( ctr ) ;
ctr . switch_value = level ;
switch ( level ) {
2005-07-19 00:59:25 +00:00
case 16 :
ctr . info . id16 = & pinfo . id16 ;
2003-04-14 01:15:11 +00:00
2005-07-19 00:59:25 +00:00
if ( ! py_to_SAM_USER_INFO_16 ( ctr . info . id16 , info ) ) {
2003-04-14 01:15:11 +00:00
PyErr_SetString (
samr_error , " error converting user info " ) ;
goto done ;
}
break ;
case 21 :
ctr . info . id21 = & pinfo . id21 ;
if ( ! py_to_SAM_USER_INFO_21 ( ctr . info . id21 , info ) ) {
PyErr_SetString (
samr_error , " error converting user info " ) ;
goto done ;
}
break ;
default :
PyErr_SetString ( samr_error , " unsupported info level " ) ;
goto done ;
}
/* Call RPC function */
if ( ! ( mem_ctx = talloc_init ( " samr_set_user_info2 " ) ) ) {
PyErr_SetString (
samr_error , " unable to init talloc context \n " ) ;
goto done ;
}
2005-10-07 04:54:41 +00:00
ntstatus = rpccli_samr_set_userinfo2 (
2003-04-14 01:15:11 +00:00
user_hnd - > cli , mem_ctx , & user_hnd - > user_pol , level ,
sess_key , & ctr ) ;
talloc_destroy ( mem_ctx ) ;
if ( ! NT_STATUS_IS_OK ( ntstatus ) ) {
PyErr_SetObject ( samr_ntstatus , py_ntstatus_tuple ( ntstatus ) ) ;
goto done ;
}
Py_INCREF ( Py_None ) ;
result = Py_None ;
done :
return result ;
}
static PyObject * samr_delete_dom_user ( PyObject * self , PyObject * args ,
PyObject * kw )
{
samr_user_hnd_object * user_hnd = ( samr_user_hnd_object * ) self ;
static char * kwlist [ ] = { NULL } ;
NTSTATUS ntstatus ;
TALLOC_CTX * mem_ctx ;
PyObject * result = NULL ;
if ( ! PyArg_ParseTupleAndKeywords (
args , kw , " " , kwlist ) )
return NULL ;
if ( ! ( mem_ctx = talloc_init ( " samr_delete_dom_user " ) ) ) {
PyErr_SetString ( samr_error , " unable to init talloc context " ) ;
return NULL ;
}
2005-10-07 04:54:41 +00:00
ntstatus = rpccli_samr_delete_dom_user (
2003-04-14 01:15:11 +00:00
user_hnd - > cli , mem_ctx , & user_hnd - > user_pol ) ;
if ( ! NT_STATUS_IS_OK ( ntstatus ) ) {
PyErr_SetObject ( samr_ntstatus , py_ntstatus_tuple ( ntstatus ) ) ;
goto done ;
}
Py_INCREF ( Py_None ) ;
result = Py_None ;
done :
talloc_destroy ( mem_ctx ) ;
return result ;
}
static PyMethodDef samr_user_methods [ ] = {
{ " delete_domain_user " , ( PyCFunction ) samr_delete_dom_user ,
METH_VARARGS | METH_KEYWORDS ,
" Delete domain user. " } ,
{ " set_user_info2 " , ( PyCFunction ) samr_set_user_info2 ,
METH_VARARGS | METH_KEYWORDS ,
" Set user info 2 " } ,
{ NULL }
} ;
static PyObject * py_samr_user_hnd_getattr ( PyObject * self , char * attrname )
{
return Py_FindMethod ( samr_user_methods , self , attrname ) ;
}
PyTypeObject samr_user_hnd_type = {
PyObject_HEAD_INIT ( NULL )
0 ,
" SAMR User Handle " ,
sizeof ( samr_user_hnd_object ) ,
0 ,
py_samr_user_hnd_dealloc , /*tp_dealloc*/
0 , /*tp_print*/
py_samr_user_hnd_getattr , /*tp_getattr*/
0 , /*tp_setattr*/
0 , /*tp_compare*/
0 , /*tp_repr*/
0 , /*tp_as_number*/
0 , /*tp_as_sequence*/
0 , /*tp_as_mapping*/
0 , /*tp_hash */
} ;
2006-05-01 22:53:29 +00:00
PyObject * new_samr_user_hnd_object ( struct rpc_pipe_client * cli , TALLOC_CTX * mem_ctx ,
2003-04-14 01:15:11 +00:00
POLICY_HND * pol )
{
samr_user_hnd_object * o ;
o = PyObject_New ( samr_user_hnd_object , & samr_user_hnd_type ) ;
o - > cli = cli ;
o - > mem_ctx = mem_ctx ;
memcpy ( & o - > user_pol , pol , sizeof ( POLICY_HND ) ) ;
return ( PyObject * ) o ;
}
2002-04-15 23:33:09 +00:00
/* SAMR connect handle object */
2002-04-15 07:29:47 +00:00
static void py_samr_connect_hnd_dealloc ( PyObject * self )
{
PyObject_Del ( self ) ;
}
2006-05-01 22:53:29 +00:00
PyObject * new_samr_domain_hnd_object ( struct rpc_pipe_client * cli , TALLOC_CTX * mem_ctx ,
2002-06-20 00:54:43 +00:00
POLICY_HND * pol )
{
samr_domain_hnd_object * o ;
o = PyObject_New ( samr_domain_hnd_object , & samr_domain_hnd_type ) ;
o - > cli = cli ;
o - > mem_ctx = mem_ctx ;
memcpy ( & o - > domain_pol , pol , sizeof ( POLICY_HND ) ) ;
return ( PyObject * ) o ;
}
static PyObject * samr_open_domain ( PyObject * self , PyObject * args , PyObject * kw )
{
samr_connect_hnd_object * connect_hnd = ( samr_connect_hnd_object * ) self ;
static char * kwlist [ ] = { " sid " , " access " , NULL } ;
uint32 desired_access = MAXIMUM_ALLOWED_ACCESS ;
char * sid_str ;
DOM_SID sid ;
TALLOC_CTX * mem_ctx = NULL ;
POLICY_HND domain_pol ;
NTSTATUS ntstatus ;
PyObject * result = NULL ;
if ( ! PyArg_ParseTupleAndKeywords (
args , kw , " s|i " , kwlist , & sid_str , & desired_access ) )
return NULL ;
if ( ! string_to_sid ( & sid , sid_str ) ) {
PyErr_SetString ( PyExc_TypeError , " string is not a sid " ) ;
return NULL ;
}
2002-12-23 23:54:10 +00:00
if ( ! ( mem_ctx = talloc_init ( " samr_open_domain " ) ) ) {
2002-06-20 00:54:43 +00:00
PyErr_SetString ( samr_error , " unable to init talloc context " ) ;
return NULL ;
}
2005-10-07 04:54:41 +00:00
ntstatus = rpccli_samr_open_domain (
2002-06-20 00:54:43 +00:00
connect_hnd - > cli , mem_ctx , & connect_hnd - > connect_pol ,
desired_access , & sid , & domain_pol ) ;
if ( ! NT_STATUS_IS_OK ( ntstatus ) ) {
PyErr_SetObject ( samr_ntstatus , py_ntstatus_tuple ( ntstatus ) ) ;
goto done ;
}
result = new_samr_domain_hnd_object (
connect_hnd - > cli , mem_ctx , & domain_pol ) ;
done :
if ( ! result ) {
if ( mem_ctx )
talloc_destroy ( mem_ctx ) ;
}
return result ;
}
2002-04-15 23:33:09 +00:00
static PyMethodDef samr_connect_methods [ ] = {
2002-06-20 00:54:43 +00:00
{ " open_domain " , ( PyCFunction ) samr_open_domain ,
METH_VARARGS | METH_KEYWORDS ,
" Open a handle on a domain " } ,
2002-04-15 23:33:09 +00:00
{ NULL }
} ;
2002-04-15 07:29:47 +00:00
static PyObject * py_samr_connect_hnd_getattr ( PyObject * self , char * attrname )
{
return Py_FindMethod ( samr_connect_methods , self , attrname ) ;
}
PyTypeObject samr_connect_hnd_type = {
PyObject_HEAD_INIT ( NULL )
0 ,
" SAMR Connect Handle " ,
sizeof ( samr_connect_hnd_object ) ,
0 ,
py_samr_connect_hnd_dealloc , /*tp_dealloc*/
0 , /*tp_print*/
2002-04-15 23:33:09 +00:00
py_samr_connect_hnd_getattr , /*tp_getattr*/
2002-04-15 07:29:47 +00:00
0 , /*tp_setattr*/
0 , /*tp_compare*/
0 , /*tp_repr*/
0 , /*tp_as_number*/
0 , /*tp_as_sequence*/
0 , /*tp_as_mapping*/
0 , /*tp_hash */
} ;
2006-05-01 22:53:29 +00:00
PyObject * new_samr_connect_hnd_object ( struct rpc_pipe_client * cli , TALLOC_CTX * mem_ctx ,
2002-04-15 23:33:09 +00:00
POLICY_HND * pol )
{
samr_connect_hnd_object * o ;
o = PyObject_New ( samr_connect_hnd_object , & samr_connect_hnd_type ) ;
o - > cli = cli ;
o - > mem_ctx = mem_ctx ;
2002-06-20 00:54:43 +00:00
memcpy ( & o - > connect_pol , pol , sizeof ( POLICY_HND ) ) ;
2002-04-15 23:33:09 +00:00
return ( PyObject * ) o ;
}
/* SAMR domain handle object */
static void py_samr_domain_hnd_dealloc ( PyObject * self )
{
PyObject_Del ( self ) ;
}
2002-08-27 01:49:51 +00:00
static PyObject * samr_enum_dom_groups ( PyObject * self , PyObject * args ,
PyObject * kw )
{
samr_domain_hnd_object * domain_hnd = ( samr_domain_hnd_object * ) self ;
static char * kwlist [ ] = { NULL } ;
TALLOC_CTX * mem_ctx ;
2003-02-19 22:47:49 +00:00
/* uint32 desired_access = MAXIMUM_ALLOWED_ACCESS; */
2002-08-27 01:49:51 +00:00
uint32 start_idx , size , num_dom_groups ;
struct acct_info * dom_groups ;
NTSTATUS result ;
PyObject * py_result = NULL ;
2003-04-14 01:15:11 +00:00
if ( ! PyArg_ParseTupleAndKeywords ( args , kw , " " , kwlist ) )
2002-08-27 01:49:51 +00:00
return NULL ;
2002-12-23 23:54:10 +00:00
if ( ! ( mem_ctx = talloc_init ( " samr_enum_dom_groups " ) ) ) {
2002-08-27 01:49:51 +00:00
PyErr_SetString ( samr_error , " unable to init talloc context " ) ;
return NULL ;
}
start_idx = 0 ;
size = 0xffff ;
do {
2005-10-07 04:54:41 +00:00
result = rpccli_samr_enum_dom_groups (
2002-08-27 01:49:51 +00:00
domain_hnd - > cli , mem_ctx , & domain_hnd - > domain_pol ,
& start_idx , size , & dom_groups , & num_dom_groups ) ;
if ( NT_STATUS_IS_OK ( result ) | |
NT_STATUS_V ( result ) = = NT_STATUS_V ( STATUS_MORE_ENTRIES ) ) {
py_from_acct_info ( & py_result , dom_groups ,
num_dom_groups ) ;
}
} while ( NT_STATUS_V ( result ) = = NT_STATUS_V ( STATUS_MORE_ENTRIES ) ) ;
return py_result ;
}
2003-04-14 01:15:11 +00:00
static PyObject * samr_create_dom_user ( PyObject * self , PyObject * args ,
PyObject * kw )
{
samr_domain_hnd_object * domain_hnd = ( samr_domain_hnd_object * ) self ;
static char * kwlist [ ] = { " account_name " , " acb_info " , NULL } ;
char * account_name ;
NTSTATUS ntstatus ;
uint32 unknown = 0xe005000b ; /* Access mask? */
uint32 user_rid ;
PyObject * result = NULL ;
TALLOC_CTX * mem_ctx ;
2006-02-27 10:32:45 +00:00
uint32 acb_info = ACB_NORMAL ;
2003-04-14 01:15:11 +00:00
POLICY_HND user_pol ;
if ( ! PyArg_ParseTupleAndKeywords (
args , kw , " s|i " , kwlist , & account_name , & acb_info ) )
return NULL ;
if ( ! ( mem_ctx = talloc_init ( " samr_create_dom_user " ) ) ) {
PyErr_SetString ( samr_error , " unable to init talloc context " ) ;
return NULL ;
}
2005-10-07 04:54:41 +00:00
ntstatus = rpccli_samr_create_dom_user (
2003-04-14 01:15:11 +00:00
domain_hnd - > cli , mem_ctx , & domain_hnd - > domain_pol ,
account_name , acb_info , unknown , & user_pol , & user_rid ) ;
if ( ! NT_STATUS_IS_OK ( ntstatus ) ) {
PyErr_SetObject ( samr_ntstatus , py_ntstatus_tuple ( ntstatus ) ) ;
talloc_destroy ( mem_ctx ) ;
goto done ;
}
result = new_samr_user_hnd_object (
domain_hnd - > cli , mem_ctx , & user_pol ) ;
done :
return result ;
}
2002-04-15 23:33:09 +00:00
static PyMethodDef samr_domain_methods [ ] = {
2002-08-27 01:49:51 +00:00
{ " enum_domain_groups " , ( PyCFunction ) samr_enum_dom_groups ,
METH_VARARGS | METH_KEYWORDS , " Enumerate domain groups " } ,
2003-04-14 01:15:11 +00:00
{ " create_domain_user " , ( PyCFunction ) samr_create_dom_user ,
METH_VARARGS | METH_KEYWORDS , " Create domain user " } ,
2002-08-27 01:49:51 +00:00
{ NULL }
2002-04-15 23:33:09 +00:00
} ;
static PyObject * py_samr_domain_hnd_getattr ( PyObject * self , char * attrname )
{
return Py_FindMethod ( samr_domain_methods , self , attrname ) ;
}
2002-04-15 07:29:47 +00:00
PyTypeObject samr_domain_hnd_type = {
PyObject_HEAD_INIT ( NULL )
0 ,
" SAMR Domain Handle " ,
2002-04-15 23:33:09 +00:00
sizeof ( samr_domain_hnd_object ) ,
2002-04-15 07:29:47 +00:00
0 ,
2002-04-15 23:33:09 +00:00
py_samr_domain_hnd_dealloc , /*tp_dealloc*/
2002-04-15 07:29:47 +00:00
0 , /*tp_print*/
2002-04-15 23:33:09 +00:00
py_samr_domain_hnd_getattr , /*tp_getattr*/
2002-04-15 07:29:47 +00:00
0 , /*tp_setattr*/
0 , /*tp_compare*/
0 , /*tp_repr*/
0 , /*tp_as_number*/
0 , /*tp_as_sequence*/
0 , /*tp_as_mapping*/
0 , /*tp_hash */
} ;
2002-04-15 23:33:09 +00:00
static PyObject * samr_connect ( PyObject * self , PyObject * args , PyObject * kw )
{
static char * kwlist [ ] = { " server " , " creds " , " access " , NULL } ;
uint32 desired_access = MAXIMUM_ALLOWED_ACCESS ;
2002-05-16 04:00:31 +00:00
char * server , * errstr ;
2002-05-27 06:35:30 +00:00
struct cli_state * cli = NULL ;
2002-04-15 23:33:09 +00:00
POLICY_HND hnd ;
2002-05-27 06:35:30 +00:00
TALLOC_CTX * mem_ctx = NULL ;
2002-04-15 23:33:09 +00:00
PyObject * result = NULL , * creds = NULL ;
NTSTATUS ntstatus ;
if ( ! PyArg_ParseTupleAndKeywords (
2002-05-28 02:09:54 +00:00
args , kw , " s|Oi " , kwlist , & server , & creds ,
& desired_access ) )
2002-04-15 23:33:09 +00:00
return NULL ;
2002-05-28 02:09:54 +00:00
2002-06-20 00:54:43 +00:00
if ( server [ 0 ] ! = ' \\ ' | | server [ 1 ] ! = ' \\ ' ) {
PyErr_SetString ( PyExc_ValueError , " UNC name required " ) ;
return NULL ;
}
server + = 2 ;
2002-05-28 02:09:54 +00:00
if ( creds & & creds ! = Py_None & & ! PyDict_Check ( creds ) ) {
PyErr_SetString ( PyExc_TypeError ,
" credentials must be dictionary or None " ) ;
return NULL ;
}
2002-04-15 23:33:09 +00:00
2002-11-04 20:33:16 +00:00
if ( ! ( cli = open_pipe_creds ( server , creds , PI_SAMR , & errstr ) ) ) {
2002-05-16 04:00:31 +00:00
PyErr_SetString ( samr_error , errstr ) ;
free ( errstr ) ;
return NULL ;
}
2002-04-15 23:33:09 +00:00
2002-12-23 23:54:10 +00:00
if ( ! ( mem_ctx = talloc_init ( " samr_connect " ) ) ) {
2002-04-15 23:33:09 +00:00
PyErr_SetString ( samr_ntstatus ,
2002-05-16 05:13:50 +00:00
" unable to init talloc context \n " ) ;
2002-04-15 23:33:09 +00:00
goto done ;
}
2006-05-01 22:31:33 +00:00
ntstatus = rpccli_samr_connect ( cli - > pipe_list , mem_ctx , desired_access , & hnd ) ;
2002-04-15 23:33:09 +00:00
if ( ! NT_STATUS_IS_OK ( ntstatus ) ) {
cli_shutdown ( cli ) ;
PyErr_SetObject ( samr_ntstatus , py_ntstatus_tuple ( ntstatus ) ) ;
goto done ;
}
2006-05-01 22:53:29 +00:00
result = new_samr_connect_hnd_object ( cli - > pipe_list , mem_ctx , & hnd ) ;
2002-04-15 23:33:09 +00:00
done :
2002-05-27 06:35:30 +00:00
if ( ! result ) {
if ( cli )
cli_shutdown ( cli ) ;
if ( mem_ctx )
2002-06-20 00:54:43 +00:00
talloc_destroy ( mem_ctx ) ;
2002-05-27 06:35:30 +00:00
}
2002-04-15 23:33:09 +00:00
return result ;
}
/*
* Module initialisation
*/
2002-04-15 07:29:47 +00:00
static PyMethodDef samr_methods [ ] = {
/* Open/close samr connect handles */
2002-05-14 02:37:47 +00:00
{ " connect " , ( PyCFunction ) samr_connect ,
METH_VARARGS | METH_KEYWORDS ,
2002-04-15 07:29:47 +00:00
" Open a connect handle " } ,
{ NULL }
} ;
2002-05-14 02:37:47 +00:00
static struct const_vals {
char * name ;
uint32 value ;
} module_const_vals [ ] = {
2003-04-14 01:15:11 +00:00
/* Account control bits */
{ " ACB_DISABLED " , 0x0001 } ,
{ " ACB_HOMDIRREQ " , 0x0002 } ,
{ " ACB_PWNOTREQ " , 0x0004 } ,
{ " ACB_TEMPDUP " , 0x0008 } ,
{ " ACB_NORMAL " , 0x0010 } ,
{ " ACB_MNS " , 0x0020 } ,
{ " ACB_DOMTRUST " , 0x0040 } ,
{ " ACB_WSTRUST " , 0x0080 } ,
{ " ACB_SVRTRUST " , 0x0100 } ,
{ " ACB_PWNOEXP " , 0x0200 } ,
{ " ACB_AUTOLOCK " , 0x0400 } ,
2002-05-14 02:37:47 +00:00
{ NULL }
} ;
static void const_init ( PyObject * dict )
{
struct const_vals * tmp ;
PyObject * obj ;
for ( tmp = module_const_vals ; tmp - > name ; tmp + + ) {
obj = PyInt_FromLong ( tmp - > value ) ;
PyDict_SetItemString ( dict , tmp - > name , obj ) ;
Py_DECREF ( obj ) ;
}
}
2002-04-15 07:29:47 +00:00
void initsamr ( void )
{
PyObject * module , * dict ;
/* Initialise module */
module = Py_InitModule ( " samr " , samr_methods ) ;
dict = PyModule_GetDict ( module ) ;
samr_error = PyErr_NewException ( " samr.error " , NULL , NULL ) ;
PyDict_SetItemString ( dict , " error " , samr_error ) ;
samr_ntstatus = PyErr_NewException ( " samr.ntstatus " , NULL , NULL ) ;
PyDict_SetItemString ( dict , " ntstatus " , samr_ntstatus ) ;
/* Initialise policy handle object */
samr_connect_hnd_type . ob_type = & PyType_Type ;
samr_domain_hnd_type . ob_type = & PyType_Type ;
samr_user_hnd_type . ob_type = & PyType_Type ;
samr_group_hnd_type . ob_type = & PyType_Type ;
samr_alias_hnd_type . ob_type = & PyType_Type ;
/* Initialise constants */
2002-05-14 02:37:47 +00:00
const_init ( dict ) ;
2002-04-15 07:29:47 +00:00
/* Do samba initialisation */
py_samba_init ( ) ;
setup_logging ( " samr " , True ) ;
DEBUGLEVEL = 10 ;
}