2004-11-16 12:00:52 +03:00
/*
ldb database library
Copyright ( C ) Andrew Tridgell 2004
Copyright ( C ) Stefan Metzmacher 2004
* * 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 2 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 , write to the Free Software
Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
/*
* Name : ldb
*
* Component : ldb private header
*
* Description : defines internal ldb structures used by th esubsystem and modules
*
* Author : Andrew Tridgell
* Author : Stefan Metzmacher
*/
# ifndef _LDB_PRIVATE_H_
# define _LDB_PRIVATE_H_ 1
struct ldb_context ;
struct ldb_module_ops ;
/* basic module structure */
struct ldb_module {
struct ldb_module * prev , * next ;
struct ldb_context * ldb ;
void * private_data ;
const struct ldb_module_ops * ops ;
} ;
/*
these function pointers define the operations that a ldb module must perform
they correspond exactly to the ldb_ * ( ) interface
*/
struct ldb_module_ops {
const char * name ;
int ( * search ) ( struct ldb_module * , const char * , enum ldb_scope ,
const char * , const char * const [ ] , struct ldb_message * * * ) ;
2005-06-13 13:10:17 +04:00
int ( * search_bytree ) ( struct ldb_module * , const char * , enum ldb_scope ,
struct ldb_parse_tree * , const char * const [ ] , struct ldb_message * * * ) ;
2004-11-16 12:00:52 +03:00
int ( * add_record ) ( struct ldb_module * , const struct ldb_message * ) ;
int ( * modify_record ) ( struct ldb_module * , const struct ldb_message * ) ;
int ( * delete_record ) ( struct ldb_module * , const char * ) ;
int ( * rename_record ) ( struct ldb_module * , const char * , const char * ) ;
2004-11-21 18:51:54 +03:00
int ( * named_lock ) ( struct ldb_module * , const char * ) ;
int ( * named_unlock ) ( struct ldb_module * , const char * ) ;
2004-11-16 12:00:52 +03:00
const char * ( * errstring ) ( struct ldb_module * ) ;
} ;
/*
every ldb connection is started by establishing a ldb_context
*/
struct ldb_context {
/* the operations provided by the backend */
struct ldb_module * modules ;
2005-01-02 10:49:29 +03:00
/* debugging operations */
2004-11-16 12:00:52 +03:00
struct ldb_debug_ops debug_ops ;
} ;
2005-02-27 14:35:47 +03:00
/* the modules init function */
typedef struct ldb_module * ( * ldb_module_init_function ) ( struct ldb_context * ldb , const char * options [ ] ) ;
2005-06-14 05:35:44 +04:00
# ifndef ARRAY_SIZE
# define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
# endif
2005-06-18 11:42:21 +04:00
/*
simplify out of memory handling
*/
# define ldb_oom(ldb) ldb_debug(ldb, LDB_DEBUG_FATAL, "ldb out of memory at %s:%d\n", __FILE__, __LINE__)
2004-11-16 12:00:52 +03:00
/* The following definitions come from lib/ldb/common/ldb_modules.c */
int ldb_load_modules ( struct ldb_context * ldb , const char * options [ ] ) ;
int ldb_next_search ( struct ldb_module * module ,
const char * base ,
enum ldb_scope scope ,
const char * expression ,
const char * const * attrs , struct ldb_message * * * res ) ;
2005-06-13 13:10:17 +04:00
int ldb_next_search_bytree ( struct ldb_module * module ,
const char * base ,
enum ldb_scope scope ,
struct ldb_parse_tree * tree ,
const char * const * attrs , struct ldb_message * * * res ) ;
2004-11-16 12:00:52 +03:00
int ldb_next_add_record ( struct ldb_module * module , const struct ldb_message * message ) ;
int ldb_next_modify_record ( struct ldb_module * module , const struct ldb_message * message ) ;
int ldb_next_delete_record ( struct ldb_module * module , const char * dn ) ;
int ldb_next_rename_record ( struct ldb_module * module , const char * olddn , const char * newdn ) ;
2004-11-21 18:51:54 +03:00
int ldb_next_named_lock ( struct ldb_module * module , const char * lockname ) ;
int ldb_next_named_unlock ( struct ldb_module * module , const char * lockname ) ;
2004-11-16 12:00:52 +03:00
const char * ldb_next_errstring ( struct ldb_module * module ) ;
/* The following definitions come from lib/ldb/common/ldb_debug.c */
void ldb_debug ( struct ldb_context * ldb , enum ldb_debug_level level , const char * fmt , . . . ) PRINTF_ATTRIBUTE ( 3 , 4 ) ;
/* The following definitions come from lib/ldb/common/ldb_ldif.c */
int ldb_should_b64_encode ( const struct ldb_val * val ) ;
2005-06-18 11:42:21 +04:00
int ltdb_connect ( struct ldb_context * ldb , const char * url ,
unsigned int flags ,
const char * options [ ] ) ;
int lldb_connect ( struct ldb_context * ldb , const char * url ,
unsigned int flags ,
const char * options [ ] ) ;
int ildb_connect ( struct ldb_context * ldb ,
const char * url ,
unsigned int flags ,
const char * options [ ] ) ;
int lsqlite3_connect ( struct ldb_context * ldb ,
const char * url ,
unsigned int flags ,
const char * options [ ] ) ;
2004-11-16 12:00:52 +03:00
struct ldb_module * timestamps_module_init ( struct ldb_context * ldb , const char * options [ ] ) ;
2005-05-22 14:02:53 +04:00
struct ldb_module * schema_module_init ( struct ldb_context * ldb , const char * options [ ] ) ;
2004-11-16 12:00:52 +03:00
# endif