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