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