2008-12-19 04:22:07 +03:00
/*
Unix SMB / CIFS implementation .
2010-12-12 19:44:04 +03:00
Python interface to ldb .
2008-12-19 04:22:07 +03:00
Copyright ( C ) 2007 - 2008 Jelmer Vernooij < jelmer @ samba . org >
* * NOTE ! The following LGPL license applies to the ldb
* * library . This does NOT imply that all of Samba is released
* * under the LGPL
This library is free software ; you can redistribute it and / or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation ; either
version 3 of the License , or ( at your option ) any later version .
This library 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
Lesser General Public License for more details .
You should have received a copy of the GNU Lesser General Public
License along with this library ; if not , see < http : //www.gnu.org/licenses/>.
*/
# ifndef _PYLDB_H_
# define _PYLDB_H_
2009-04-23 13:23:06 +04:00
# include <talloc.h>
2008-12-19 04:22:07 +03:00
2008-12-23 07:07:29 +03:00
typedef struct {
PyObject_HEAD
TALLOC_CTX * mem_ctx ;
2010-04-20 09:33:00 +04:00
struct ldb_context * ldb_ctx ;
2008-12-23 07:07:29 +03:00
} PyLdbObject ;
2018-04-20 07:23:42 +03:00
/* pyldb_Ldb_AS_LDBCONTEXT() does not check argument validity,
pyldb_Ldb_AsLdbContext ( ) does */
# define pyldb_Ldb_AS_LDBCONTEXT(pyobj) ((PyLdbObject *)pyobj)->ldb_ctx
# define pyldb_Ldb_AsLdbContext(pyobj) \
( pyldb_check_type ( pyobj , " Ldb " ) ? \
pyldb_Ldb_AS_LDBCONTEXT ( pyobj ) : NULL )
2008-12-19 04:22:07 +03:00
2008-12-23 07:07:29 +03:00
typedef struct {
PyObject_HEAD
TALLOC_CTX * mem_ctx ;
2010-04-20 09:33:00 +04:00
struct ldb_dn * dn ;
2008-12-23 07:07:29 +03:00
} PyLdbDnObject ;
2011-08-07 19:08:56 +04:00
PyObject * pyldb_Dn_FromDn ( struct ldb_dn * ) ;
bool pyldb_Object_AsDn ( TALLOC_CTX * mem_ctx , PyObject * object , struct ldb_context * ldb_ctx , struct ldb_dn * * dn ) ;
2018-04-27 04:15:01 +03:00
# define pyldb_Dn_AS_DN(pyobj) ((PyLdbDnObject *)pyobj)->dn
2008-12-19 04:22:07 +03:00
2018-05-03 03:10:21 +03:00
bool pyldb_check_type ( PyObject * obj , const char * type_name ) ;
2008-12-23 07:07:29 +03:00
typedef struct {
PyObject_HEAD
TALLOC_CTX * mem_ctx ;
2010-04-20 09:33:00 +04:00
struct ldb_message * msg ;
2008-12-23 07:07:29 +03:00
} PyLdbMessageObject ;
2011-08-07 19:08:56 +04:00
# define pyldb_Message_AsMessage(pyobj) ((PyLdbMessageObject *)pyobj)->msg
2008-12-19 04:22:07 +03:00
2008-12-23 07:07:29 +03:00
typedef struct {
PyObject_HEAD
TALLOC_CTX * mem_ctx ;
2010-04-20 09:33:00 +04:00
struct ldb_module * mod ;
2008-12-23 07:07:29 +03:00
} PyLdbModuleObject ;
2011-08-07 19:08:56 +04:00
# define pyldb_Module_AsModule(pyobj) ((PyLdbModuleObject *)pyobj)->mod
2008-12-19 04:22:07 +03:00
2016-03-08 00:39:24 +03:00
/*
* NOTE : el ( and so the return value of
* pyldb_MessageElement_AsMessageElement ( ) ) may not be a valid talloc
* context , it could be part of an array
*/
2008-12-23 07:07:29 +03:00
typedef struct {
2010-12-30 22:11:59 +03:00
PyObject_HEAD
2008-12-23 07:07:29 +03:00
TALLOC_CTX * mem_ctx ;
2010-04-20 09:33:00 +04:00
struct ldb_message_element * el ;
2008-12-23 07:07:29 +03:00
} PyLdbMessageElementObject ;
2016-03-08 00:39:24 +03:00
2011-08-07 19:08:56 +04:00
# define pyldb_MessageElement_AsMessageElement(pyobj) ((PyLdbMessageElementObject *)pyobj)->el
2008-12-19 19:08:35 +03:00
2008-12-23 07:07:29 +03:00
typedef struct {
PyObject_HEAD
TALLOC_CTX * mem_ctx ;
2010-04-20 09:33:00 +04:00
struct ldb_parse_tree * tree ;
2008-12-23 07:07:29 +03:00
} PyLdbTreeObject ;
2011-08-07 19:08:56 +04:00
# define pyldb_Tree_AsTree(pyobj) ((PyLdbTreeObject *)pyobj)->tree
2008-12-19 19:08:35 +03:00
2011-02-07 09:50:36 +03:00
typedef struct {
PyObject_HEAD
TALLOC_CTX * mem_ctx ;
PyObject * msgs ;
PyObject * referals ;
PyObject * controls ;
} PyLdbResultObject ;
typedef struct {
PyObject_HEAD
TALLOC_CTX * mem_ctx ;
struct ldb_control * data ;
} PyLdbControlObject ;
2016-11-08 11:18:52 +03:00
# define PyErr_LDB_ERROR_IS_ERR_RAISE(err,ret,ldb) do { \
2008-12-19 19:08:35 +03:00
if ( ret ! = LDB_SUCCESS ) { \
2009-04-23 03:21:47 +04:00
PyErr_SetLdbError ( err , ret , ldb ) ; \
2008-12-19 19:08:35 +03:00
return NULL ; \
2016-11-08 11:18:52 +03:00
} \
} while ( 0 )
2008-12-19 19:08:35 +03:00
2009-04-23 03:21:47 +04:00
/* Picked out of thin air. To do this properly, we should probably have some part of the
* errors in LDB be allocated to bindings ? */
# define LDB_ERR_PYTHON_EXCEPTION 142
2008-12-19 04:22:07 +03:00
# endif /* _PYLDB_H_ */