xref: /netbsd-src/external/bsd/openldap/dist/include/slapi-plugin.h (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
1*549b59edSchristos /*	$NetBSD: slapi-plugin.h,v 1.3 2021/08/14 16:14:55 christos Exp $	*/
24e6df137Slukem 
3d11b170bStron /* $OpenLDAP$ */
42de962bdSlukem /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
52de962bdSlukem  *
6*549b59edSchristos  * Copyright 1998-2021 The OpenLDAP Foundation.
72de962bdSlukem  * Portions Copyright 1997,2002,2003 IBM Corporation.
82de962bdSlukem  * All rights reserved.
92de962bdSlukem  *
102de962bdSlukem  * Redistribution and use in source and binary forms, with or without
112de962bdSlukem  * modification, are permitted only as authorized by the OpenLDAP
122de962bdSlukem  * Public License.
132de962bdSlukem  *
142de962bdSlukem  * A copy of this license is available in file LICENSE in the
152de962bdSlukem  * top-level directory of the distribution or, alternatively, at
162de962bdSlukem  * <http://www.OpenLDAP.org/license.html>.
172de962bdSlukem  */
182de962bdSlukem 
192de962bdSlukem /*
202de962bdSlukem  * This header is used in development of SLAPI plugins for
212de962bdSlukem  * OpenLDAP slapd(8) and other directory servers supporting
222de962bdSlukem  * this interface.  Your portability mileage may vary.
232de962bdSlukem  */
242de962bdSlukem 
252de962bdSlukem #ifndef _SLAPI_PLUGIN_H
262de962bdSlukem #define _SLAPI_PLUGIN_H
272de962bdSlukem 
282de962bdSlukem #include <ldap.h>
292de962bdSlukem 
302de962bdSlukem typedef struct slapi_pblock		Slapi_PBlock;
312de962bdSlukem typedef struct slapi_entry		Slapi_Entry;
322de962bdSlukem typedef struct slapi_attr		Slapi_Attr;
332de962bdSlukem typedef struct slapi_value		Slapi_Value;
342de962bdSlukem typedef struct slapi_valueset		Slapi_ValueSet;
352de962bdSlukem typedef struct slapi_filter		Slapi_Filter;
362de962bdSlukem typedef struct BackendDB		Slapi_Backend;
372de962bdSlukem typedef struct Operation		Slapi_Operation;
382de962bdSlukem typedef struct Connection		Slapi_Connection;
392de962bdSlukem typedef struct slapi_dn			Slapi_DN;
402de962bdSlukem typedef struct slapi_rdn		Slapi_RDN;
412de962bdSlukem typedef struct slapi_mod		Slapi_Mod;
422de962bdSlukem typedef struct slapi_mods		Slapi_Mods;
432de962bdSlukem typedef struct slapi_componentid	Slapi_ComponentId;
442de962bdSlukem 
452de962bdSlukem #define SLAPI_ATTR_UNIQUEID	"entryUUID"
462de962bdSlukem #define SLAPI_ATTR_OBJECTCLASS	"objectClass"
472de962bdSlukem 
482de962bdSlukem /* pblock routines */
492de962bdSlukem int slapi_pblock_get( Slapi_PBlock *pb, int arg, void *value );
502de962bdSlukem int slapi_pblock_set( Slapi_PBlock *pb, int arg, void *value );
512de962bdSlukem Slapi_PBlock *slapi_pblock_new( void );
522de962bdSlukem void slapi_pblock_destroy( Slapi_PBlock *pb );
532de962bdSlukem 
542de962bdSlukem /* entry/attr/dn routines */
552de962bdSlukem Slapi_Entry *slapi_str2entry( char *s, int flags );
562de962bdSlukem #define SLAPI_STR2ENTRY_REMOVEDUPVALS	1
572de962bdSlukem #define SLAPI_STR2ENTRY_ADDRDNVALS	2
582de962bdSlukem #define SLAPI_STR2ENTRY_BIGENTRY	4
592de962bdSlukem #define SLAPI_STR2ENTRY_TOMBSTONE_CHECK	8
602de962bdSlukem #define SLAPI_STR2ENTRY_IGNORE_STATE	16
612de962bdSlukem #define SLAPI_STR2ENTRY_INCLUDE_VERSION_STR	32
622de962bdSlukem #define SLAPI_STR2ENTRY_EXPAND_OBJECTCLASSES	64
632de962bdSlukem #define SLAPI_STR2ENTRY_NOT_WELL_FORMED_LDIF	128
642de962bdSlukem char *slapi_entry2str( Slapi_Entry *e, int *len );
652de962bdSlukem char *slapi_entry_get_dn( Slapi_Entry *e );
662de962bdSlukem int slapi_x_entry_get_id( Slapi_Entry *e );
672de962bdSlukem void slapi_entry_set_dn( Slapi_Entry *e, char *dn );
682de962bdSlukem Slapi_Entry *slapi_entry_dup( Slapi_Entry *e );
692de962bdSlukem int slapi_entry_attr_delete( Slapi_Entry *e, char *type );
702de962bdSlukem Slapi_Entry *slapi_entry_alloc();
712de962bdSlukem void slapi_entry_free( Slapi_Entry *e );
722de962bdSlukem int slapi_entry_attr_merge( Slapi_Entry *e, char *type, struct berval **vals );
732de962bdSlukem int slapi_entry_attr_find( Slapi_Entry *e, char *type, Slapi_Attr **attr );
742de962bdSlukem char *slapi_entry_attr_get_charptr( const Slapi_Entry *e, const char *type );
752de962bdSlukem int slapi_entry_attr_get_int( const Slapi_Entry *e, const char *type );
762de962bdSlukem long slapi_entry_attr_get_long( const Slapi_Entry *e, const char *type );
772de962bdSlukem unsigned int slapi_entry_attr_get_uint( const Slapi_Entry *e, const char *type );
782de962bdSlukem unsigned long slapi_entry_attr_get_ulong( const Slapi_Entry *e, const char *type );
792de962bdSlukem int slapi_attr_get_values( Slapi_Attr *attr, struct berval ***vals );
802de962bdSlukem char *slapi_dn_normalize( char *dn );
812de962bdSlukem char *slapi_dn_normalize_case( char *dn );
822de962bdSlukem int slapi_dn_issuffix( char *dn, char *suffix );
832de962bdSlukem char *slapi_dn_beparent( Slapi_PBlock *pb, const char *dn );
842de962bdSlukem int slapi_dn_isbesuffix( Slapi_PBlock *pb, char *dn );
852de962bdSlukem char *slapi_dn_parent( const char *dn );
862de962bdSlukem int slapi_dn_isparent( const char *parentdn, const char *childdn );
872de962bdSlukem char *slapi_dn_ignore_case( char *dn );
882de962bdSlukem int slapi_rdn2typeval( char *rdn, char **type, struct berval *bv );
892de962bdSlukem char *slapi_dn_plus_rdn(const char *dn, const char *rdn);
902de962bdSlukem 
912de962bdSlukem /* DS 5.x SLAPI */
922de962bdSlukem int slapi_access_allowed( Slapi_PBlock *pb, Slapi_Entry *e, char *attr, struct berval *val, int access );
932de962bdSlukem int slapi_acl_check_mods( Slapi_PBlock *pb, Slapi_Entry *e, LDAPMod **mods, char **errbuf );
942de962bdSlukem Slapi_Attr *slapi_attr_new( void );
952de962bdSlukem Slapi_Attr *slapi_attr_init( Slapi_Attr *a, const char *type );
962de962bdSlukem void slapi_attr_free( Slapi_Attr **a );
972de962bdSlukem Slapi_Attr *slapi_attr_dup( const Slapi_Attr *attr );
982de962bdSlukem int slapi_attr_add_value( Slapi_Attr *a, const Slapi_Value *v );
992de962bdSlukem int slapi_attr_type2plugin( const char *type, void **pi );
1002de962bdSlukem int slapi_attr_get_type( const Slapi_Attr *attr, char **type );
1012de962bdSlukem int slapi_attr_get_oid_copy( const Slapi_Attr *attr, char **oidp );
1022de962bdSlukem int slapi_attr_get_flags( const Slapi_Attr *attr, unsigned long *flags );
1032de962bdSlukem int slapi_attr_flag_is_set( const Slapi_Attr *attr, unsigned long flag );
1042de962bdSlukem int slapi_attr_value_cmp( const Slapi_Attr *attr, const struct berval *v1, const struct berval *v2 );
1052de962bdSlukem int slapi_attr_value_find( const Slapi_Attr *a, struct berval *v );
1062de962bdSlukem #define SLAPI_TYPE_CMP_EXACT	0
1072de962bdSlukem #define SLAPI_TYPE_CMP_BASE	1
1082de962bdSlukem #define SLAPI_TYPE_CMP_SUBTYPE	2
1092de962bdSlukem int slapi_attr_type_cmp( const char *t1, const char *t2, int opt );
1102de962bdSlukem int slapi_attr_types_equivalent( const char *t1, const char *t2 );
1112de962bdSlukem int slapi_attr_first_value( Slapi_Attr *a, Slapi_Value **v );
1122de962bdSlukem int slapi_attr_next_value( Slapi_Attr *a, int hint, Slapi_Value **v );
1132de962bdSlukem int slapi_attr_get_numvalues( const Slapi_Attr *a, int *numValues );
1142de962bdSlukem int slapi_attr_get_valueset( const Slapi_Attr *a, Slapi_ValueSet **vs );
1152de962bdSlukem int slapi_attr_get_bervals_copy( Slapi_Attr *a, struct berval ***vals );
1162de962bdSlukem int slapi_entry_attr_hasvalue( Slapi_Entry *e, const char *type, const char *value );
1172de962bdSlukem int slapi_entry_attr_merge_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
1182de962bdSlukem void slapi_entry_attr_set_charptr(Slapi_Entry* e, const char *type, const char *value);
1192de962bdSlukem void slapi_entry_attr_set_int( Slapi_Entry* e, const char *type, int l);
1202de962bdSlukem void slapi_entry_attr_set_uint( Slapi_Entry* e, const char *type, unsigned int l);
1212de962bdSlukem void slapi_entry_attr_set_long(Slapi_Entry* e, const char *type, long l);
1222de962bdSlukem void slapi_entry_attr_set_ulong(Slapi_Entry* e, const char *type, unsigned long l);
1232de962bdSlukem int slapi_entry_has_children(const Slapi_Entry *e);
1242de962bdSlukem size_t slapi_entry_size(Slapi_Entry *e);
1252de962bdSlukem int slapi_is_rootdse( const char *dn );
1262de962bdSlukem int slapi_entry_attr_merge_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
1272de962bdSlukem int slapi_entry_add_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
1282de962bdSlukem int slapi_entry_add_valueset(Slapi_Entry *e, const char *type, Slapi_ValueSet *vs);
1292de962bdSlukem int slapi_entry_delete_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
1302de962bdSlukem int slapi_entry_merge_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
1312de962bdSlukem int slapi_entry_attr_replace_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
1322de962bdSlukem int slapi_entry_add_value(Slapi_Entry *e, const char *type, const Slapi_Value *value);
1332de962bdSlukem int slapi_entry_add_string(Slapi_Entry *e, const char *type, const char *value);
1342de962bdSlukem int slapi_entry_delete_string(Slapi_Entry *e, const char *type, const char *value);
1352de962bdSlukem int slapi_entry_first_attr( const Slapi_Entry *e, Slapi_Attr **attr );
1362de962bdSlukem int slapi_entry_next_attr( const Slapi_Entry *e, Slapi_Attr *prevattr, Slapi_Attr **attr );
1372de962bdSlukem const char *slapi_entry_get_uniqueid( const Slapi_Entry *e );
1382de962bdSlukem void slapi_entry_set_uniqueid( Slapi_Entry *e, char *uniqueid );
1392de962bdSlukem int slapi_entry_schema_check( Slapi_PBlock *pb, Slapi_Entry *e );
1402de962bdSlukem int slapi_entry_rdn_values_present( const Slapi_Entry *e );
1412de962bdSlukem int slapi_entry_add_rdn_values( Slapi_Entry *e );
1422de962bdSlukem char *slapi_attr_syntax_normalize( const char *s );
1432de962bdSlukem 
1442de962bdSlukem Slapi_Value *slapi_value_new( void );
1452de962bdSlukem Slapi_Value *slapi_value_new_berval(const struct berval *bval);
1462de962bdSlukem Slapi_Value *slapi_value_new_value(const Slapi_Value *v);
1472de962bdSlukem Slapi_Value *slapi_value_new_string(const char *s);
1482de962bdSlukem Slapi_Value *slapi_value_init(Slapi_Value *v);
1492de962bdSlukem Slapi_Value *slapi_value_init_berval(Slapi_Value *v, struct berval *bval);
1502de962bdSlukem Slapi_Value *slapi_value_init_string(Slapi_Value *v, const char *s);
1512de962bdSlukem Slapi_Value *slapi_value_dup(const Slapi_Value *v);
1522de962bdSlukem void slapi_value_free(Slapi_Value **value);
1532de962bdSlukem const struct berval *slapi_value_get_berval( const Slapi_Value *value );
1542de962bdSlukem Slapi_Value *slapi_value_set_berval( Slapi_Value *value, const struct berval *bval );
1552de962bdSlukem Slapi_Value *slapi_value_set_value( Slapi_Value *value, const Slapi_Value *vfrom);
1562de962bdSlukem Slapi_Value *slapi_value_set( Slapi_Value *value, void *val, unsigned long len);
1572de962bdSlukem int slapi_value_set_string(Slapi_Value *value, const char *strVal);
1582de962bdSlukem int slapi_value_set_int(Slapi_Value *value, int intVal);
1592de962bdSlukem const char*slapi_value_get_string(const Slapi_Value *value);
1602de962bdSlukem int slapi_value_get_int(const Slapi_Value *value);
1612de962bdSlukem unsigned int slapi_value_get_uint(const Slapi_Value *value);
1622de962bdSlukem long slapi_value_get_long(const Slapi_Value *value);
1632de962bdSlukem unsigned long slapi_value_get_ulong(const Slapi_Value *value);
1642de962bdSlukem size_t slapi_value_get_length(const Slapi_Value *value);
1652de962bdSlukem int slapi_value_compare(const Slapi_Attr *a, const Slapi_Value *v1, const Slapi_Value *v2);
1662de962bdSlukem 
1672de962bdSlukem Slapi_ValueSet *slapi_valueset_new( void );
1682de962bdSlukem void slapi_valueset_free(Slapi_ValueSet *vs);
1692de962bdSlukem void slapi_valueset_init(Slapi_ValueSet *vs);
1702de962bdSlukem void slapi_valueset_done(Slapi_ValueSet *vs);
1712de962bdSlukem void slapi_valueset_add_value(Slapi_ValueSet *vs, const Slapi_Value *addval);
1722de962bdSlukem int slapi_valueset_first_value( Slapi_ValueSet *vs, Slapi_Value **v );
1732de962bdSlukem int slapi_valueset_next_value( Slapi_ValueSet *vs, int index, Slapi_Value **v);
1742de962bdSlukem int slapi_valueset_count( const Slapi_ValueSet *vs);
1752de962bdSlukem void slapi_valueset_set_valueset(Slapi_ValueSet *vs1, const Slapi_ValueSet *vs2);
1762de962bdSlukem 
1772de962bdSlukem /* DNs */
1782de962bdSlukem Slapi_DN *slapi_sdn_new( void );
1792de962bdSlukem Slapi_DN *slapi_sdn_new_dn_byval( const char *dn );
1802de962bdSlukem Slapi_DN *slapi_sdn_new_ndn_byval( const char *ndn );
1812de962bdSlukem Slapi_DN *slapi_sdn_new_dn_byref( const char *dn );
1822de962bdSlukem Slapi_DN *slapi_sdn_new_ndn_byref( const char *ndn );
1832de962bdSlukem Slapi_DN *slapi_sdn_new_dn_passin( const char *dn );
1842de962bdSlukem Slapi_DN *slapi_sdn_set_dn_byval( Slapi_DN *sdn, const char *dn );
1852de962bdSlukem Slapi_DN *slapi_sdn_set_dn_byref( Slapi_DN *sdn, const char *dn );
1862de962bdSlukem Slapi_DN *slapi_sdn_set_dn_passin( Slapi_DN *sdn, const char *dn );
1872de962bdSlukem Slapi_DN *slapi_sdn_set_ndn_byval( Slapi_DN *sdn, const char *ndn );
1882de962bdSlukem Slapi_DN *slapi_sdn_set_ndn_byref( Slapi_DN *sdn, const char *ndn );
1892de962bdSlukem void slapi_sdn_done( Slapi_DN *sdn );
1902de962bdSlukem void slapi_sdn_free( Slapi_DN **sdn );
1912de962bdSlukem const char * slapi_sdn_get_dn( const Slapi_DN *sdn );
1922de962bdSlukem const char * slapi_sdn_get_ndn( const Slapi_DN *sdn );
1932de962bdSlukem void slapi_sdn_get_parent( const Slapi_DN *sdn,Slapi_DN *sdn_parent );
1942de962bdSlukem void slapi_sdn_get_backend_parent( const Slapi_DN *sdn, Slapi_DN *sdn_parent, const Slapi_Backend *backend );
1952de962bdSlukem Slapi_DN * slapi_sdn_dup( const Slapi_DN *sdn );
1962de962bdSlukem void slapi_sdn_copy( const Slapi_DN *from, Slapi_DN *to );
1972de962bdSlukem int slapi_sdn_compare( const Slapi_DN *sdn1, const Slapi_DN *sdn2 );
1982de962bdSlukem int slapi_sdn_isempty( const Slapi_DN *sdn );
1992de962bdSlukem int slapi_sdn_issuffix(const Slapi_DN *sdn, const Slapi_DN *suffixsdn );
2002de962bdSlukem int slapi_sdn_isparent( const Slapi_DN *parent, const Slapi_DN *child );
2012de962bdSlukem int slapi_sdn_isgrandparent( const Slapi_DN *parent, const Slapi_DN *child );
2022de962bdSlukem int slapi_sdn_get_ndn_len( const Slapi_DN *sdn );
2032de962bdSlukem int slapi_sdn_scope_test( const Slapi_DN *dn, const Slapi_DN *base, int scope );
2042de962bdSlukem void slapi_sdn_get_rdn( const Slapi_DN *sdn,Slapi_RDN *rdn );
2052de962bdSlukem Slapi_DN *slapi_sdn_set_rdn( Slapi_DN *sdn, const Slapi_RDN *rdn );
2062de962bdSlukem Slapi_DN *slapi_sdn_set_parent( Slapi_DN *sdn, const Slapi_DN *parentdn );
2072de962bdSlukem int slapi_sdn_is_rdn_component( const Slapi_DN *rdn, const Slapi_Attr *a, const Slapi_Value *v );
2082de962bdSlukem char * slapi_moddn_get_newdn( Slapi_DN *dn_olddn, char *newrdn, char *newsuperiordn );
2092de962bdSlukem 
2102de962bdSlukem /* RDNs */
2112de962bdSlukem Slapi_RDN *slapi_rdn_new( void );
2122de962bdSlukem Slapi_RDN *slapi_rdn_new_dn( const char *dn );
2132de962bdSlukem Slapi_RDN *slapi_rdn_new_sdn( const Slapi_DN *sdn );
2142de962bdSlukem Slapi_RDN *slapi_rdn_new_rdn( const Slapi_RDN *fromrdn );
2152de962bdSlukem void slapi_rdn_init( Slapi_RDN *rdn );
2162de962bdSlukem void slapi_rdn_init_dn( Slapi_RDN *rdn, const char *dn );
2172de962bdSlukem void slapi_rdn_init_sdn( Slapi_RDN *rdn, const Slapi_DN *sdn );
2182de962bdSlukem void slapi_rdn_init_rdn( Slapi_RDN *rdn, const Slapi_RDN *fromrdn );
2192de962bdSlukem void slapi_rdn_set_dn( Slapi_RDN *rdn, const char *dn );
2202de962bdSlukem void slapi_rdn_set_sdn( Slapi_RDN *rdn, const Slapi_DN *sdn );
2212de962bdSlukem void slapi_rdn_set_rdn( Slapi_RDN *rdn, const Slapi_RDN *fromrdn );
2222de962bdSlukem void slapi_rdn_free( Slapi_RDN **rdn );
2232de962bdSlukem void slapi_rdn_done( Slapi_RDN *rdn );
2242de962bdSlukem int slapi_rdn_get_first( Slapi_RDN *rdn, char **type, char **value );
2252de962bdSlukem int slapi_rdn_get_next( Slapi_RDN *rdn, int index, char **type, char **value );
2262de962bdSlukem int slapi_rdn_get_index( Slapi_RDN *rdn, const char *type, const char *value, size_t length );
2272de962bdSlukem int slapi_rdn_get_index_attr( Slapi_RDN *rdn, const char *type, char **value );
2282de962bdSlukem int slapi_rdn_contains( Slapi_RDN *rdn, const char *type, const char *value,size_t length );
2292de962bdSlukem int slapi_rdn_contains_attr( Slapi_RDN *rdn, const char *type, char **value );
2302de962bdSlukem int slapi_rdn_add( Slapi_RDN *rdn, const char *type, const char *value );
2312de962bdSlukem int slapi_rdn_remove_index( Slapi_RDN *rdn, int atindex );
2322de962bdSlukem int slapi_rdn_remove( Slapi_RDN *rdn, const char *type, const char *value, size_t length );
2332de962bdSlukem int slapi_rdn_remove_attr( Slapi_RDN *rdn, const char *type );
2342de962bdSlukem int slapi_rdn_isempty( const Slapi_RDN *rdn );
2352de962bdSlukem int slapi_rdn_get_num_components( Slapi_RDN *rdn );
2362de962bdSlukem int slapi_rdn_compare( Slapi_RDN *rdn1, Slapi_RDN *rdn2 );
2372de962bdSlukem const char *slapi_rdn_get_rdn( const Slapi_RDN *rdn );
2382de962bdSlukem const char *slapi_rdn_get_nrdn( const Slapi_RDN *rdn );
2392de962bdSlukem Slapi_DN *slapi_sdn_add_rdn( Slapi_DN *sdn, const Slapi_RDN *rdn );
2402de962bdSlukem 
2412de962bdSlukem /* locks and synchronization */
2422de962bdSlukem typedef struct slapi_mutex	Slapi_Mutex;
2432de962bdSlukem typedef struct slapi_condvar	Slapi_CondVar;
2442de962bdSlukem Slapi_Mutex *slapi_new_mutex( void );
2452de962bdSlukem void slapi_destroy_mutex( Slapi_Mutex *mutex );
2462de962bdSlukem void slapi_lock_mutex( Slapi_Mutex *mutex );
2472de962bdSlukem int slapi_unlock_mutex( Slapi_Mutex *mutex );
2482de962bdSlukem Slapi_CondVar *slapi_new_condvar( Slapi_Mutex *mutex );
2492de962bdSlukem void slapi_destroy_condvar( Slapi_CondVar *cvar );
2502de962bdSlukem int slapi_wait_condvar( Slapi_CondVar *cvar, struct timeval *timeout );
2512de962bdSlukem int slapi_notify_condvar( Slapi_CondVar *cvar, int notify_all );
2522de962bdSlukem 
2532de962bdSlukem /* thread-safe LDAP connections */
2542de962bdSlukem LDAP *slapi_ldap_init( char *ldaphost, int ldapport, int secure, int shared );
2552de962bdSlukem void slapi_ldap_unbind( LDAP *ld );
2562de962bdSlukem 
2572de962bdSlukem char *slapi_ch_malloc( unsigned long size );
2582de962bdSlukem void slapi_ch_free( void **ptr );
2592de962bdSlukem void slapi_ch_free_string( char **ptr );
2602de962bdSlukem char *slapi_ch_calloc( unsigned long nelem, unsigned long size );
2612de962bdSlukem char *slapi_ch_realloc( char *block, unsigned long size );
2622de962bdSlukem char *slapi_ch_strdup( const char *s );
2632de962bdSlukem void slapi_ch_array_free( char **arrayp );
2642de962bdSlukem struct berval *slapi_ch_bvdup(const struct berval *v);
2652de962bdSlukem struct berval **slapi_ch_bvecdup(const struct berval **v);
2662de962bdSlukem 
2672de962bdSlukem /* LDAP V3 routines */
2682de962bdSlukem int slapi_control_present( LDAPControl **controls, char *oid,
2692de962bdSlukem 	struct berval **val, int *iscritical);
2702de962bdSlukem void slapi_register_supported_control(char *controloid,
2712de962bdSlukem 	unsigned long controlops);
2722de962bdSlukem #define SLAPI_OPERATION_BIND            0x00000001L
2732de962bdSlukem #define SLAPI_OPERATION_UNBIND          0x00000002L
2742de962bdSlukem #define SLAPI_OPERATION_SEARCH          0x00000004L
2752de962bdSlukem #define SLAPI_OPERATION_MODIFY          0x00000008L
2762de962bdSlukem #define SLAPI_OPERATION_ADD             0x00000010L
2772de962bdSlukem #define SLAPI_OPERATION_DELETE          0x00000020L
2782de962bdSlukem #define SLAPI_OPERATION_MODDN           0x00000040L
2792de962bdSlukem #define SLAPI_OPERATION_MODRDN          SLAPI_OPERATION_MODDN
2802de962bdSlukem #define SLAPI_OPERATION_COMPARE         0x00000080L
2812de962bdSlukem #define SLAPI_OPERATION_ABANDON         0x00000100L
2822de962bdSlukem #define SLAPI_OPERATION_EXTENDED        0x00000200L
2832de962bdSlukem #define SLAPI_OPERATION_ANY             0xFFFFFFFFL
2842de962bdSlukem #define SLAPI_OPERATION_NONE            0x00000000L
2852de962bdSlukem int slapi_get_supported_controls(char ***ctrloidsp, unsigned long **ctrlopsp);
2862de962bdSlukem LDAPControl *slapi_dup_control(LDAPControl *ctrl);
2872de962bdSlukem void slapi_register_supported_saslmechanism(char *mechanism);
2882de962bdSlukem char **slapi_get_supported_saslmechanisms();
2892de962bdSlukem char **slapi_get_supported_extended_ops(void);
2902de962bdSlukem 
2912de962bdSlukem /* operation */
2922de962bdSlukem int slapi_op_abandoned( Slapi_PBlock *pb );
2932de962bdSlukem unsigned long slapi_op_get_type(Slapi_Operation * op);
2942de962bdSlukem void slapi_operation_set_flag(Slapi_Operation *op, unsigned long flag);
2952de962bdSlukem void slapi_operation_clear_flag(Slapi_Operation *op, unsigned long flag);
2962de962bdSlukem int slapi_operation_is_flag_set(Slapi_Operation *op, unsigned long flag);
2972de962bdSlukem char *slapi_op_type_to_string(unsigned long type);
2982de962bdSlukem 
2992de962bdSlukem /* send ldap result back */
3002de962bdSlukem void slapi_send_ldap_result( Slapi_PBlock *pb, int err, char *matched,
3012de962bdSlukem 	char *text, int nentries, struct berval **urls );
3022de962bdSlukem int slapi_send_ldap_search_entry( Slapi_PBlock *pb, Slapi_Entry *e,
3032de962bdSlukem 	LDAPControl **ectrls, char **attrs, int attrsonly );
3042de962bdSlukem int slapi_send_ldap_search_reference( Slapi_PBlock *pb, Slapi_Entry *e,
3052de962bdSlukem 	struct berval **urls, LDAPControl **ectrls, struct berval **v2refs );
3062de962bdSlukem 
3072de962bdSlukem /* filter routines */
3082de962bdSlukem Slapi_Filter *slapi_str2filter( char *str );
3092de962bdSlukem Slapi_Filter *slapi_filter_dup( Slapi_Filter *f );
3102de962bdSlukem void slapi_filter_free( Slapi_Filter *f, int recurse );
3112de962bdSlukem int slapi_filter_get_choice( Slapi_Filter *f);
3122de962bdSlukem int slapi_filter_get_ava( Slapi_Filter *f, char **type, struct berval **bval );
3132de962bdSlukem Slapi_Filter *slapi_filter_list_first( Slapi_Filter *f );
3142de962bdSlukem Slapi_Filter *slapi_filter_list_next( Slapi_Filter *f, Slapi_Filter *fprev );
3152de962bdSlukem int slapi_filter_get_attribute_type( Slapi_Filter *f, char **type );
3162de962bdSlukem int slapi_x_filter_set_attribute_type( Slapi_Filter *f, const char *type );
3172de962bdSlukem int slapi_filter_get_subfilt( Slapi_Filter *f, char **type, char **initial,
3182de962bdSlukem 	char ***any, char **final );
3192de962bdSlukem Slapi_Filter *slapi_filter_join( int ftype, Slapi_Filter *f1, Slapi_Filter *f2);
3202de962bdSlukem int slapi_x_filter_append( int choice, Slapi_Filter **pContainingFilter,
3212de962bdSlukem 	Slapi_Filter **pNextFilter, Slapi_Filter *filterToAppend );
3222de962bdSlukem int slapi_filter_test( Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Filter *f,
3232de962bdSlukem 	int verify_access );
3242de962bdSlukem int slapi_filter_test_simple( Slapi_Entry *e, Slapi_Filter *f );
3252de962bdSlukem typedef int (*FILTER_APPLY_FN)( Slapi_Filter *f, void *arg );
3262de962bdSlukem int slapi_filter_apply( Slapi_Filter *f, FILTER_APPLY_FN fn, void *arg, int *error_code );
3272de962bdSlukem #define SLAPI_FILTER_SCAN_STOP			-1 /* set by callback */
3282de962bdSlukem #define SLAPI_FILTER_SCAN_ERROR			-2 /* set by callback */
3292de962bdSlukem #define SLAPI_FILTER_SCAN_NOMORE		0 /* set by callback */
3302de962bdSlukem #define SLAPI_FILTER_SCAN_CONTINUE		1 /* set by callback */
3312de962bdSlukem #define SLAPI_FILTER_UNKNOWN_FILTER_TYPE	2 /* set by slapi_filter_apply() */
3322de962bdSlukem 
3332de962bdSlukem /* internal add/delete/search/modify routines */
3342de962bdSlukem Slapi_PBlock *slapi_search_internal( char *base, int scope, char *filter,
3352de962bdSlukem 	LDAPControl **controls, char **attrs, int attrsonly );
3362de962bdSlukem Slapi_PBlock *slapi_modify_internal( char *dn, LDAPMod **mods,
3372de962bdSlukem         LDAPControl **controls, int log_change );
3382de962bdSlukem Slapi_PBlock *slapi_add_internal( char * dn, LDAPMod **attrs,
3392de962bdSlukem 	LDAPControl **controls, int log_changes );
3402de962bdSlukem Slapi_PBlock *slapi_add_entry_internal( Slapi_Entry * e,
3412de962bdSlukem 	LDAPControl **controls, int log_change );
3422de962bdSlukem Slapi_PBlock *slapi_delete_internal( char * dn,  LDAPControl **controls,
3432de962bdSlukem 	int log_change );
3442de962bdSlukem Slapi_PBlock *slapi_modrdn_internal( char * olddn, char * newrdn,
3452de962bdSlukem 	int deloldrdn, LDAPControl **controls,
3462de962bdSlukem 	int log_change );
3472de962bdSlukem Slapi_PBlock *slapi_rename_internal( const char * olddn, const char *newrdn,
348*549b59edSchristos 	const char *newsuperior, int deloldrdn,
3492de962bdSlukem 	LDAPControl **controls, int log_change );
3502de962bdSlukem void slapi_free_search_results_internal(Slapi_PBlock *pb);
3512de962bdSlukem 
3522de962bdSlukem /* new internal add/delete/search/modify routines */
3532de962bdSlukem typedef void (*plugin_result_callback)( int rc, void *callback_data );
3542de962bdSlukem typedef int (*plugin_referral_entry_callback)( char * referral,
3552de962bdSlukem 	void *callback_data );
3562de962bdSlukem typedef int (*plugin_search_entry_callback)( Slapi_Entry *e,
3572de962bdSlukem 	void *callback_data );
3582de962bdSlukem void slapi_free_search_results_internal( Slapi_PBlock *pb );
3592de962bdSlukem 
3602de962bdSlukem #define SLAPI_OP_FLAG_NEVER_CHAIN	0x0800
3612de962bdSlukem 
3622de962bdSlukem int slapi_search_internal_pb( Slapi_PBlock *pb );
3632de962bdSlukem int slapi_search_internal_callback_pb( Slapi_PBlock *pb, void *callback_data,
3642de962bdSlukem 	plugin_result_callback prc, plugin_search_entry_callback psec,
3652de962bdSlukem 	plugin_referral_entry_callback prec );
3662de962bdSlukem int slapi_add_internal_pb( Slapi_PBlock *pb );
3672de962bdSlukem int slapi_modify_internal_pb( Slapi_PBlock *pb );
3682de962bdSlukem int slapi_modrdn_internal_pb( Slapi_PBlock *pb );
3692de962bdSlukem int slapi_delete_internal_pb( Slapi_PBlock *pb );
3702de962bdSlukem 
3712de962bdSlukem int slapi_seq_internal_callback_pb(Slapi_PBlock *pb, void *callback_data,
3722de962bdSlukem         plugin_result_callback res_callback,
3732de962bdSlukem         plugin_search_entry_callback srch_callback,
3742de962bdSlukem         plugin_referral_entry_callback ref_callback);
3752de962bdSlukem 
3762de962bdSlukem void slapi_search_internal_set_pb( Slapi_PBlock *pb, const char *base,
3772de962bdSlukem 	int scope, const char *filter, char **attrs, int attrsonly,
3782de962bdSlukem 	LDAPControl **controls, const char *uniqueid,
3792de962bdSlukem 	Slapi_ComponentId *plugin_identity, int operation_flags );
3802de962bdSlukem void slapi_add_entry_internal_set_pb( Slapi_PBlock *pb, Slapi_Entry *e,
3812de962bdSlukem 	LDAPControl **controls, Slapi_ComponentId *plugin_identity,
3822de962bdSlukem 	int operation_flags );
3832de962bdSlukem int slapi_add_internal_set_pb( Slapi_PBlock *pb, const char *dn,
3842de962bdSlukem 	LDAPMod **attrs, LDAPControl **controls,
3852de962bdSlukem 	Slapi_ComponentId *plugin_identity, int operation_flags );
3862de962bdSlukem void slapi_modify_internal_set_pb( Slapi_PBlock *pb, const char *dn,
3872de962bdSlukem 	LDAPMod **mods, LDAPControl **controls, const char *uniqueid,
3882de962bdSlukem 	Slapi_ComponentId *plugin_identity, int operation_flags );
3892de962bdSlukem void slapi_rename_internal_set_pb( Slapi_PBlock *pb, const char *olddn,
3902de962bdSlukem 	const char *newrdn, const char *newsuperior, int deloldrdn,
3912de962bdSlukem 	LDAPControl **controls, const char *uniqueid,
3922de962bdSlukem 	Slapi_ComponentId *plugin_identity, int operation_flags );
3932de962bdSlukem void slapi_delete_internal_set_pb( Slapi_PBlock *pb, const char *dn,
3942de962bdSlukem 	LDAPControl **controls, const char *uniqueid,
3952de962bdSlukem 	Slapi_ComponentId *plugin_identity, int operation_flags );
3962de962bdSlukem void slapi_seq_internal_set_pb( Slapi_PBlock *pb, char *ibase, int type,
3972de962bdSlukem 	char *attrname, char *val, char **attrs, int attrsonly,
3982de962bdSlukem 	LDAPControl **controls, Slapi_ComponentId *plugin_identity,
3992de962bdSlukem 	int operation_flags );
4002de962bdSlukem 
4012de962bdSlukem /* connection related routines */
4022de962bdSlukem int slapi_is_connection_ssl(Slapi_PBlock *pPB, int *isSSL);
4032de962bdSlukem int slapi_get_client_port(Slapi_PBlock *pPB, int *fromPort);
404d11b170bStron int slapi_get_client_ip(Slapi_PBlock *pb, char **clientIP);
405d11b170bStron void slapi_free_client_ip(char **clientIP);
4062de962bdSlukem 
4072de962bdSlukem /* computed attributes */
4082de962bdSlukem typedef struct _computed_attr_context computed_attr_context;
4092de962bdSlukem typedef int (*slapi_compute_output_t)(computed_attr_context *c, Slapi_Attr *a, Slapi_Entry *e);
4102de962bdSlukem typedef int (*slapi_compute_callback_t)(computed_attr_context *c, char *type, Slapi_Entry *e, slapi_compute_output_t outputfn);
4112de962bdSlukem typedef int (*slapi_search_rewrite_callback_t)(Slapi_PBlock *pb);
4122de962bdSlukem int slapi_compute_add_evaluator(slapi_compute_callback_t function);
4132de962bdSlukem int slapi_compute_add_search_rewriter(slapi_search_rewrite_callback_t function);
4142de962bdSlukem int compute_rewrite_search_filter(Slapi_PBlock *pb);
4152de962bdSlukem int compute_evaluator(computed_attr_context *c, char *type, Slapi_Entry *e, slapi_compute_output_t outputfn);
4162de962bdSlukem int slapi_x_compute_get_pblock(computed_attr_context *c, Slapi_PBlock **pb);
4172de962bdSlukem 
4182de962bdSlukem /* backend routines */
4192de962bdSlukem void slapi_be_set_readonly( Slapi_Backend *be, int readonly );
4202de962bdSlukem int slapi_be_get_readonly( Slapi_Backend *be );
4212de962bdSlukem const char *slapi_x_be_get_updatedn( Slapi_Backend *be );
4222de962bdSlukem Slapi_Backend *slapi_be_select( const Slapi_DN *sdn );
4232de962bdSlukem 
4242de962bdSlukem /* ACL plugins; only SLAPI_PLUGIN_ACL_ALLOW_ACCESS supported now */
4252de962bdSlukem typedef int (*slapi_acl_callback_t)(Slapi_PBlock *pb,
4262de962bdSlukem 	Slapi_Entry *e,
4272de962bdSlukem 	const char *attr,
4282de962bdSlukem 	struct berval *berval,
4292de962bdSlukem 	int access,
4302de962bdSlukem 	void *state);
4312de962bdSlukem 
4322de962bdSlukem /* object extensions */
4332de962bdSlukem typedef void *(*slapi_extension_constructor_fnptr)(void *object, void *parent);
4342de962bdSlukem 
4352de962bdSlukem typedef void (*slapi_extension_destructor_fnptr)(void *extension,
4362de962bdSlukem 	void *object, void *parent);
4372de962bdSlukem 
4382de962bdSlukem int slapi_register_object_extension( const char *pluginname,
4392de962bdSlukem 	const char *objectname, slapi_extension_constructor_fnptr constructor,
4402de962bdSlukem 	slapi_extension_destructor_fnptr destructor, int *objecttype,
4412de962bdSlukem 	int *extensionhandle);
4422de962bdSlukem 
4432de962bdSlukem #define SLAPI_EXT_CONNECTION    "Connection"
4442de962bdSlukem #define SLAPI_EXT_OPERATION     "Operation"
4452de962bdSlukem #define SLAPI_EXT_ENTRY         "Entry"
4462de962bdSlukem #define SLAPI_EXT_MTNODE        "Mapping Tree Node"
4472de962bdSlukem 
4482de962bdSlukem void *slapi_get_object_extension(int objecttype, void *object,
4492de962bdSlukem 	int extensionhandle);
4502de962bdSlukem void slapi_set_object_extension(int objecttype, void *object,
4512de962bdSlukem 	int extensionhandle, void *extension);
4522de962bdSlukem 
4532de962bdSlukem int slapi_x_backend_get_flags( const Slapi_Backend *be, unsigned long *flags );
4542de962bdSlukem 
4552de962bdSlukem /* parameters currently supported */
4562de962bdSlukem 
4572de962bdSlukem /*
4582de962bdSlukem  * Attribute flags returned by slapi_attr_get_flags()
4592de962bdSlukem  */
4602de962bdSlukem #define SLAPI_ATTR_FLAG_SINGLE		0x0001
4612de962bdSlukem #define SLAPI_ATTR_FLAG_OPATTR		0x0002
4622de962bdSlukem #define SLAPI_ATTR_FLAG_READONLY	0x0004
4632de962bdSlukem #define SLAPI_ATTR_FLAG_STD_ATTR	SLAPI_ATTR_FLAG_READONLY
4642de962bdSlukem #define SLAPI_ATTR_FLAG_OBSOLETE	0x0040
4652de962bdSlukem #define SLAPI_ATTR_FLAG_COLLECTIVE	0x0080
4662de962bdSlukem #define SLAPI_ATTR_FLAG_NOUSERMOD	0x0100
4672de962bdSlukem 
4682de962bdSlukem /*
4692de962bdSlukem  * Backend flags returned by slapi_x_backend_get_flags()
4702de962bdSlukem  */
4712de962bdSlukem #define SLAPI_BACKEND_FLAG_NOLASTMOD		0x0001U
4722de962bdSlukem #define SLAPI_BACKEND_FLAG_NO_SCHEMA_CHECK	0x0002U
4732de962bdSlukem #define SLAPI_BACKEND_FLAG_GLUE_INSTANCE	0x0010U	/* a glue backend */
4742de962bdSlukem #define SLAPI_BACKEND_FLAG_GLUE_SUBORDINATE	0x0020U	/* child of a glue hierarchy */
4752de962bdSlukem #define SLAPI_BACKEND_FLAG_GLUE_LINKED		0x0040U	/* child is connected to parent */
4762de962bdSlukem #define SLAPI_BACKEND_FLAG_OVERLAY		0x0080U	/* this db struct is an overlay */
4772de962bdSlukem #define SLAPI_BACKEND_FLAG_GLOBAL_OVERLAY	0x0100U	/* this db struct is a global overlay */
4782de962bdSlukem #define SLAPI_BACKEND_FLAG_SHADOW		0x8000U /* a shadow */
4792de962bdSlukem #define SLAPI_BACKEND_FLAG_SYNC_SHADOW		0x1000U /* a sync shadow */
4802de962bdSlukem #define SLAPI_BACKEND_FLAG_SLURP_SHADOW		0x2000U /* a slurp shadow */
4812de962bdSlukem 
4822de962bdSlukem /*
4832de962bdSlukem  * ACL levels
4842de962bdSlukem  */
4852de962bdSlukem #define SLAPI_ACL_COMPARE       0x01
4862de962bdSlukem #define SLAPI_ACL_SEARCH        0x02
4872de962bdSlukem #define SLAPI_ACL_READ          0x04
4882de962bdSlukem #define SLAPI_ACL_WRITE         0x08
4892de962bdSlukem #define SLAPI_ACL_DELETE        0x10
4902de962bdSlukem #define SLAPI_ACL_ADD           0x20
4912de962bdSlukem #define SLAPI_ACL_SELF          0x40
4922de962bdSlukem #define SLAPI_ACL_PROXY         0x80
4932de962bdSlukem #define SLAPI_ACL_ALL           0x7f
4942de962bdSlukem 
4952de962bdSlukem /* plugin types supported */
4962de962bdSlukem 
4972de962bdSlukem #define SLAPI_PLUGIN_DATABASE           1
4982de962bdSlukem #define SLAPI_PLUGIN_EXTENDEDOP         2
4992de962bdSlukem #define SLAPI_PLUGIN_PREOPERATION       3
5002de962bdSlukem #define SLAPI_PLUGIN_POSTOPERATION      4
5012de962bdSlukem #define SLAPI_PLUGIN_MATCHINGRULE       5
5022de962bdSlukem #define SLAPI_PLUGIN_SYNTAX             6
5032de962bdSlukem #define SLAPI_PLUGIN_AUDIT              7
5042de962bdSlukem 
5052de962bdSlukem /* misc params */
5062de962bdSlukem 
5072de962bdSlukem #define SLAPI_BACKEND				130
5082de962bdSlukem #define SLAPI_CONNECTION			131
5092de962bdSlukem #define SLAPI_OPERATION				132
5102de962bdSlukem #define SLAPI_REQUESTOR_ISROOT			133
5112de962bdSlukem #define SLAPI_BE_MONITORDN			134
5122de962bdSlukem #define SLAPI_BE_TYPE           		135
5132de962bdSlukem #define SLAPI_BE_READONLY       		136
5142de962bdSlukem #define SLAPI_BE_LASTMOD       			137
5152de962bdSlukem #define SLAPI_CONN_ID        			139
5162de962bdSlukem 
5172de962bdSlukem /* operation params */
5182de962bdSlukem #define SLAPI_OPINITIATED_TIME			140
5192de962bdSlukem #define SLAPI_REQUESTOR_DN			141
5202de962bdSlukem #define SLAPI_IS_REPLICATED_OPERATION		142
5212de962bdSlukem #define SLAPI_REQUESTOR_ISUPDATEDN		SLAPI_IS_REPLICATED_OPERATION
5222de962bdSlukem 
5232de962bdSlukem /* connection  structure params*/
5242de962bdSlukem #define SLAPI_CONN_DN        			143
5252de962bdSlukem #define SLAPI_CONN_AUTHTYPE    			144
5262de962bdSlukem #define SLAPI_CONN_CLIENTIP			145
5272de962bdSlukem #define SLAPI_CONN_SERVERIP			146
5282de962bdSlukem /* OpenLDAP extensions */
5292de962bdSlukem #define SLAPI_X_CONN_CLIENTPATH			1300
5302de962bdSlukem #define SLAPI_X_CONN_SERVERPATH			1301
5312de962bdSlukem #define SLAPI_X_CONN_IS_UDP			1302
5322de962bdSlukem #define SLAPI_X_CONN_SSF			1303
5332de962bdSlukem #define SLAPI_X_CONN_SASL_CONTEXT		1304
5342de962bdSlukem #define SLAPI_X_OPERATION_DELETE_GLUE_PARENT	1305
5352de962bdSlukem #define SLAPI_X_RELAX			1306
5362de962bdSlukem #define SLAPI_X_MANAGEDIT			SLAPI_X_RELAX
5372de962bdSlukem #define SLAPI_X_OPERATION_NO_SCHEMA_CHECK	1307
5382de962bdSlukem #define SLAPI_X_ADD_STRUCTURAL_CLASS		1308
5392de962bdSlukem #define SLAPI_X_OPERATION_NO_SUBORDINATE_GLUE	1309
5402de962bdSlukem 
5412de962bdSlukem /*  Authentication types */
5422de962bdSlukem #define SLAPD_AUTH_NONE   "none"
5432de962bdSlukem #define SLAPD_AUTH_SIMPLE "simple"
5442de962bdSlukem #define SLAPD_AUTH_SSL    "SSL"
5452de962bdSlukem #define SLAPD_AUTH_SASL   "SASL "
5462de962bdSlukem 
5472de962bdSlukem /* plugin configuration parmams */
5482de962bdSlukem #define SLAPI_PLUGIN				3
5492de962bdSlukem #define SLAPI_PLUGIN_PRIVATE			4
5502de962bdSlukem #define SLAPI_PLUGIN_TYPE			5
5512de962bdSlukem #define SLAPI_PLUGIN_ARGV			6
5522de962bdSlukem #define SLAPI_PLUGIN_ARGC			7
5532de962bdSlukem #define SLAPI_PLUGIN_VERSION			8
5542de962bdSlukem #define SLAPI_PLUGIN_OPRETURN			9
5552de962bdSlukem #define SLAPI_PLUGIN_OBJECT			10
5562de962bdSlukem #define SLAPI_PLUGIN_DESTROY_FN			11
5572de962bdSlukem #define SLAPI_PLUGIN_DESCRIPTION		12
5582de962bdSlukem #define SLAPI_PLUGIN_IDENTITY			13
5592de962bdSlukem 
560*549b59edSchristos /* internal operations params */
5612de962bdSlukem #define SLAPI_PLUGIN_INTOP_RESULT		15
5622de962bdSlukem #define SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES	16
5632de962bdSlukem #define SLAPI_PLUGIN_INTOP_SEARCH_REFERRALS	17
5642de962bdSlukem 
5652de962bdSlukem /* transaction arguments */
5662de962bdSlukem #define SLAPI_PARENT_TXN			190
5672de962bdSlukem #define SLAPI_TXN				191
5682de962bdSlukem 
5692de962bdSlukem /* function pointer params for backends */
5702de962bdSlukem #define SLAPI_PLUGIN_DB_BIND_FN			200
5712de962bdSlukem #define SLAPI_PLUGIN_DB_UNBIND_FN		201
5722de962bdSlukem #define SLAPI_PLUGIN_DB_SEARCH_FN		202
5732de962bdSlukem #define SLAPI_PLUGIN_DB_COMPARE_FN		203
5742de962bdSlukem #define SLAPI_PLUGIN_DB_MODIFY_FN		204
5752de962bdSlukem #define SLAPI_PLUGIN_DB_MODRDN_FN		205
5762de962bdSlukem #define SLAPI_PLUGIN_DB_ADD_FN			206
5772de962bdSlukem #define SLAPI_PLUGIN_DB_DELETE_FN		207
5782de962bdSlukem #define SLAPI_PLUGIN_DB_ABANDON_FN		208
5792de962bdSlukem #define SLAPI_PLUGIN_DB_CONFIG_FN		209
5802de962bdSlukem #define SLAPI_PLUGIN_CLOSE_FN			210
5812de962bdSlukem #define SLAPI_PLUGIN_DB_FLUSH_FN		211
5822de962bdSlukem #define SLAPI_PLUGIN_START_FN			212
5832de962bdSlukem #define SLAPI_PLUGIN_DB_SEQ_FN			213
5842de962bdSlukem #define SLAPI_PLUGIN_DB_ENTRY_FN		214
5852de962bdSlukem #define SLAPI_PLUGIN_DB_REFERRAL_FN		215
5862de962bdSlukem #define SLAPI_PLUGIN_DB_RESULT_FN		216
5872de962bdSlukem #define SLAPI_PLUGIN_DB_LDIF2DB_FN		217
5882de962bdSlukem #define SLAPI_PLUGIN_DB_DB2LDIF_FN		218
5892de962bdSlukem #define SLAPI_PLUGIN_DB_BEGIN_FN		219
5902de962bdSlukem #define SLAPI_PLUGIN_DB_COMMIT_FN		220
5912de962bdSlukem #define SLAPI_PLUGIN_DB_ABORT_FN		221
5922de962bdSlukem #define SLAPI_PLUGIN_DB_ARCHIVE2DB_FN		222
5932de962bdSlukem #define SLAPI_PLUGIN_DB_DB2ARCHIVE_FN		223
5942de962bdSlukem #define SLAPI_PLUGIN_DB_NEXT_SEARCH_ENTRY_FN	224
5952de962bdSlukem #define SLAPI_PLUGIN_DB_FREE_RESULT_SET_FN	225
5962de962bdSlukem #define	SLAPI_PLUGIN_DB_SIZE_FN			226
5972de962bdSlukem #define	SLAPI_PLUGIN_DB_TEST_FN			227
5982de962bdSlukem 
5992de962bdSlukem 
6002de962bdSlukem /*  functions pointers for LDAP V3 extended ops */
6012de962bdSlukem #define SLAPI_PLUGIN_EXT_OP_FN			300
6022de962bdSlukem #define SLAPI_PLUGIN_EXT_OP_OIDLIST		301
6032de962bdSlukem 
6042de962bdSlukem /* preoperation */
6052de962bdSlukem #define SLAPI_PLUGIN_PRE_BIND_FN		401
6062de962bdSlukem #define SLAPI_PLUGIN_PRE_UNBIND_FN		402
6072de962bdSlukem #define SLAPI_PLUGIN_PRE_SEARCH_FN		403
6082de962bdSlukem #define SLAPI_PLUGIN_PRE_COMPARE_FN		404
6092de962bdSlukem #define SLAPI_PLUGIN_PRE_MODIFY_FN		405
6102de962bdSlukem #define SLAPI_PLUGIN_PRE_MODRDN_FN		406
6112de962bdSlukem #define SLAPI_PLUGIN_PRE_ADD_FN			407
6122de962bdSlukem #define SLAPI_PLUGIN_PRE_DELETE_FN		408
6132de962bdSlukem #define SLAPI_PLUGIN_PRE_ABANDON_FN		409
6142de962bdSlukem #define SLAPI_PLUGIN_PRE_ENTRY_FN		410
6152de962bdSlukem #define SLAPI_PLUGIN_PRE_REFERRAL_FN		411
6162de962bdSlukem #define SLAPI_PLUGIN_PRE_RESULT_FN		412
6172de962bdSlukem 
6182de962bdSlukem /* internal preoperation */
6192de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_PRE_ADD_FN	420
6202de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_PRE_MODIFY_FN	421
6212de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_PRE_MODRDN_FN	422
6222de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_PRE_DELETE_FN	423
6232de962bdSlukem 
6242de962bdSlukem /* backend preoperation */
6252de962bdSlukem #define SLAPI_PLUGIN_BE_PRE_ADD_FN		450
6262de962bdSlukem #define SLAPI_PLUGIN_BE_PRE_MODIFY_FN		451
6272de962bdSlukem #define SLAPI_PLUGIN_BE_PRE_MODRDN_FN		452
6282de962bdSlukem #define SLAPI_PLUGIN_BE_PRE_DELETE_FN		453
6292de962bdSlukem 
6302de962bdSlukem /* postoperation */
6312de962bdSlukem #define SLAPI_PLUGIN_POST_BIND_FN		501
6322de962bdSlukem #define SLAPI_PLUGIN_POST_UNBIND_FN		502
6332de962bdSlukem #define SLAPI_PLUGIN_POST_SEARCH_FN		503
6342de962bdSlukem #define SLAPI_PLUGIN_POST_COMPARE_FN		504
6352de962bdSlukem #define SLAPI_PLUGIN_POST_MODIFY_FN		505
6362de962bdSlukem #define SLAPI_PLUGIN_POST_MODRDN_FN		506
6372de962bdSlukem #define SLAPI_PLUGIN_POST_ADD_FN		507
6382de962bdSlukem #define SLAPI_PLUGIN_POST_DELETE_FN		508
6392de962bdSlukem #define SLAPI_PLUGIN_POST_ABANDON_FN		509
6402de962bdSlukem #define SLAPI_PLUGIN_POST_ENTRY_FN		510
6412de962bdSlukem #define SLAPI_PLUGIN_POST_REFERRAL_FN		511
6422de962bdSlukem #define SLAPI_PLUGIN_POST_RESULT_FN		512
6432de962bdSlukem 
6442de962bdSlukem /* internal postoperation */
6452de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_POST_ADD_FN	520
6462de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_POST_MODIFY_FN	521
6472de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_POST_MODRDN_FN	522
6482de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_POST_DELETE_FN	523
6492de962bdSlukem 
6502de962bdSlukem /* backend postoperation */
6512de962bdSlukem #define SLAPI_PLUGIN_BE_POST_ADD_FN		550
6522de962bdSlukem #define SLAPI_PLUGIN_BE_POST_MODIFY_FN		551
6532de962bdSlukem #define SLAPI_PLUGIN_BE_POST_MODRDN_FN		552
6542de962bdSlukem #define SLAPI_PLUGIN_BE_POST_DELETE_FN		553
6552de962bdSlukem 
6562de962bdSlukem #define SLAPI_OPERATION_TYPE			590
6572de962bdSlukem #define SLAPI_OPERATION_MSGID			591
6582de962bdSlukem 
6592de962bdSlukem #define SLAPI_PLUGIN_MR_FILTER_CREATE_FN	600
6602de962bdSlukem #define SLAPI_PLUGIN_MR_INDEXER_CREATE_FN	601
6612de962bdSlukem #define SLAPI_PLUGIN_MR_FILTER_MATCH_FN		602
6622de962bdSlukem #define SLAPI_PLUGIN_MR_FILTER_INDEX_FN		603
6632de962bdSlukem #define SLAPI_PLUGIN_MR_FILTER_RESET_FN		604
6642de962bdSlukem #define SLAPI_PLUGIN_MR_INDEX_FN		605
6652de962bdSlukem #define SLAPI_PLUGIN_MR_OID			610
6662de962bdSlukem #define SLAPI_PLUGIN_MR_TYPE			611
6672de962bdSlukem #define SLAPI_PLUGIN_MR_VALUE			612
6682de962bdSlukem #define SLAPI_PLUGIN_MR_VALUES			613
6692de962bdSlukem #define SLAPI_PLUGIN_MR_KEYS			614
6702de962bdSlukem #define SLAPI_PLUGIN_MR_FILTER_REUSABLE		615
6712de962bdSlukem #define SLAPI_PLUGIN_MR_QUERY_OPERATOR		616
6722de962bdSlukem #define SLAPI_PLUGIN_MR_USAGE			617
6732de962bdSlukem 
6742de962bdSlukem #define SLAPI_MATCHINGRULE_NAME			1
6752de962bdSlukem #define SLAPI_MATCHINGRULE_OID			2
6762de962bdSlukem #define SLAPI_MATCHINGRULE_DESC			3
6772de962bdSlukem #define SLAPI_MATCHINGRULE_SYNTAX		4
6782de962bdSlukem #define SLAPI_MATCHINGRULE_OBSOLETE		5
6792de962bdSlukem 
6802de962bdSlukem #define SLAPI_OP_LESS					1
6812de962bdSlukem #define SLAPI_OP_LESS_OR_EQUAL				2
6822de962bdSlukem #define SLAPI_OP_EQUAL					3
6832de962bdSlukem #define SLAPI_OP_GREATER_OR_EQUAL			4
6842de962bdSlukem #define SLAPI_OP_GREATER				5
6852de962bdSlukem #define SLAPI_OP_SUBSTRING				6
6862de962bdSlukem 
6872de962bdSlukem #define SLAPI_PLUGIN_MR_USAGE_INDEX		0
6882de962bdSlukem #define SLAPI_PLUGIN_MR_USAGE_SORT		1
6892de962bdSlukem 
6902de962bdSlukem #define SLAPI_PLUGIN_SYNTAX_FILTER_AVA		700
6912de962bdSlukem #define SLAPI_PLUGIN_SYNTAX_FILTER_SUB		701
6922de962bdSlukem #define SLAPI_PLUGIN_SYNTAX_VALUES2KEYS		702
6932de962bdSlukem #define SLAPI_PLUGIN_SYNTAX_ASSERTION2KEYS_AVA	703
6942de962bdSlukem #define SLAPI_PLUGIN_SYNTAX_ASSERTION2KEYS_SUB	704
6952de962bdSlukem #define SLAPI_PLUGIN_SYNTAX_NAMES		705
6962de962bdSlukem #define SLAPI_PLUGIN_SYNTAX_OID			706
6972de962bdSlukem #define SLAPI_PLUGIN_SYNTAX_FLAGS		707
6982de962bdSlukem #define SLAPI_PLUGIN_SYNTAX_COMPARE		708
6992de962bdSlukem 
7002de962bdSlukem #define SLAPI_PLUGIN_SYNTAX_FLAG_ORKEYS			1
7012de962bdSlukem #define SLAPI_PLUGIN_SYNTAX_FLAG_ORDERING		2
7022de962bdSlukem 
7032de962bdSlukem #define SLAPI_PLUGIN_ACL_INIT			730
7042de962bdSlukem #define SLAPI_PLUGIN_ACL_SYNTAX_CHECK		731
7052de962bdSlukem #define SLAPI_PLUGIN_ACL_ALLOW_ACCESS		732
7062de962bdSlukem #define SLAPI_PLUGIN_ACL_MODS_ALLOWED		733
7072de962bdSlukem #define SLAPI_PLUGIN_ACL_MODS_UPDATE		734
7082de962bdSlukem 
7092de962bdSlukem #define SLAPI_OPERATION_AUTHTYPE                741
7102de962bdSlukem #define SLAPI_OPERATION_ID                      742
7112de962bdSlukem #define SLAPI_CONN_CERT                         743
7122de962bdSlukem #define SLAPI_CONN_AUTHMETHOD                   746
7132de962bdSlukem #define SLAPI_IS_INTERNAL_OPERATION 		748
7142de962bdSlukem 
7152de962bdSlukem #define SLAPI_RESULT_CODE                       881
7162de962bdSlukem #define SLAPI_RESULT_TEXT                       882
7172de962bdSlukem #define SLAPI_RESULT_MATCHED                    883
7182de962bdSlukem 
7192de962bdSlukem /* managedsait control */
7202de962bdSlukem #define SLAPI_MANAGEDSAIT       		1000
7212de962bdSlukem 
7222de962bdSlukem /* audit plugin defines */
7232de962bdSlukem #define SLAPI_PLUGIN_AUDIT_DATA                1100
7242de962bdSlukem #define SLAPI_PLUGIN_AUDIT_FN                  1101
7252de962bdSlukem 
7262de962bdSlukem /* backend_group extension */
7272de962bdSlukem #define SLAPI_X_PLUGIN_PRE_GROUP_FN		1202
7282de962bdSlukem #define SLAPI_X_PLUGIN_POST_GROUP_FN		1203
7292de962bdSlukem 
7302de962bdSlukem #define SLAPI_X_GROUP_ENTRY			1250 /* group entry */
7312de962bdSlukem #define SLAPI_X_GROUP_ATTRIBUTE			1251 /* member attribute */
7322de962bdSlukem #define SLAPI_X_GROUP_OPERATION_DN		1252 /* asserted value */
7332de962bdSlukem #define SLAPI_X_GROUP_TARGET_ENTRY		1253 /* target entry */
7342de962bdSlukem 
7352de962bdSlukem /* internal preoperation extensions */
7362de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_PRE_BIND_FN	1260
7372de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_PRE_UNBIND_FN	1261
7382de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_PRE_SEARCH_FN	1262
7392de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_PRE_COMPARE_FN	1263
7402de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_PRE_ABANDON_FN	1264
7412de962bdSlukem 
7422de962bdSlukem /* internal postoperation extensions */
7432de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_POST_BIND_FN	1270
7442de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_POST_UNBIND_FN	1271
7452de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_POST_SEARCH_FN	1272
7462de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_POST_COMPARE_FN	1273
7472de962bdSlukem #define SLAPI_PLUGIN_INTERNAL_POST_ABANDON_FN	1274
7482de962bdSlukem 
7492de962bdSlukem /* config stuff */
7502de962bdSlukem #define SLAPI_CONFIG_FILENAME			40
7512de962bdSlukem #define SLAPI_CONFIG_LINENO			41
7522de962bdSlukem #define SLAPI_CONFIG_ARGC			42
7532de962bdSlukem #define SLAPI_CONFIG_ARGV			43
7542de962bdSlukem 
7552de962bdSlukem /*  operational params */
7562de962bdSlukem #define SLAPI_TARGET_ADDRESS			48
7572de962bdSlukem #define SLAPI_TARGET_UNIQUEID			49
7582de962bdSlukem #define SLAPI_TARGET_DN				50
7592de962bdSlukem 
7602de962bdSlukem /* server LDAPv3 controls  */
7612de962bdSlukem #define SLAPI_REQCONTROLS			51
7622de962bdSlukem #define SLAPI_RESCONTROLS			55
7632de962bdSlukem #define SLAPI_ADD_RESCONTROL			56
7642de962bdSlukem #define SLAPI_CONTROLS_ARG			58
7652de962bdSlukem 
7662de962bdSlukem /* add params */
7672de962bdSlukem #define SLAPI_ADD_TARGET			SLAPI_TARGET_DN
7682de962bdSlukem #define SLAPI_ADD_ENTRY				60
7692de962bdSlukem #define SLAPI_ADD_EXISTING_DN_ENTRY		61
7702de962bdSlukem #define SLAPI_ADD_PARENT_ENTRY			62
7712de962bdSlukem #define SLAPI_ADD_PARENT_UNIQUEID		63
7722de962bdSlukem #define SLAPI_ADD_EXISTING_UNIQUEID_ENTRY	64
7732de962bdSlukem 
7742de962bdSlukem /* bind params */
7752de962bdSlukem #define SLAPI_BIND_TARGET			SLAPI_TARGET_DN
7762de962bdSlukem #define SLAPI_BIND_METHOD			70
7772de962bdSlukem #define SLAPI_BIND_CREDENTIALS			71
7782de962bdSlukem #define SLAPI_BIND_SASLMECHANISM		72
7792de962bdSlukem #define SLAPI_BIND_RET_SASLCREDS		73
7802de962bdSlukem 
7812de962bdSlukem /* compare params */
7822de962bdSlukem #define SLAPI_COMPARE_TARGET			SLAPI_TARGET_DN
7832de962bdSlukem #define SLAPI_COMPARE_TYPE			80
7842de962bdSlukem #define SLAPI_COMPARE_VALUE			81
7852de962bdSlukem 
7862de962bdSlukem /* delete params */
7872de962bdSlukem #define SLAPI_DELETE_TARGET			SLAPI_TARGET_DN
7882de962bdSlukem #define SLAPI_DELETE_EXISTING_ENTRY		SLAPI_ADD_EXISTING_DN_ENTRY
7892de962bdSlukem 
7902de962bdSlukem /* modify params */
7912de962bdSlukem #define SLAPI_MODIFY_TARGET			SLAPI_TARGET_DN
7922de962bdSlukem #define SLAPI_MODIFY_MODS			90
7932de962bdSlukem #define SLAPI_MODIFY_EXISTING_ENTRY		SLAPI_ADD_EXISTING_DN_ENTRY
7942de962bdSlukem 
7952de962bdSlukem /* modrdn params */
7962de962bdSlukem #define SLAPI_MODRDN_TARGET			SLAPI_TARGET_DN
7972de962bdSlukem #define SLAPI_MODRDN_NEWRDN			100
7982de962bdSlukem #define SLAPI_MODRDN_DELOLDRDN			101
7992de962bdSlukem #define SLAPI_MODRDN_NEWSUPERIOR		102	/* v3 only */
8002de962bdSlukem #define SLAPI_MODRDN_EXISTING_ENTRY             SLAPI_ADD_EXISTING_DN_ENTRY
8012de962bdSlukem #define SLAPI_MODRDN_PARENT_ENTRY		104
8022de962bdSlukem #define SLAPI_MODRDN_NEWPARENT_ENTRY		105
8032de962bdSlukem #define SLAPI_MODRDN_TARGET_ENTRY		106
8042de962bdSlukem #define SLAPI_MODRDN_NEWSUPERIOR_ADDRESS	107
8052de962bdSlukem 
8062de962bdSlukem /* search params */
8072de962bdSlukem #define SLAPI_SEARCH_TARGET			SLAPI_TARGET_DN
8082de962bdSlukem #define SLAPI_SEARCH_SCOPE			110
8092de962bdSlukem #define SLAPI_SEARCH_DEREF			111
8102de962bdSlukem #define SLAPI_SEARCH_SIZELIMIT			112
8112de962bdSlukem #define SLAPI_SEARCH_TIMELIMIT			113
8122de962bdSlukem #define SLAPI_SEARCH_FILTER			114
8132de962bdSlukem #define SLAPI_SEARCH_STRFILTER			115
8142de962bdSlukem #define SLAPI_SEARCH_ATTRS			116
8152de962bdSlukem #define SLAPI_SEARCH_ATTRSONLY			117
8162de962bdSlukem 
8172de962bdSlukem /* abandon params */
8182de962bdSlukem #define SLAPI_ABANDON_MSGID			120
8192de962bdSlukem 
8202de962bdSlukem /* extended operation params */
8212de962bdSlukem #define SLAPI_EXT_OP_REQ_OID			160
8222de962bdSlukem #define SLAPI_EXT_OP_REQ_VALUE		161
8232de962bdSlukem 
8242de962bdSlukem /* extended operation return codes */
8252de962bdSlukem #define SLAPI_EXT_OP_RET_OID			162
8262de962bdSlukem #define SLAPI_EXT_OP_RET_VALUE		163
8272de962bdSlukem 
8282de962bdSlukem #define SLAPI_PLUGIN_EXTENDED_SENT_RESULT	-1
8292de962bdSlukem 
8302de962bdSlukem #define SLAPI_FAIL_DISKFULL		-2
8312de962bdSlukem #define SLAPI_FAIL_GENERAL		-1
8322de962bdSlukem #define SLAPI_PLUGIN_EXTENDED_NOT_HANDLED -2
8332de962bdSlukem #define SLAPI_BIND_SUCCESS		0
8342de962bdSlukem #define SLAPI_BIND_FAIL			2
8352de962bdSlukem #define SLAPI_BIND_ANONYMOUS		3
8362de962bdSlukem 
8372de962bdSlukem /* Search result params */
8382de962bdSlukem #define SLAPI_SEARCH_RESULT_SET			193
8392de962bdSlukem #define	SLAPI_SEARCH_RESULT_ENTRY		194
8402de962bdSlukem #define	SLAPI_NENTRIES				195
8412de962bdSlukem #define SLAPI_SEARCH_REFERRALS			196
8422de962bdSlukem 
8432de962bdSlukem /* filter types */
8442de962bdSlukem #ifndef LDAP_FILTER_AND
8452de962bdSlukem #define LDAP_FILTER_AND         0xa0L
8462de962bdSlukem #endif
8472de962bdSlukem #ifndef LDAP_FILTER_OR
8482de962bdSlukem #define LDAP_FILTER_OR          0xa1L
8492de962bdSlukem #endif
8502de962bdSlukem #ifndef LDAP_FILTER_NOT
8512de962bdSlukem #define LDAP_FILTER_NOT         0xa2L
8522de962bdSlukem #endif
8532de962bdSlukem #ifndef LDAP_FILTER_EQUALITY
8542de962bdSlukem #define LDAP_FILTER_EQUALITY    0xa3L
8552de962bdSlukem #endif
8562de962bdSlukem #ifndef LDAP_FILTER_SUBSTRINGS
8572de962bdSlukem #define LDAP_FILTER_SUBSTRINGS  0xa4L
8582de962bdSlukem #endif
8592de962bdSlukem #ifndef LDAP_FILTER_GE
8602de962bdSlukem #define LDAP_FILTER_GE          0xa5L
8612de962bdSlukem #endif
8622de962bdSlukem #ifndef LDAP_FILTER_LE
8632de962bdSlukem #define LDAP_FILTER_LE          0xa6L
8642de962bdSlukem #endif
8652de962bdSlukem #ifndef LDAP_FILTER_PRESENT
8662de962bdSlukem #define LDAP_FILTER_PRESENT     0x87L
8672de962bdSlukem #endif
8682de962bdSlukem #ifndef LDAP_FILTER_APPROX
8692de962bdSlukem #define LDAP_FILTER_APPROX      0xa8L
8702de962bdSlukem #endif
8712de962bdSlukem #ifndef LDAP_FILTER_EXT_MATCH
8722de962bdSlukem #define LDAP_FILTER_EXT_MATCH   0xa9L
8732de962bdSlukem #endif
8742de962bdSlukem 
8752de962bdSlukem int slapi_log_error( int severity, char *subsystem, char *fmt, ... );
8762de962bdSlukem #define SLAPI_LOG_FATAL                 0
8772de962bdSlukem #define SLAPI_LOG_TRACE                 1
8782de962bdSlukem #define SLAPI_LOG_PACKETS               2
8792de962bdSlukem #define SLAPI_LOG_ARGS                  3
8802de962bdSlukem #define SLAPI_LOG_CONNS                 4
8812de962bdSlukem #define SLAPI_LOG_BER                   5
8822de962bdSlukem #define SLAPI_LOG_FILTER                6
8832de962bdSlukem #define SLAPI_LOG_CONFIG                7
8842de962bdSlukem #define SLAPI_LOG_ACL                   8
8852de962bdSlukem #define SLAPI_LOG_SHELL                 9
8862de962bdSlukem #define SLAPI_LOG_PARSE                 10
8872de962bdSlukem #define SLAPI_LOG_HOUSE                 11
8882de962bdSlukem #define SLAPI_LOG_REPL                  12
8892de962bdSlukem #define SLAPI_LOG_CACHE                 13
8902de962bdSlukem #define SLAPI_LOG_PLUGIN                14
8912de962bdSlukem #define SLAPI_LOG_TIMING                15
8922de962bdSlukem 
8932de962bdSlukem #define SLAPI_PLUGIN_DESCRIPTION	12
8942de962bdSlukem typedef struct slapi_plugindesc {
8952de962bdSlukem         char    *spd_id;
8962de962bdSlukem         char    *spd_vendor;
8972de962bdSlukem         char    *spd_version;
8982de962bdSlukem         char    *spd_description;
8992de962bdSlukem } Slapi_PluginDesc;
9002de962bdSlukem 
9012de962bdSlukem #define SLAPI_PLUGIN_VERSION_01         "01"
9022de962bdSlukem #define SLAPI_PLUGIN_VERSION_02         "02"
9032de962bdSlukem #define SLAPI_PLUGIN_VERSION_03         "03"
9042de962bdSlukem #define SLAPI_PLUGIN_CURRENT_VERSION    SLAPI_PLUGIN_VERSION_03
9052de962bdSlukem 
9062de962bdSlukem #endif /* _SLAPI_PLUGIN_H */
9072de962bdSlukem 
908