1/* $OpenLDAP$ */
2/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
3 *
4 * Copyright 1998-2011 The OpenLDAP Foundation.
5 * Portions Copyright 1997,2002,2003 IBM Corporation.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted only as authorized by the OpenLDAP
10 * Public License.
11 *
12 * A copy of this license is available in file LICENSE in the
13 * top-level directory of the distribution or, alternatively, at
14 * <http://www.OpenLDAP.org/license.html>.
15 */
16
17/*
18 * This header is used in development of SLAPI plugins for
19 * OpenLDAP slapd(8) and other directory servers supporting
20 * this interface.  Your portability mileage may vary.
21 */
22
23#ifndef _SLAPI_PLUGIN_H
24#define _SLAPI_PLUGIN_H
25
26#include <ldap.h>
27
28typedef struct slapi_pblock		Slapi_PBlock;
29typedef struct slapi_entry		Slapi_Entry;
30typedef struct slapi_attr		Slapi_Attr;
31typedef struct slapi_value		Slapi_Value;
32typedef struct slapi_valueset		Slapi_ValueSet;
33typedef struct slapi_filter		Slapi_Filter;
34typedef struct BackendDB		Slapi_Backend;
35typedef struct Operation		Slapi_Operation;
36typedef struct Connection		Slapi_Connection;
37typedef struct slapi_dn			Slapi_DN;
38typedef struct slapi_rdn		Slapi_RDN;
39typedef struct slapi_mod		Slapi_Mod;
40typedef struct slapi_mods		Slapi_Mods;
41typedef struct slapi_componentid	Slapi_ComponentId;
42
43#define SLAPI_ATTR_UNIQUEID	"entryUUID"
44#define SLAPI_ATTR_OBJECTCLASS	"objectClass"
45
46/* pblock routines */
47int slapi_pblock_get( Slapi_PBlock *pb, int arg, void *value );
48int slapi_pblock_set( Slapi_PBlock *pb, int arg, void *value );
49Slapi_PBlock *slapi_pblock_new( void );
50void slapi_pblock_destroy( Slapi_PBlock *pb );
51
52/* entry/attr/dn routines */
53Slapi_Entry *slapi_str2entry( char *s, int flags );
54#define SLAPI_STR2ENTRY_REMOVEDUPVALS	1
55#define SLAPI_STR2ENTRY_ADDRDNVALS	2
56#define SLAPI_STR2ENTRY_BIGENTRY	4
57#define SLAPI_STR2ENTRY_TOMBSTONE_CHECK	8
58#define SLAPI_STR2ENTRY_IGNORE_STATE	16
59#define SLAPI_STR2ENTRY_INCLUDE_VERSION_STR	32
60#define SLAPI_STR2ENTRY_EXPAND_OBJECTCLASSES	64
61#define SLAPI_STR2ENTRY_NOT_WELL_FORMED_LDIF	128
62char *slapi_entry2str( Slapi_Entry *e, int *len );
63char *slapi_entry_get_dn( Slapi_Entry *e );
64int slapi_x_entry_get_id( Slapi_Entry *e );
65void slapi_entry_set_dn( Slapi_Entry *e, char *dn );
66Slapi_Entry *slapi_entry_dup( Slapi_Entry *e );
67int slapi_entry_attr_delete( Slapi_Entry *e, char *type );
68Slapi_Entry *slapi_entry_alloc();
69void slapi_entry_free( Slapi_Entry *e );
70int slapi_entry_attr_merge( Slapi_Entry *e, char *type, struct berval **vals );
71int slapi_entry_attr_find( Slapi_Entry *e, char *type, Slapi_Attr **attr );
72char *slapi_entry_attr_get_charptr( const Slapi_Entry *e, const char *type );
73int slapi_entry_attr_get_int( const Slapi_Entry *e, const char *type );
74long slapi_entry_attr_get_long( const Slapi_Entry *e, const char *type );
75unsigned int slapi_entry_attr_get_uint( const Slapi_Entry *e, const char *type );
76unsigned long slapi_entry_attr_get_ulong( const Slapi_Entry *e, const char *type );
77int slapi_attr_get_values( Slapi_Attr *attr, struct berval ***vals );
78char *slapi_dn_normalize( char *dn );
79char *slapi_dn_normalize_case( char *dn );
80int slapi_dn_issuffix( char *dn, char *suffix );
81char *slapi_dn_beparent( Slapi_PBlock *pb, const char *dn );
82int slapi_dn_isbesuffix( Slapi_PBlock *pb, char *dn );
83char *slapi_dn_parent( const char *dn );
84int slapi_dn_isparent( const char *parentdn, const char *childdn );
85char *slapi_dn_ignore_case( char *dn );
86int slapi_rdn2typeval( char *rdn, char **type, struct berval *bv );
87char *slapi_dn_plus_rdn(const char *dn, const char *rdn);
88
89/* DS 5.x SLAPI */
90int slapi_access_allowed( Slapi_PBlock *pb, Slapi_Entry *e, char *attr, struct berval *val, int access );
91int slapi_acl_check_mods( Slapi_PBlock *pb, Slapi_Entry *e, LDAPMod **mods, char **errbuf );
92Slapi_Attr *slapi_attr_new( void );
93Slapi_Attr *slapi_attr_init( Slapi_Attr *a, const char *type );
94void slapi_attr_free( Slapi_Attr **a );
95Slapi_Attr *slapi_attr_dup( const Slapi_Attr *attr );
96int slapi_attr_add_value( Slapi_Attr *a, const Slapi_Value *v );
97int slapi_attr_type2plugin( const char *type, void **pi );
98int slapi_attr_get_type( const Slapi_Attr *attr, char **type );
99int slapi_attr_get_oid_copy( const Slapi_Attr *attr, char **oidp );
100int slapi_attr_get_flags( const Slapi_Attr *attr, unsigned long *flags );
101int slapi_attr_flag_is_set( const Slapi_Attr *attr, unsigned long flag );
102int slapi_attr_value_cmp( const Slapi_Attr *attr, const struct berval *v1, const struct berval *v2 );
103int slapi_attr_value_find( const Slapi_Attr *a, struct berval *v );
104#define SLAPI_TYPE_CMP_EXACT	0
105#define SLAPI_TYPE_CMP_BASE	1
106#define SLAPI_TYPE_CMP_SUBTYPE	2
107int slapi_attr_type_cmp( const char *t1, const char *t2, int opt );
108int slapi_attr_types_equivalent( const char *t1, const char *t2 );
109int slapi_attr_first_value( Slapi_Attr *a, Slapi_Value **v );
110int slapi_attr_next_value( Slapi_Attr *a, int hint, Slapi_Value **v );
111int slapi_attr_get_numvalues( const Slapi_Attr *a, int *numValues );
112int slapi_attr_get_valueset( const Slapi_Attr *a, Slapi_ValueSet **vs );
113int slapi_attr_get_bervals_copy( Slapi_Attr *a, struct berval ***vals );
114int slapi_entry_attr_hasvalue( Slapi_Entry *e, const char *type, const char *value );
115int slapi_entry_attr_merge_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
116void slapi_entry_attr_set_charptr(Slapi_Entry* e, const char *type, const char *value);
117void slapi_entry_attr_set_int( Slapi_Entry* e, const char *type, int l);
118void slapi_entry_attr_set_uint( Slapi_Entry* e, const char *type, unsigned int l);
119void slapi_entry_attr_set_long(Slapi_Entry* e, const char *type, long l);
120void slapi_entry_attr_set_ulong(Slapi_Entry* e, const char *type, unsigned long l);
121int slapi_entry_has_children(const Slapi_Entry *e);
122size_t slapi_entry_size(Slapi_Entry *e);
123int slapi_is_rootdse( const char *dn );
124int slapi_entry_attr_merge_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
125int slapi_entry_add_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
126int slapi_entry_add_valueset(Slapi_Entry *e, const char *type, Slapi_ValueSet *vs);
127int slapi_entry_delete_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
128int slapi_entry_merge_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
129int slapi_entry_attr_replace_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
130int slapi_entry_add_value(Slapi_Entry *e, const char *type, const Slapi_Value *value);
131int slapi_entry_add_string(Slapi_Entry *e, const char *type, const char *value);
132int slapi_entry_delete_string(Slapi_Entry *e, const char *type, const char *value);
133int slapi_entry_first_attr( const Slapi_Entry *e, Slapi_Attr **attr );
134int slapi_entry_next_attr( const Slapi_Entry *e, Slapi_Attr *prevattr, Slapi_Attr **attr );
135const char *slapi_entry_get_uniqueid( const Slapi_Entry *e );
136void slapi_entry_set_uniqueid( Slapi_Entry *e, char *uniqueid );
137int slapi_entry_schema_check( Slapi_PBlock *pb, Slapi_Entry *e );
138int slapi_entry_rdn_values_present( const Slapi_Entry *e );
139int slapi_entry_add_rdn_values( Slapi_Entry *e );
140char *slapi_attr_syntax_normalize( const char *s );
141
142Slapi_Value *slapi_value_new( void );
143Slapi_Value *slapi_value_new_berval(const struct berval *bval);
144Slapi_Value *slapi_value_new_value(const Slapi_Value *v);
145Slapi_Value *slapi_value_new_string(const char *s);
146Slapi_Value *slapi_value_init(Slapi_Value *v);
147Slapi_Value *slapi_value_init_berval(Slapi_Value *v, struct berval *bval);
148Slapi_Value *slapi_value_init_string(Slapi_Value *v, const char *s);
149Slapi_Value *slapi_value_dup(const Slapi_Value *v);
150void slapi_value_free(Slapi_Value **value);
151const struct berval *slapi_value_get_berval( const Slapi_Value *value );
152Slapi_Value *slapi_value_set_berval( Slapi_Value *value, const struct berval *bval );
153Slapi_Value *slapi_value_set_value( Slapi_Value *value, const Slapi_Value *vfrom);
154Slapi_Value *slapi_value_set( Slapi_Value *value, void *val, unsigned long len);
155int slapi_value_set_string(Slapi_Value *value, const char *strVal);
156int slapi_value_set_int(Slapi_Value *value, int intVal);
157const char*slapi_value_get_string(const Slapi_Value *value);
158int slapi_value_get_int(const Slapi_Value *value);
159unsigned int slapi_value_get_uint(const Slapi_Value *value);
160long slapi_value_get_long(const Slapi_Value *value);
161unsigned long slapi_value_get_ulong(const Slapi_Value *value);
162size_t slapi_value_get_length(const Slapi_Value *value);
163int slapi_value_compare(const Slapi_Attr *a, const Slapi_Value *v1, const Slapi_Value *v2);
164
165Slapi_ValueSet *slapi_valueset_new( void );
166void slapi_valueset_free(Slapi_ValueSet *vs);
167void slapi_valueset_init(Slapi_ValueSet *vs);
168void slapi_valueset_done(Slapi_ValueSet *vs);
169void slapi_valueset_add_value(Slapi_ValueSet *vs, const Slapi_Value *addval);
170int slapi_valueset_first_value( Slapi_ValueSet *vs, Slapi_Value **v );
171int slapi_valueset_next_value( Slapi_ValueSet *vs, int index, Slapi_Value **v);
172int slapi_valueset_count( const Slapi_ValueSet *vs);
173void slapi_valueset_set_valueset(Slapi_ValueSet *vs1, const Slapi_ValueSet *vs2);
174
175/* DNs */
176Slapi_DN *slapi_sdn_new( void );
177Slapi_DN *slapi_sdn_new_dn_byval( const char *dn );
178Slapi_DN *slapi_sdn_new_ndn_byval( const char *ndn );
179Slapi_DN *slapi_sdn_new_dn_byref( const char *dn );
180Slapi_DN *slapi_sdn_new_ndn_byref( const char *ndn );
181Slapi_DN *slapi_sdn_new_dn_passin( const char *dn );
182Slapi_DN *slapi_sdn_set_dn_byval( Slapi_DN *sdn, const char *dn );
183Slapi_DN *slapi_sdn_set_dn_byref( Slapi_DN *sdn, const char *dn );
184Slapi_DN *slapi_sdn_set_dn_passin( Slapi_DN *sdn, const char *dn );
185Slapi_DN *slapi_sdn_set_ndn_byval( Slapi_DN *sdn, const char *ndn );
186Slapi_DN *slapi_sdn_set_ndn_byref( Slapi_DN *sdn, const char *ndn );
187void slapi_sdn_done( Slapi_DN *sdn );
188void slapi_sdn_free( Slapi_DN **sdn );
189const char * slapi_sdn_get_dn( const Slapi_DN *sdn );
190const char * slapi_sdn_get_ndn( const Slapi_DN *sdn );
191void slapi_sdn_get_parent( const Slapi_DN *sdn,Slapi_DN *sdn_parent );
192void slapi_sdn_get_backend_parent( const Slapi_DN *sdn, Slapi_DN *sdn_parent, const Slapi_Backend *backend );
193Slapi_DN * slapi_sdn_dup( const Slapi_DN *sdn );
194void slapi_sdn_copy( const Slapi_DN *from, Slapi_DN *to );
195int slapi_sdn_compare( const Slapi_DN *sdn1, const Slapi_DN *sdn2 );
196int slapi_sdn_isempty( const Slapi_DN *sdn );
197int slapi_sdn_issuffix(const Slapi_DN *sdn, const Slapi_DN *suffixsdn );
198int slapi_sdn_isparent( const Slapi_DN *parent, const Slapi_DN *child );
199int slapi_sdn_isgrandparent( const Slapi_DN *parent, const Slapi_DN *child );
200int slapi_sdn_get_ndn_len( const Slapi_DN *sdn );
201int slapi_sdn_scope_test( const Slapi_DN *dn, const Slapi_DN *base, int scope );
202void slapi_sdn_get_rdn( const Slapi_DN *sdn,Slapi_RDN *rdn );
203Slapi_DN *slapi_sdn_set_rdn( Slapi_DN *sdn, const Slapi_RDN *rdn );
204Slapi_DN *slapi_sdn_set_parent( Slapi_DN *sdn, const Slapi_DN *parentdn );
205int slapi_sdn_is_rdn_component( const Slapi_DN *rdn, const Slapi_Attr *a, const Slapi_Value *v );
206char * slapi_moddn_get_newdn( Slapi_DN *dn_olddn, char *newrdn, char *newsuperiordn );
207
208/* RDNs */
209Slapi_RDN *slapi_rdn_new( void );
210Slapi_RDN *slapi_rdn_new_dn( const char *dn );
211Slapi_RDN *slapi_rdn_new_sdn( const Slapi_DN *sdn );
212Slapi_RDN *slapi_rdn_new_rdn( const Slapi_RDN *fromrdn );
213void slapi_rdn_init( Slapi_RDN *rdn );
214void slapi_rdn_init_dn( Slapi_RDN *rdn, const char *dn );
215void slapi_rdn_init_sdn( Slapi_RDN *rdn, const Slapi_DN *sdn );
216void slapi_rdn_init_rdn( Slapi_RDN *rdn, const Slapi_RDN *fromrdn );
217void slapi_rdn_set_dn( Slapi_RDN *rdn, const char *dn );
218void slapi_rdn_set_sdn( Slapi_RDN *rdn, const Slapi_DN *sdn );
219void slapi_rdn_set_rdn( Slapi_RDN *rdn, const Slapi_RDN *fromrdn );
220void slapi_rdn_free( Slapi_RDN **rdn );
221void slapi_rdn_done( Slapi_RDN *rdn );
222int slapi_rdn_get_first( Slapi_RDN *rdn, char **type, char **value );
223int slapi_rdn_get_next( Slapi_RDN *rdn, int index, char **type, char **value );
224int slapi_rdn_get_index( Slapi_RDN *rdn, const char *type, const char *value, size_t length );
225int slapi_rdn_get_index_attr( Slapi_RDN *rdn, const char *type, char **value );
226int slapi_rdn_contains( Slapi_RDN *rdn, const char *type, const char *value,size_t length );
227int slapi_rdn_contains_attr( Slapi_RDN *rdn, const char *type, char **value );
228int slapi_rdn_add( Slapi_RDN *rdn, const char *type, const char *value );
229int slapi_rdn_remove_index( Slapi_RDN *rdn, int atindex );
230int slapi_rdn_remove( Slapi_RDN *rdn, const char *type, const char *value, size_t length );
231int slapi_rdn_remove_attr( Slapi_RDN *rdn, const char *type );
232int slapi_rdn_isempty( const Slapi_RDN *rdn );
233int slapi_rdn_get_num_components( Slapi_RDN *rdn );
234int slapi_rdn_compare( Slapi_RDN *rdn1, Slapi_RDN *rdn2 );
235const char *slapi_rdn_get_rdn( const Slapi_RDN *rdn );
236const char *slapi_rdn_get_nrdn( const Slapi_RDN *rdn );
237Slapi_DN *slapi_sdn_add_rdn( Slapi_DN *sdn, const Slapi_RDN *rdn );
238
239/* locks and synchronization */
240typedef struct slapi_mutex	Slapi_Mutex;
241typedef struct slapi_condvar	Slapi_CondVar;
242Slapi_Mutex *slapi_new_mutex( void );
243void slapi_destroy_mutex( Slapi_Mutex *mutex );
244void slapi_lock_mutex( Slapi_Mutex *mutex );
245int slapi_unlock_mutex( Slapi_Mutex *mutex );
246Slapi_CondVar *slapi_new_condvar( Slapi_Mutex *mutex );
247void slapi_destroy_condvar( Slapi_CondVar *cvar );
248int slapi_wait_condvar( Slapi_CondVar *cvar, struct timeval *timeout );
249int slapi_notify_condvar( Slapi_CondVar *cvar, int notify_all );
250
251/* thread-safe LDAP connections */
252LDAP *slapi_ldap_init( char *ldaphost, int ldapport, int secure, int shared );
253void slapi_ldap_unbind( LDAP *ld );
254
255char *slapi_ch_malloc( unsigned long size );
256void slapi_ch_free( void **ptr );
257void slapi_ch_free_string( char **ptr );
258char *slapi_ch_calloc( unsigned long nelem, unsigned long size );
259char *slapi_ch_realloc( char *block, unsigned long size );
260char *slapi_ch_strdup( const char *s );
261void slapi_ch_array_free( char **arrayp );
262struct berval *slapi_ch_bvdup(const struct berval *v);
263struct berval **slapi_ch_bvecdup(const struct berval **v);
264
265/* LDAP V3 routines */
266int slapi_control_present( LDAPControl **controls, char *oid,
267	struct berval **val, int *iscritical);
268void slapi_register_supported_control(char *controloid,
269	unsigned long controlops);
270#define SLAPI_OPERATION_BIND            0x00000001L
271#define SLAPI_OPERATION_UNBIND          0x00000002L
272#define SLAPI_OPERATION_SEARCH          0x00000004L
273#define SLAPI_OPERATION_MODIFY          0x00000008L
274#define SLAPI_OPERATION_ADD             0x00000010L
275#define SLAPI_OPERATION_DELETE          0x00000020L
276#define SLAPI_OPERATION_MODDN           0x00000040L
277#define SLAPI_OPERATION_MODRDN          SLAPI_OPERATION_MODDN
278#define SLAPI_OPERATION_COMPARE         0x00000080L
279#define SLAPI_OPERATION_ABANDON         0x00000100L
280#define SLAPI_OPERATION_EXTENDED        0x00000200L
281#define SLAPI_OPERATION_ANY             0xFFFFFFFFL
282#define SLAPI_OPERATION_NONE            0x00000000L
283int slapi_get_supported_controls(char ***ctrloidsp, unsigned long **ctrlopsp);
284LDAPControl *slapi_dup_control(LDAPControl *ctrl);
285void slapi_register_supported_saslmechanism(char *mechanism);
286char **slapi_get_supported_saslmechanisms();
287char **slapi_get_supported_extended_ops(void);
288
289/* operation */
290int slapi_op_abandoned( Slapi_PBlock *pb );
291unsigned long slapi_op_get_type(Slapi_Operation * op);
292void slapi_operation_set_flag(Slapi_Operation *op, unsigned long flag);
293void slapi_operation_clear_flag(Slapi_Operation *op, unsigned long flag);
294int slapi_operation_is_flag_set(Slapi_Operation *op, unsigned long flag);
295char *slapi_op_type_to_string(unsigned long type);
296
297/* send ldap result back */
298void slapi_send_ldap_result( Slapi_PBlock *pb, int err, char *matched,
299	char *text, int nentries, struct berval **urls );
300int slapi_send_ldap_search_entry( Slapi_PBlock *pb, Slapi_Entry *e,
301	LDAPControl **ectrls, char **attrs, int attrsonly );
302int slapi_send_ldap_search_reference( Slapi_PBlock *pb, Slapi_Entry *e,
303	struct berval **urls, LDAPControl **ectrls, struct berval **v2refs );
304
305/* filter routines */
306Slapi_Filter *slapi_str2filter( char *str );
307Slapi_Filter *slapi_filter_dup( Slapi_Filter *f );
308void slapi_filter_free( Slapi_Filter *f, int recurse );
309int slapi_filter_get_choice( Slapi_Filter *f);
310int slapi_filter_get_ava( Slapi_Filter *f, char **type, struct berval **bval );
311Slapi_Filter *slapi_filter_list_first( Slapi_Filter *f );
312Slapi_Filter *slapi_filter_list_next( Slapi_Filter *f, Slapi_Filter *fprev );
313int slapi_filter_get_attribute_type( Slapi_Filter *f, char **type );
314int slapi_x_filter_set_attribute_type( Slapi_Filter *f, const char *type );
315int slapi_filter_get_subfilt( Slapi_Filter *f, char **type, char **initial,
316	char ***any, char **final );
317Slapi_Filter *slapi_filter_join( int ftype, Slapi_Filter *f1, Slapi_Filter *f2);
318int slapi_x_filter_append( int choice, Slapi_Filter **pContainingFilter,
319	Slapi_Filter **pNextFilter, Slapi_Filter *filterToAppend );
320int slapi_filter_test( Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Filter *f,
321	int verify_access );
322int slapi_filter_test_simple( Slapi_Entry *e, Slapi_Filter *f );
323typedef int (*FILTER_APPLY_FN)( Slapi_Filter *f, void *arg );
324int slapi_filter_apply( Slapi_Filter *f, FILTER_APPLY_FN fn, void *arg, int *error_code );
325#define SLAPI_FILTER_SCAN_STOP			-1 /* set by callback */
326#define SLAPI_FILTER_SCAN_ERROR			-2 /* set by callback */
327#define SLAPI_FILTER_SCAN_NOMORE		0 /* set by callback */
328#define SLAPI_FILTER_SCAN_CONTINUE		1 /* set by callback */
329#define SLAPI_FILTER_UNKNOWN_FILTER_TYPE	2 /* set by slapi_filter_apply() */
330
331/* internal add/delete/search/modify routines */
332Slapi_PBlock *slapi_search_internal( char *base, int scope, char *filter,
333	LDAPControl **controls, char **attrs, int attrsonly );
334Slapi_PBlock *slapi_modify_internal( char *dn, LDAPMod **mods,
335        LDAPControl **controls, int log_change );
336Slapi_PBlock *slapi_add_internal( char * dn, LDAPMod **attrs,
337	LDAPControl **controls, int log_changes );
338Slapi_PBlock *slapi_add_entry_internal( Slapi_Entry * e,
339	LDAPControl **controls, int log_change );
340Slapi_PBlock *slapi_delete_internal( char * dn,  LDAPControl **controls,
341	int log_change );
342Slapi_PBlock *slapi_modrdn_internal( char * olddn, char * newrdn,
343	int deloldrdn, LDAPControl **controls,
344	int log_change );
345Slapi_PBlock *slapi_rename_internal( const char * olddn, const char *newrdn,
346	const char *newsuperior, int delolrdn,
347	LDAPControl **controls, int log_change );
348void slapi_free_search_results_internal(Slapi_PBlock *pb);
349
350/* new internal add/delete/search/modify routines */
351typedef void (*plugin_result_callback)( int rc, void *callback_data );
352typedef int (*plugin_referral_entry_callback)( char * referral,
353	void *callback_data );
354typedef int (*plugin_search_entry_callback)( Slapi_Entry *e,
355	void *callback_data );
356void slapi_free_search_results_internal( Slapi_PBlock *pb );
357
358#define SLAPI_OP_FLAG_NEVER_CHAIN	0x0800
359
360int slapi_search_internal_pb( Slapi_PBlock *pb );
361int slapi_search_internal_callback_pb( Slapi_PBlock *pb, void *callback_data,
362	plugin_result_callback prc, plugin_search_entry_callback psec,
363	plugin_referral_entry_callback prec );
364int slapi_add_internal_pb( Slapi_PBlock *pb );
365int slapi_modify_internal_pb( Slapi_PBlock *pb );
366int slapi_modrdn_internal_pb( Slapi_PBlock *pb );
367int slapi_delete_internal_pb( Slapi_PBlock *pb );
368
369int slapi_seq_internal_callback_pb(Slapi_PBlock *pb, void *callback_data,
370        plugin_result_callback res_callback,
371        plugin_search_entry_callback srch_callback,
372        plugin_referral_entry_callback ref_callback);
373
374void slapi_search_internal_set_pb( Slapi_PBlock *pb, const char *base,
375	int scope, const char *filter, char **attrs, int attrsonly,
376	LDAPControl **controls, const char *uniqueid,
377	Slapi_ComponentId *plugin_identity, int operation_flags );
378void slapi_add_entry_internal_set_pb( Slapi_PBlock *pb, Slapi_Entry *e,
379	LDAPControl **controls, Slapi_ComponentId *plugin_identity,
380	int operation_flags );
381int slapi_add_internal_set_pb( Slapi_PBlock *pb, const char *dn,
382	LDAPMod **attrs, LDAPControl **controls,
383	Slapi_ComponentId *plugin_identity, int operation_flags );
384void slapi_modify_internal_set_pb( Slapi_PBlock *pb, const char *dn,
385	LDAPMod **mods, LDAPControl **controls, const char *uniqueid,
386	Slapi_ComponentId *plugin_identity, int operation_flags );
387void slapi_rename_internal_set_pb( Slapi_PBlock *pb, const char *olddn,
388	const char *newrdn, const char *newsuperior, int deloldrdn,
389	LDAPControl **controls, const char *uniqueid,
390	Slapi_ComponentId *plugin_identity, int operation_flags );
391void slapi_delete_internal_set_pb( Slapi_PBlock *pb, const char *dn,
392	LDAPControl **controls, const char *uniqueid,
393	Slapi_ComponentId *plugin_identity, int operation_flags );
394void slapi_seq_internal_set_pb( Slapi_PBlock *pb, char *ibase, int type,
395	char *attrname, char *val, char **attrs, int attrsonly,
396	LDAPControl **controls, Slapi_ComponentId *plugin_identity,
397	int operation_flags );
398
399/* connection related routines */
400int slapi_is_connection_ssl(Slapi_PBlock *pPB, int *isSSL);
401int slapi_get_client_port(Slapi_PBlock *pPB, int *fromPort);
402
403/* computed attributes */
404typedef struct _computed_attr_context computed_attr_context;
405typedef int (*slapi_compute_output_t)(computed_attr_context *c, Slapi_Attr *a, Slapi_Entry *e);
406typedef int (*slapi_compute_callback_t)(computed_attr_context *c, char *type, Slapi_Entry *e, slapi_compute_output_t outputfn);
407typedef int (*slapi_search_rewrite_callback_t)(Slapi_PBlock *pb);
408int slapi_compute_add_evaluator(slapi_compute_callback_t function);
409int slapi_compute_add_search_rewriter(slapi_search_rewrite_callback_t function);
410int compute_rewrite_search_filter(Slapi_PBlock *pb);
411int compute_evaluator(computed_attr_context *c, char *type, Slapi_Entry *e, slapi_compute_output_t outputfn);
412int slapi_x_compute_get_pblock(computed_attr_context *c, Slapi_PBlock **pb);
413
414/* backend routines */
415void slapi_be_set_readonly( Slapi_Backend *be, int readonly );
416int slapi_be_get_readonly( Slapi_Backend *be );
417const char *slapi_x_be_get_updatedn( Slapi_Backend *be );
418Slapi_Backend *slapi_be_select( const Slapi_DN *sdn );
419
420/* ACL plugins; only SLAPI_PLUGIN_ACL_ALLOW_ACCESS supported now */
421typedef int (*slapi_acl_callback_t)(Slapi_PBlock *pb,
422	Slapi_Entry *e,
423	const char *attr,
424	struct berval *berval,
425	int access,
426	void *state);
427
428/* object extensions */
429typedef void *(*slapi_extension_constructor_fnptr)(void *object, void *parent);
430
431typedef void (*slapi_extension_destructor_fnptr)(void *extension,
432	void *object, void *parent);
433
434int slapi_register_object_extension( const char *pluginname,
435	const char *objectname, slapi_extension_constructor_fnptr constructor,
436	slapi_extension_destructor_fnptr destructor, int *objecttype,
437	int *extensionhandle);
438
439#define SLAPI_EXT_CONNECTION    "Connection"
440#define SLAPI_EXT_OPERATION     "Operation"
441#define SLAPI_EXT_ENTRY         "Entry"
442#define SLAPI_EXT_MTNODE        "Mapping Tree Node"
443
444void *slapi_get_object_extension(int objecttype, void *object,
445	int extensionhandle);
446void slapi_set_object_extension(int objecttype, void *object,
447	int extensionhandle, void *extension);
448
449int slapi_x_backend_get_flags( const Slapi_Backend *be, unsigned long *flags );
450
451/* parameters currently supported */
452
453/*
454 * Attribute flags returned by slapi_attr_get_flags()
455 */
456#define SLAPI_ATTR_FLAG_SINGLE		0x0001
457#define SLAPI_ATTR_FLAG_OPATTR		0x0002
458#define SLAPI_ATTR_FLAG_READONLY	0x0004
459#define SLAPI_ATTR_FLAG_STD_ATTR	SLAPI_ATTR_FLAG_READONLY
460#define SLAPI_ATTR_FLAG_OBSOLETE	0x0040
461#define SLAPI_ATTR_FLAG_COLLECTIVE	0x0080
462#define SLAPI_ATTR_FLAG_NOUSERMOD	0x0100
463
464/*
465 * Backend flags returned by slapi_x_backend_get_flags()
466 */
467#define SLAPI_BACKEND_FLAG_NOLASTMOD		0x0001U
468#define SLAPI_BACKEND_FLAG_NO_SCHEMA_CHECK	0x0002U
469#define SLAPI_BACKEND_FLAG_GLUE_INSTANCE	0x0010U	/* a glue backend */
470#define SLAPI_BACKEND_FLAG_GLUE_SUBORDINATE	0x0020U	/* child of a glue hierarchy */
471#define SLAPI_BACKEND_FLAG_GLUE_LINKED		0x0040U	/* child is connected to parent */
472#define SLAPI_BACKEND_FLAG_OVERLAY		0x0080U	/* this db struct is an overlay */
473#define SLAPI_BACKEND_FLAG_GLOBAL_OVERLAY	0x0100U	/* this db struct is a global overlay */
474#define SLAPI_BACKEND_FLAG_SHADOW		0x8000U /* a shadow */
475#define SLAPI_BACKEND_FLAG_SYNC_SHADOW		0x1000U /* a sync shadow */
476#define SLAPI_BACKEND_FLAG_SLURP_SHADOW		0x2000U /* a slurp shadow */
477
478/*
479 * ACL levels
480 */
481#define SLAPI_ACL_COMPARE       0x01
482#define SLAPI_ACL_SEARCH        0x02
483#define SLAPI_ACL_READ          0x04
484#define SLAPI_ACL_WRITE         0x08
485#define SLAPI_ACL_DELETE        0x10
486#define SLAPI_ACL_ADD           0x20
487#define SLAPI_ACL_SELF          0x40
488#define SLAPI_ACL_PROXY         0x80
489#define SLAPI_ACL_ALL           0x7f
490
491/* plugin types supported */
492
493#define SLAPI_PLUGIN_DATABASE           1
494#define SLAPI_PLUGIN_EXTENDEDOP         2
495#define SLAPI_PLUGIN_PREOPERATION       3
496#define SLAPI_PLUGIN_POSTOPERATION      4
497#define SLAPI_PLUGIN_MATCHINGRULE       5
498#define SLAPI_PLUGIN_SYNTAX             6
499#define SLAPI_PLUGIN_AUDIT              7
500
501/* misc params */
502
503#define SLAPI_BACKEND				130
504#define SLAPI_CONNECTION			131
505#define SLAPI_OPERATION				132
506#define SLAPI_REQUESTOR_ISROOT			133
507#define SLAPI_BE_MONITORDN			134
508#define SLAPI_BE_TYPE           		135
509#define SLAPI_BE_READONLY       		136
510#define SLAPI_BE_LASTMOD       			137
511#define SLAPI_CONN_ID        			139
512
513/* operation params */
514#define SLAPI_OPINITIATED_TIME			140
515#define SLAPI_REQUESTOR_DN			141
516#define SLAPI_IS_REPLICATED_OPERATION		142
517#define SLAPI_REQUESTOR_ISUPDATEDN		SLAPI_IS_REPLICATED_OPERATION
518
519/* connection  structure params*/
520#define SLAPI_CONN_DN        			143
521#define SLAPI_CONN_AUTHTYPE    			144
522#define SLAPI_CONN_CLIENTIP			145
523#define SLAPI_CONN_SERVERIP			146
524/* OpenLDAP extensions */
525#define SLAPI_X_CONN_CLIENTPATH			1300
526#define SLAPI_X_CONN_SERVERPATH			1301
527#define SLAPI_X_CONN_IS_UDP			1302
528#define SLAPI_X_CONN_SSF			1303
529#define SLAPI_X_CONN_SASL_CONTEXT		1304
530#define SLAPI_X_OPERATION_DELETE_GLUE_PARENT	1305
531#define SLAPI_X_RELAX			1306
532#define SLAPI_X_MANAGEDIT			SLAPI_X_RELAX
533#define SLAPI_X_OPERATION_NO_SCHEMA_CHECK	1307
534#define SLAPI_X_ADD_STRUCTURAL_CLASS		1308
535#define SLAPI_X_OPERATION_NO_SUBORDINATE_GLUE	1309
536
537/*  Authentication types */
538#define SLAPD_AUTH_NONE   "none"
539#define SLAPD_AUTH_SIMPLE "simple"
540#define SLAPD_AUTH_SSL    "SSL"
541#define SLAPD_AUTH_SASL   "SASL "
542
543/* plugin configuration parmams */
544#define SLAPI_PLUGIN				3
545#define SLAPI_PLUGIN_PRIVATE			4
546#define SLAPI_PLUGIN_TYPE			5
547#define SLAPI_PLUGIN_ARGV			6
548#define SLAPI_PLUGIN_ARGC			7
549#define SLAPI_PLUGIN_VERSION			8
550#define SLAPI_PLUGIN_OPRETURN			9
551#define SLAPI_PLUGIN_OBJECT			10
552#define SLAPI_PLUGIN_DESTROY_FN			11
553#define SLAPI_PLUGIN_DESCRIPTION		12
554#define SLAPI_PLUGIN_IDENTITY			13
555
556/* internal opreations params */
557#define SLAPI_PLUGIN_INTOP_RESULT		15
558#define SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES	16
559#define SLAPI_PLUGIN_INTOP_SEARCH_REFERRALS	17
560
561/* transaction arguments */
562#define SLAPI_PARENT_TXN			190
563#define SLAPI_TXN				191
564
565/* function pointer params for backends */
566#define SLAPI_PLUGIN_DB_BIND_FN			200
567#define SLAPI_PLUGIN_DB_UNBIND_FN		201
568#define SLAPI_PLUGIN_DB_SEARCH_FN		202
569#define SLAPI_PLUGIN_DB_COMPARE_FN		203
570#define SLAPI_PLUGIN_DB_MODIFY_FN		204
571#define SLAPI_PLUGIN_DB_MODRDN_FN		205
572#define SLAPI_PLUGIN_DB_ADD_FN			206
573#define SLAPI_PLUGIN_DB_DELETE_FN		207
574#define SLAPI_PLUGIN_DB_ABANDON_FN		208
575#define SLAPI_PLUGIN_DB_CONFIG_FN		209
576#define SLAPI_PLUGIN_CLOSE_FN			210
577#define SLAPI_PLUGIN_DB_FLUSH_FN		211
578#define SLAPI_PLUGIN_START_FN			212
579#define SLAPI_PLUGIN_DB_SEQ_FN			213
580#define SLAPI_PLUGIN_DB_ENTRY_FN		214
581#define SLAPI_PLUGIN_DB_REFERRAL_FN		215
582#define SLAPI_PLUGIN_DB_RESULT_FN		216
583#define SLAPI_PLUGIN_DB_LDIF2DB_FN		217
584#define SLAPI_PLUGIN_DB_DB2LDIF_FN		218
585#define SLAPI_PLUGIN_DB_BEGIN_FN		219
586#define SLAPI_PLUGIN_DB_COMMIT_FN		220
587#define SLAPI_PLUGIN_DB_ABORT_FN		221
588#define SLAPI_PLUGIN_DB_ARCHIVE2DB_FN		222
589#define SLAPI_PLUGIN_DB_DB2ARCHIVE_FN		223
590#define SLAPI_PLUGIN_DB_NEXT_SEARCH_ENTRY_FN	224
591#define SLAPI_PLUGIN_DB_FREE_RESULT_SET_FN	225
592#define	SLAPI_PLUGIN_DB_SIZE_FN			226
593#define	SLAPI_PLUGIN_DB_TEST_FN			227
594
595
596/*  functions pointers for LDAP V3 extended ops */
597#define SLAPI_PLUGIN_EXT_OP_FN			300
598#define SLAPI_PLUGIN_EXT_OP_OIDLIST		301
599
600/* preoperation */
601#define SLAPI_PLUGIN_PRE_BIND_FN		401
602#define SLAPI_PLUGIN_PRE_UNBIND_FN		402
603#define SLAPI_PLUGIN_PRE_SEARCH_FN		403
604#define SLAPI_PLUGIN_PRE_COMPARE_FN		404
605#define SLAPI_PLUGIN_PRE_MODIFY_FN		405
606#define SLAPI_PLUGIN_PRE_MODRDN_FN		406
607#define SLAPI_PLUGIN_PRE_ADD_FN			407
608#define SLAPI_PLUGIN_PRE_DELETE_FN		408
609#define SLAPI_PLUGIN_PRE_ABANDON_FN		409
610#define SLAPI_PLUGIN_PRE_ENTRY_FN		410
611#define SLAPI_PLUGIN_PRE_REFERRAL_FN		411
612#define SLAPI_PLUGIN_PRE_RESULT_FN		412
613
614/* internal preoperation */
615#define SLAPI_PLUGIN_INTERNAL_PRE_ADD_FN	420
616#define SLAPI_PLUGIN_INTERNAL_PRE_MODIFY_FN	421
617#define SLAPI_PLUGIN_INTERNAL_PRE_MODRDN_FN	422
618#define SLAPI_PLUGIN_INTERNAL_PRE_DELETE_FN	423
619
620/* backend preoperation */
621#define SLAPI_PLUGIN_BE_PRE_ADD_FN		450
622#define SLAPI_PLUGIN_BE_PRE_MODIFY_FN		451
623#define SLAPI_PLUGIN_BE_PRE_MODRDN_FN		452
624#define SLAPI_PLUGIN_BE_PRE_DELETE_FN		453
625
626/* postoperation */
627#define SLAPI_PLUGIN_POST_BIND_FN		501
628#define SLAPI_PLUGIN_POST_UNBIND_FN		502
629#define SLAPI_PLUGIN_POST_SEARCH_FN		503
630#define SLAPI_PLUGIN_POST_COMPARE_FN		504
631#define SLAPI_PLUGIN_POST_MODIFY_FN		505
632#define SLAPI_PLUGIN_POST_MODRDN_FN		506
633#define SLAPI_PLUGIN_POST_ADD_FN		507
634#define SLAPI_PLUGIN_POST_DELETE_FN		508
635#define SLAPI_PLUGIN_POST_ABANDON_FN		509
636#define SLAPI_PLUGIN_POST_ENTRY_FN		510
637#define SLAPI_PLUGIN_POST_REFERRAL_FN		511
638#define SLAPI_PLUGIN_POST_RESULT_FN		512
639
640/* internal postoperation */
641#define SLAPI_PLUGIN_INTERNAL_POST_ADD_FN	520
642#define SLAPI_PLUGIN_INTERNAL_POST_MODIFY_FN	521
643#define SLAPI_PLUGIN_INTERNAL_POST_MODRDN_FN	522
644#define SLAPI_PLUGIN_INTERNAL_POST_DELETE_FN	523
645
646/* backend postoperation */
647#define SLAPI_PLUGIN_BE_POST_ADD_FN		550
648#define SLAPI_PLUGIN_BE_POST_MODIFY_FN		551
649#define SLAPI_PLUGIN_BE_POST_MODRDN_FN		552
650#define SLAPI_PLUGIN_BE_POST_DELETE_FN		553
651
652#define SLAPI_OPERATION_TYPE			590
653#define SLAPI_OPERATION_MSGID			591
654
655#define SLAPI_PLUGIN_MR_FILTER_CREATE_FN	600
656#define SLAPI_PLUGIN_MR_INDEXER_CREATE_FN	601
657#define SLAPI_PLUGIN_MR_FILTER_MATCH_FN		602
658#define SLAPI_PLUGIN_MR_FILTER_INDEX_FN		603
659#define SLAPI_PLUGIN_MR_FILTER_RESET_FN		604
660#define SLAPI_PLUGIN_MR_INDEX_FN		605
661#define SLAPI_PLUGIN_MR_OID			610
662#define SLAPI_PLUGIN_MR_TYPE			611
663#define SLAPI_PLUGIN_MR_VALUE			612
664#define SLAPI_PLUGIN_MR_VALUES			613
665#define SLAPI_PLUGIN_MR_KEYS			614
666#define SLAPI_PLUGIN_MR_FILTER_REUSABLE		615
667#define SLAPI_PLUGIN_MR_QUERY_OPERATOR		616
668#define SLAPI_PLUGIN_MR_USAGE			617
669
670#define SLAPI_MATCHINGRULE_NAME			1
671#define SLAPI_MATCHINGRULE_OID			2
672#define SLAPI_MATCHINGRULE_DESC			3
673#define SLAPI_MATCHINGRULE_SYNTAX		4
674#define SLAPI_MATCHINGRULE_OBSOLETE		5
675
676#define SLAPI_OP_LESS					1
677#define SLAPI_OP_LESS_OR_EQUAL				2
678#define SLAPI_OP_EQUAL					3
679#define SLAPI_OP_GREATER_OR_EQUAL			4
680#define SLAPI_OP_GREATER				5
681#define SLAPI_OP_SUBSTRING				6
682
683#define SLAPI_PLUGIN_MR_USAGE_INDEX		0
684#define SLAPI_PLUGIN_MR_USAGE_SORT		1
685
686#define SLAPI_PLUGIN_SYNTAX_FILTER_AVA		700
687#define SLAPI_PLUGIN_SYNTAX_FILTER_SUB		701
688#define SLAPI_PLUGIN_SYNTAX_VALUES2KEYS		702
689#define SLAPI_PLUGIN_SYNTAX_ASSERTION2KEYS_AVA	703
690#define SLAPI_PLUGIN_SYNTAX_ASSERTION2KEYS_SUB	704
691#define SLAPI_PLUGIN_SYNTAX_NAMES		705
692#define SLAPI_PLUGIN_SYNTAX_OID			706
693#define SLAPI_PLUGIN_SYNTAX_FLAGS		707
694#define SLAPI_PLUGIN_SYNTAX_COMPARE		708
695
696#define SLAPI_PLUGIN_SYNTAX_FLAG_ORKEYS			1
697#define SLAPI_PLUGIN_SYNTAX_FLAG_ORDERING		2
698
699#define SLAPI_PLUGIN_ACL_INIT			730
700#define SLAPI_PLUGIN_ACL_SYNTAX_CHECK		731
701#define SLAPI_PLUGIN_ACL_ALLOW_ACCESS		732
702#define SLAPI_PLUGIN_ACL_MODS_ALLOWED		733
703#define SLAPI_PLUGIN_ACL_MODS_UPDATE		734
704
705#define SLAPI_OPERATION_AUTHTYPE                741
706#define SLAPI_OPERATION_ID                      742
707#define SLAPI_CONN_CERT                         743
708#define SLAPI_CONN_AUTHMETHOD                   746
709#define SLAPI_IS_INTERNAL_OPERATION 		748
710
711#define SLAPI_RESULT_CODE                       881
712#define SLAPI_RESULT_TEXT                       882
713#define SLAPI_RESULT_MATCHED                    883
714
715/* managedsait control */
716#define SLAPI_MANAGEDSAIT       		1000
717
718/* audit plugin defines */
719#define SLAPI_PLUGIN_AUDIT_DATA                1100
720#define SLAPI_PLUGIN_AUDIT_FN                  1101
721
722/* backend_group extension */
723#define SLAPI_X_PLUGIN_PRE_GROUP_FN		1202
724#define SLAPI_X_PLUGIN_POST_GROUP_FN		1203
725
726#define SLAPI_X_GROUP_ENTRY			1250 /* group entry */
727#define SLAPI_X_GROUP_ATTRIBUTE			1251 /* member attribute */
728#define SLAPI_X_GROUP_OPERATION_DN		1252 /* asserted value */
729#define SLAPI_X_GROUP_TARGET_ENTRY		1253 /* target entry */
730
731/* internal preoperation extensions */
732#define SLAPI_PLUGIN_INTERNAL_PRE_BIND_FN	1260
733#define SLAPI_PLUGIN_INTERNAL_PRE_UNBIND_FN	1261
734#define SLAPI_PLUGIN_INTERNAL_PRE_SEARCH_FN	1262
735#define SLAPI_PLUGIN_INTERNAL_PRE_COMPARE_FN	1263
736#define SLAPI_PLUGIN_INTERNAL_PRE_ABANDON_FN	1264
737
738/* internal postoperation extensions */
739#define SLAPI_PLUGIN_INTERNAL_POST_BIND_FN	1270
740#define SLAPI_PLUGIN_INTERNAL_POST_UNBIND_FN	1271
741#define SLAPI_PLUGIN_INTERNAL_POST_SEARCH_FN	1272
742#define SLAPI_PLUGIN_INTERNAL_POST_COMPARE_FN	1273
743#define SLAPI_PLUGIN_INTERNAL_POST_ABANDON_FN	1274
744
745/* config stuff */
746#define SLAPI_CONFIG_FILENAME			40
747#define SLAPI_CONFIG_LINENO			41
748#define SLAPI_CONFIG_ARGC			42
749#define SLAPI_CONFIG_ARGV			43
750
751/*  operational params */
752#define SLAPI_TARGET_ADDRESS			48
753#define SLAPI_TARGET_UNIQUEID			49
754#define SLAPI_TARGET_DN				50
755
756/* server LDAPv3 controls  */
757#define SLAPI_REQCONTROLS			51
758#define SLAPI_RESCONTROLS			55
759#define SLAPI_ADD_RESCONTROL			56
760#define SLAPI_CONTROLS_ARG			58
761
762/* add params */
763#define SLAPI_ADD_TARGET			SLAPI_TARGET_DN
764#define SLAPI_ADD_ENTRY				60
765#define SLAPI_ADD_EXISTING_DN_ENTRY		61
766#define SLAPI_ADD_PARENT_ENTRY			62
767#define SLAPI_ADD_PARENT_UNIQUEID		63
768#define SLAPI_ADD_EXISTING_UNIQUEID_ENTRY	64
769
770/* bind params */
771#define SLAPI_BIND_TARGET			SLAPI_TARGET_DN
772#define SLAPI_BIND_METHOD			70
773#define SLAPI_BIND_CREDENTIALS			71
774#define SLAPI_BIND_SASLMECHANISM		72
775#define SLAPI_BIND_RET_SASLCREDS		73
776
777/* compare params */
778#define SLAPI_COMPARE_TARGET			SLAPI_TARGET_DN
779#define SLAPI_COMPARE_TYPE			80
780#define SLAPI_COMPARE_VALUE			81
781
782/* delete params */
783#define SLAPI_DELETE_TARGET			SLAPI_TARGET_DN
784#define SLAPI_DELETE_EXISTING_ENTRY		SLAPI_ADD_EXISTING_DN_ENTRY
785
786/* modify params */
787#define SLAPI_MODIFY_TARGET			SLAPI_TARGET_DN
788#define SLAPI_MODIFY_MODS			90
789#define SLAPI_MODIFY_EXISTING_ENTRY		SLAPI_ADD_EXISTING_DN_ENTRY
790
791/* modrdn params */
792#define SLAPI_MODRDN_TARGET			SLAPI_TARGET_DN
793#define SLAPI_MODRDN_NEWRDN			100
794#define SLAPI_MODRDN_DELOLDRDN			101
795#define SLAPI_MODRDN_NEWSUPERIOR		102	/* v3 only */
796#define SLAPI_MODRDN_EXISTING_ENTRY             SLAPI_ADD_EXISTING_DN_ENTRY
797#define SLAPI_MODRDN_PARENT_ENTRY		104
798#define SLAPI_MODRDN_NEWPARENT_ENTRY		105
799#define SLAPI_MODRDN_TARGET_ENTRY		106
800#define SLAPI_MODRDN_NEWSUPERIOR_ADDRESS	107
801
802/* search params */
803#define SLAPI_SEARCH_TARGET			SLAPI_TARGET_DN
804#define SLAPI_SEARCH_SCOPE			110
805#define SLAPI_SEARCH_DEREF			111
806#define SLAPI_SEARCH_SIZELIMIT			112
807#define SLAPI_SEARCH_TIMELIMIT			113
808#define SLAPI_SEARCH_FILTER			114
809#define SLAPI_SEARCH_STRFILTER			115
810#define SLAPI_SEARCH_ATTRS			116
811#define SLAPI_SEARCH_ATTRSONLY			117
812
813/* abandon params */
814#define SLAPI_ABANDON_MSGID			120
815
816/* extended operation params */
817#define SLAPI_EXT_OP_REQ_OID			160
818#define SLAPI_EXT_OP_REQ_VALUE		161
819
820/* extended operation return codes */
821#define SLAPI_EXT_OP_RET_OID			162
822#define SLAPI_EXT_OP_RET_VALUE		163
823
824#define SLAPI_PLUGIN_EXTENDED_SENT_RESULT	-1
825
826#define SLAPI_FAIL_DISKFULL		-2
827#define SLAPI_FAIL_GENERAL		-1
828#define SLAPI_PLUGIN_EXTENDED_NOT_HANDLED -2
829#define SLAPI_BIND_SUCCESS		0
830#define SLAPI_BIND_FAIL			2
831#define SLAPI_BIND_ANONYMOUS		3
832
833/* Search result params */
834#define SLAPI_SEARCH_RESULT_SET			193
835#define	SLAPI_SEARCH_RESULT_ENTRY		194
836#define	SLAPI_NENTRIES				195
837#define SLAPI_SEARCH_REFERRALS			196
838
839/* filter types */
840#ifndef LDAP_FILTER_AND
841#define LDAP_FILTER_AND         0xa0L
842#endif
843#ifndef LDAP_FILTER_OR
844#define LDAP_FILTER_OR          0xa1L
845#endif
846#ifndef LDAP_FILTER_NOT
847#define LDAP_FILTER_NOT         0xa2L
848#endif
849#ifndef LDAP_FILTER_EQUALITY
850#define LDAP_FILTER_EQUALITY    0xa3L
851#endif
852#ifndef LDAP_FILTER_SUBSTRINGS
853#define LDAP_FILTER_SUBSTRINGS  0xa4L
854#endif
855#ifndef LDAP_FILTER_GE
856#define LDAP_FILTER_GE          0xa5L
857#endif
858#ifndef LDAP_FILTER_LE
859#define LDAP_FILTER_LE          0xa6L
860#endif
861#ifndef LDAP_FILTER_PRESENT
862#define LDAP_FILTER_PRESENT     0x87L
863#endif
864#ifndef LDAP_FILTER_APPROX
865#define LDAP_FILTER_APPROX      0xa8L
866#endif
867#ifndef LDAP_FILTER_EXT_MATCH
868#define LDAP_FILTER_EXT_MATCH   0xa9L
869#endif
870
871int slapi_log_error( int severity, char *subsystem, char *fmt, ... );
872#define SLAPI_LOG_FATAL                 0
873#define SLAPI_LOG_TRACE                 1
874#define SLAPI_LOG_PACKETS               2
875#define SLAPI_LOG_ARGS                  3
876#define SLAPI_LOG_CONNS                 4
877#define SLAPI_LOG_BER                   5
878#define SLAPI_LOG_FILTER                6
879#define SLAPI_LOG_CONFIG                7
880#define SLAPI_LOG_ACL                   8
881#define SLAPI_LOG_SHELL                 9
882#define SLAPI_LOG_PARSE                 10
883#define SLAPI_LOG_HOUSE                 11
884#define SLAPI_LOG_REPL                  12
885#define SLAPI_LOG_CACHE                 13
886#define SLAPI_LOG_PLUGIN                14
887#define SLAPI_LOG_TIMING                15
888
889#define SLAPI_PLUGIN_DESCRIPTION	12
890typedef struct slapi_plugindesc {
891        char    *spd_id;
892        char    *spd_vendor;
893        char    *spd_version;
894        char    *spd_description;
895} Slapi_PluginDesc;
896
897#define SLAPI_PLUGIN_VERSION_01         "01"
898#define SLAPI_PLUGIN_VERSION_02         "02"
899#define SLAPI_PLUGIN_VERSION_03         "03"
900#define SLAPI_PLUGIN_CURRENT_VERSION    SLAPI_PLUGIN_VERSION_03
901
902#endif /* _SLAPI_PLUGIN_H */
903
904