2 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 * Copyright 2002-2005 The OpenLDAP Foundation.
5 * Portions Copyright 1997,2002-2003 IBM Corporation.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted only as authorized by the OpenLDAP
12 * A copy of this license is available in the file LICENSE in the
13 * top-level directory of the distribution or, alternatively, at
14 * <http://www.OpenLDAP.org/license.html>.
17 * This work was initially developed by IBM Corporation for use in
18 * IBM products and subsequently ported to OpenLDAP Software by
19 * Steve Omrani. Additional significant contributors include:
29 /* some parameters require a valid connection and operation */
30 #define PBLOCK_LOCK_CONN( _pb ) do { \
31 ldap_pvt_thread_mutex_lock( &(_pb)->pb_conn->c_mutex ); \
34 #define PBLOCK_UNLOCK_CONN( _pb ) do { \
35 ldap_pvt_thread_mutex_unlock( &(_pb)->pb_conn->c_mutex ); \
38 /* some parameters are only settable for internal operations */
39 #define PBLOCK_VALIDATE_IS_INTOP( _pb ) do { if ( (_pb)->pb_intop == 0 ) break; } while ( 0 )
41 static slapi_pblock_class_t
42 pblock_get_param_class( int param )
45 case SLAPI_PLUGIN_TYPE:
46 case SLAPI_PLUGIN_ARGC:
47 case SLAPI_PLUGIN_OPRETURN:
48 case SLAPI_PLUGIN_INTOP_RESULT:
49 case SLAPI_CONFIG_LINENO:
50 case SLAPI_CONFIG_ARGC:
51 case SLAPI_BIND_METHOD:
52 case SLAPI_MODRDN_DELOLDRDN:
53 case SLAPI_SEARCH_SCOPE:
54 case SLAPI_SEARCH_DEREF:
55 case SLAPI_SEARCH_SIZELIMIT:
56 case SLAPI_SEARCH_TIMELIMIT:
57 case SLAPI_SEARCH_ATTRSONLY:
59 case SLAPI_CHANGENUMBER:
61 case SLAPI_REQUESTOR_ISROOT:
62 case SLAPI_BE_READONLY:
63 case SLAPI_BE_LASTMOD:
64 case SLAPI_DB2LDIF_PRINTKEY:
65 case SLAPI_LDIF2DB_REMOVEDUPVALS:
66 case SLAPI_MANAGEDSAIT:
67 case SLAPI_IS_REPLICATED_OPERATION:
68 case SLAPI_X_CONN_IS_UDP:
69 case SLAPI_X_CONN_SSF:
70 case SLAPI_RESULT_CODE:
71 case SLAPI_LOG_OPERATION:
72 return PBLOCK_CLASS_INTEGER;
76 case SLAPI_OPERATION_ID:
77 case SLAPI_OPINITIATED_TIME:
78 case SLAPI_ABANDON_MSGID:
79 return PBLOCK_CLASS_LONG_INTEGER;
82 case SLAPI_PLUGIN_DESTROY_FN:
83 case SLAPI_PLUGIN_DB_BIND_FN:
84 case SLAPI_PLUGIN_DB_UNBIND_FN:
85 case SLAPI_PLUGIN_DB_SEARCH_FN:
86 case SLAPI_PLUGIN_DB_COMPARE_FN:
87 case SLAPI_PLUGIN_DB_MODIFY_FN:
88 case SLAPI_PLUGIN_DB_MODRDN_FN:
89 case SLAPI_PLUGIN_DB_ADD_FN:
90 case SLAPI_PLUGIN_DB_DELETE_FN:
91 case SLAPI_PLUGIN_DB_ABANDON_FN:
92 case SLAPI_PLUGIN_DB_CONFIG_FN:
93 case SLAPI_PLUGIN_CLOSE_FN:
94 case SLAPI_PLUGIN_DB_FLUSH_FN:
95 case SLAPI_PLUGIN_START_FN:
96 case SLAPI_PLUGIN_DB_SEQ_FN:
97 case SLAPI_PLUGIN_DB_ENTRY_FN:
98 case SLAPI_PLUGIN_DB_REFERRAL_FN:
99 case SLAPI_PLUGIN_DB_RESULT_FN:
100 case SLAPI_PLUGIN_DB_LDIF2DB_FN:
101 case SLAPI_PLUGIN_DB_DB2LDIF_FN:
102 case SLAPI_PLUGIN_DB_BEGIN_FN:
103 case SLAPI_PLUGIN_DB_COMMIT_FN:
104 case SLAPI_PLUGIN_DB_ABORT_FN:
105 case SLAPI_PLUGIN_DB_ARCHIVE2DB_FN:
106 case SLAPI_PLUGIN_DB_DB2ARCHIVE_FN:
107 case SLAPI_PLUGIN_DB_NEXT_SEARCH_ENTRY_FN:
108 case SLAPI_PLUGIN_DB_FREE_RESULT_SET_FN:
109 case SLAPI_PLUGIN_DB_SIZE_FN:
110 case SLAPI_PLUGIN_DB_TEST_FN:
111 case SLAPI_PLUGIN_DB_NO_ACL:
112 case SLAPI_PLUGIN_EXT_OP_FN:
113 case SLAPI_PLUGIN_EXT_OP_OIDLIST:
114 case SLAPI_PLUGIN_PRE_BIND_FN:
115 case SLAPI_PLUGIN_PRE_UNBIND_FN:
116 case SLAPI_PLUGIN_PRE_SEARCH_FN:
117 case SLAPI_PLUGIN_PRE_COMPARE_FN:
118 case SLAPI_PLUGIN_PRE_MODIFY_FN:
119 case SLAPI_PLUGIN_PRE_MODRDN_FN:
120 case SLAPI_PLUGIN_PRE_ADD_FN:
121 case SLAPI_PLUGIN_PRE_DELETE_FN:
122 case SLAPI_PLUGIN_PRE_ABANDON_FN:
123 case SLAPI_PLUGIN_PRE_ENTRY_FN:
124 case SLAPI_PLUGIN_PRE_REFERRAL_FN:
125 case SLAPI_PLUGIN_PRE_RESULT_FN:
126 case SLAPI_PLUGIN_INTERNAL_PRE_ADD_FN:
127 case SLAPI_PLUGIN_INTERNAL_PRE_MODIFY_FN:
128 case SLAPI_PLUGIN_INTERNAL_PRE_MODRDN_FN:
129 case SLAPI_PLUGIN_INTERNAL_PRE_DELETE_FN:
130 case SLAPI_PLUGIN_BE_PRE_ADD_FN:
131 case SLAPI_PLUGIN_BE_PRE_MODIFY_FN:
132 case SLAPI_PLUGIN_BE_PRE_MODRDN_FN:
133 case SLAPI_PLUGIN_BE_PRE_DELETE_FN:
134 case SLAPI_PLUGIN_POST_BIND_FN:
135 case SLAPI_PLUGIN_POST_UNBIND_FN:
136 case SLAPI_PLUGIN_POST_SEARCH_FN:
137 case SLAPI_PLUGIN_POST_COMPARE_FN:
138 case SLAPI_PLUGIN_POST_MODIFY_FN:
139 case SLAPI_PLUGIN_POST_MODRDN_FN:
140 case SLAPI_PLUGIN_POST_ADD_FN:
141 case SLAPI_PLUGIN_POST_DELETE_FN:
142 case SLAPI_PLUGIN_POST_ABANDON_FN:
143 case SLAPI_PLUGIN_POST_ENTRY_FN:
144 case SLAPI_PLUGIN_POST_REFERRAL_FN:
145 case SLAPI_PLUGIN_POST_RESULT_FN:
146 case SLAPI_PLUGIN_INTERNAL_POST_ADD_FN:
147 case SLAPI_PLUGIN_INTERNAL_POST_MODIFY_FN:
148 case SLAPI_PLUGIN_INTERNAL_POST_MODRDN_FN:
149 case SLAPI_PLUGIN_INTERNAL_POST_DELETE_FN:
150 case SLAPI_PLUGIN_BE_POST_ADD_FN:
151 case SLAPI_PLUGIN_BE_POST_MODIFY_FN:
152 case SLAPI_PLUGIN_BE_POST_MODRDN_FN:
153 case SLAPI_PLUGIN_BE_POST_DELETE_FN:
154 case SLAPI_PLUGIN_MR_FILTER_CREATE_FN:
155 case SLAPI_PLUGIN_MR_INDEXER_CREATE_FN:
156 case SLAPI_PLUGIN_MR_FILTER_MATCH_FN:
157 case SLAPI_PLUGIN_MR_FILTER_INDEX_FN:
158 case SLAPI_PLUGIN_MR_FILTER_RESET_FN:
159 case SLAPI_PLUGIN_MR_INDEX_FN:
160 case SLAPI_PLUGIN_COMPUTE_EVALUATOR_FN:
161 case SLAPI_PLUGIN_COMPUTE_SEARCH_REWRITER_FN:
162 case SLAPI_PLUGIN_ACL_ALLOW_ACCESS:
163 case SLAPI_X_PLUGIN_PRE_GROUP_FN:
164 case SLAPI_X_PLUGIN_POST_GROUP_FN:
165 case SLAPI_PLUGIN_AUDIT_FN:
166 return PBLOCK_CLASS_FUNCTION_POINTER;
170 case SLAPI_CONNECTION:
171 case SLAPI_OPERATION:
172 case SLAPI_OPERATION_PARAMETERS:
173 case SLAPI_OPERATION_TYPE:
174 case SLAPI_OPERATION_AUTHTYPE:
175 case SLAPI_BE_MONITORDN:
177 case SLAPI_REQUESTOR_DN:
179 case SLAPI_CONN_CLIENTIP:
180 case SLAPI_CONN_SERVERIP:
181 case SLAPI_CONN_AUTHTYPE:
182 case SLAPI_CONN_AUTHMETHOD:
183 case SLAPI_CONN_CERT:
184 case SLAPI_X_CONN_CLIENTPATH:
185 case SLAPI_X_CONN_SERVERPATH:
186 case SLAPI_X_CONN_SASL_CONTEXT:
187 case SLAPI_X_CONFIG_ARGV:
188 case SLAPI_X_INTOP_FLAGS:
189 case SLAPI_X_INTOP_RESULT_CALLBACK:
190 case SLAPI_X_INTOP_SEARCH_ENTRY_CALLBACK:
191 case SLAPI_X_INTOP_REFERRAL_ENTRY_CALLBACK:
192 case SLAPI_X_INTOP_CALLBACK_DATA:
193 case SLAPI_PLUGIN_MR_OID:
194 case SLAPI_PLUGIN_MR_TYPE:
195 case SLAPI_PLUGIN_MR_VALUE:
196 case SLAPI_PLUGIN_MR_VALUES:
197 case SLAPI_PLUGIN_MR_KEYS:
199 case SLAPI_PLUGIN_PRIVATE:
200 case SLAPI_PLUGIN_ARGV:
201 case SLAPI_PLUGIN_OBJECT:
202 case SLAPI_PLUGIN_DESCRIPTION:
203 case SLAPI_PLUGIN_IDENTITY:
204 case SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES:
205 case SLAPI_PLUGIN_INTOP_SEARCH_REFERRALS:
206 case SLAPI_PLUGIN_MR_FILTER_REUSABLE:
207 case SLAPI_PLUGIN_MR_QUERY_OPERATOR:
208 case SLAPI_PLUGIN_MR_USAGE:
210 case SLAPI_OP_LESS_OR_EQUAL:
211 case SLAPI_PLUGIN_MR_USAGE_INDEX:
212 case SLAPI_PLUGIN_SYNTAX_FILTER_AVA:
213 case SLAPI_PLUGIN_SYNTAX_FILTER_SUB:
214 case SLAPI_PLUGIN_SYNTAX_VALUES2KEYS:
215 case SLAPI_PLUGIN_SYNTAX_ASSERTION2KEYS_AVA:
216 case SLAPI_PLUGIN_SYNTAX_ASSERTION2KEYS_SUB:
217 case SLAPI_PLUGIN_SYNTAX_NAMES:
218 case SLAPI_PLUGIN_SYNTAX_OID:
219 case SLAPI_PLUGIN_SYNTAX_FLAGS:
220 case SLAPI_PLUGIN_SYNTAX_COMPARE:
221 case SLAPI_CONFIG_FILENAME:
222 case SLAPI_CONFIG_ARGV:
223 case SLAPI_TARGET_ADDRESS:
224 case SLAPI_TARGET_UNIQUEID:
225 case SLAPI_TARGET_DN:
226 case SLAPI_REQCONTROLS:
227 case SLAPI_ENTRY_PRE_OP:
228 case SLAPI_ENTRY_POST_OP:
229 case SLAPI_RESCONTROLS:
230 case SLAPI_X_OLD_RESCONTROLS:
231 case SLAPI_ADD_RESCONTROL:
232 case SLAPI_CONTROLS_ARG:
233 case SLAPI_ADD_ENTRY:
234 case SLAPI_ADD_EXISTING_DN_ENTRY:
235 case SLAPI_ADD_PARENT_ENTRY:
236 case SLAPI_ADD_PARENT_UNIQUEID:
237 case SLAPI_ADD_EXISTING_UNIQUEID_ENTRY:
238 case SLAPI_BIND_CREDENTIALS:
239 case SLAPI_BIND_SASLMECHANISM:
240 case SLAPI_BIND_RET_SASLCREDS:
241 case SLAPI_COMPARE_TYPE:
242 case SLAPI_COMPARE_VALUE:
243 case SLAPI_MODIFY_MODS:
244 case SLAPI_MODRDN_NEWRDN:
245 case SLAPI_MODRDN_NEWSUPERIOR:
246 case SLAPI_MODRDN_PARENT_ENTRY:
247 case SLAPI_MODRDN_NEWPARENT_ENTRY:
248 case SLAPI_MODRDN_TARGET_ENTRY:
249 case SLAPI_MODRDN_NEWSUPERIOR_ADDRESS:
250 case SLAPI_SEARCH_FILTER:
251 case SLAPI_SEARCH_STRFILTER:
252 case SLAPI_SEARCH_ATTRS:
254 case SLAPI_SEQ_ATTRNAME:
256 case SLAPI_EXT_OP_REQ_OID:
257 case SLAPI_EXT_OP_REQ_VALUE:
258 case SLAPI_EXT_OP_RET_OID:
259 case SLAPI_EXT_OP_RET_VALUE:
260 case SLAPI_MR_FILTER_ENTRY:
261 case SLAPI_MR_FILTER_TYPE:
262 case SLAPI_MR_FILTER_VALUE:
263 case SLAPI_MR_FILTER_OID:
264 case SLAPI_MR_FILTER_DNATTRS:
265 case SLAPI_LDIF2DB_FILE:
266 case SLAPI_PARENT_TXN:
268 case SLAPI_SEARCH_RESULT_SET:
269 case SLAPI_SEARCH_RESULT_ENTRY:
270 case SLAPI_SEARCH_REFERRALS:
271 case SLAPI_RESULT_TEXT:
272 case SLAPI_RESULT_MATCHED:
273 case SLAPI_X_GROUP_ENTRY:
274 case SLAPI_X_GROUP_ATTRIBUTE:
275 case SLAPI_X_GROUP_OPERATION_DN:
276 case SLAPI_X_GROUP_TARGET_ENTRY:
277 case SLAPI_PLUGIN_AUDIT_DATA:
278 case SLAPI_IBM_PBLOCK:
279 case SLAPI_PLUGIN_VERSION:
280 return PBLOCK_CLASS_POINTER;
286 return PBLOCK_CLASS_INVALID;
290 pblock_lock( Slapi_PBlock *pb )
292 ldap_pvt_thread_mutex_lock(&pb->pb_mutex);
296 pblock_unlock( Slapi_PBlock *pb )
298 ldap_pvt_thread_mutex_unlock(&pb->pb_mutex);
302 pblock_get_default( Slapi_PBlock *pb, int param, void **value )
305 slapi_pblock_class_t pbClass;
307 pbClass = pblock_get_param_class( param );
308 if ( pbClass == PBLOCK_CLASS_INVALID ) {
313 case PBLOCK_CLASS_INTEGER:
316 case PBLOCK_CLASS_LONG_INTEGER:
317 *((long *)value) = 0L;
319 case PBLOCK_CLASS_POINTER:
320 case PBLOCK_CLASS_FUNCTION_POINTER:
323 case PBLOCK_CLASS_INVALID:
327 for ( i = 0; i < pb->pb_nParams; i++ ) {
328 if ( pb->pb_params[i] == param ) {
330 case PBLOCK_CLASS_INTEGER:
331 *((int *)value) = pb->pb_values[i].pv_integer;
333 case PBLOCK_CLASS_LONG_INTEGER:
334 *((long *)value) = pb->pb_values[i].pv_long_integer;
336 case PBLOCK_CLASS_POINTER:
337 *value = pb->pb_values[i].pv_pointer;
339 case PBLOCK_CLASS_FUNCTION_POINTER:
340 *value = pb->pb_values[i].pv_function_pointer;
349 return PBLOCK_SUCCESS;
353 pblock_get_authtype( AuthorizationInformation *authz, int is_tls )
357 switch ( authz->sai_method ) {
359 authType = SLAPD_AUTH_SASL;
361 case LDAP_AUTH_SIMPLE:
362 authType = SLAPD_AUTH_SIMPLE;
365 authType = SLAPD_AUTH_NONE;
372 if ( is_tls && authType == NULL ) {
373 authType = SLAPD_AUTH_SSL;
380 pblock_set_default( Slapi_PBlock *pb, int param, void *value )
382 slapi_pblock_class_t pbClass;
385 pbClass = pblock_get_param_class( param );
386 if ( pbClass == PBLOCK_CLASS_INVALID ) {
390 if ( pb->pb_nParams == PBLOCK_MAX_PARAMS ) {
394 for ( i = 0; i < pb->pb_nParams; i++ ) {
395 if ( pb->pb_params[i] == param )
398 if ( i >= pb->pb_nParams ) {
399 pb->pb_params[i] = param;
404 case PBLOCK_CLASS_INTEGER:
405 pb->pb_values[i].pv_integer = (*((int *)value));
407 case PBLOCK_CLASS_LONG_INTEGER:
408 pb->pb_values[i].pv_long_integer = (*((long *)value));
410 case PBLOCK_CLASS_POINTER:
411 pb->pb_values[i].pv_pointer = value;
413 case PBLOCK_CLASS_FUNCTION_POINTER:
414 pb->pb_values[i].pv_function_pointer = value;
420 return PBLOCK_SUCCESS;
424 pblock_be_call( Slapi_PBlock *pb, int (*bep)(Operation *) )
430 PBLOCK_ASSERT_OP( pb, 0 );
434 op->o_bd = select_backend( &op->o_req_ndn, 0, 0 );
442 pblock_get( Slapi_PBlock *pb, int param, void **value )
444 int rc = PBLOCK_SUCCESS;
449 case SLAPI_OPERATION:
452 case SLAPI_OPINITIATED_TIME:
453 PBLOCK_ASSERT_OP( pb, 0 );
454 *((long *)value) = pb->pb_op->o_time;
456 case SLAPI_OPERATION_ID:
457 PBLOCK_ASSERT_OP( pb, 0 );
458 *((long *)value) = pb->pb_op->o_opid;
460 case SLAPI_OPERATION_TYPE:
461 PBLOCK_ASSERT_OP( pb, 0 );
462 *((ber_tag_t *)value) = pb->pb_op->o_tag;
464 case SLAPI_REQCONTROLS:
465 PBLOCK_ASSERT_OP( pb, 0 );
466 *((LDAPControl ***)value) = pb->pb_op->o_ctrls;
468 case SLAPI_REQUESTOR_DN:
469 PBLOCK_ASSERT_OP( pb, 0 );
470 *((char **)value) = pb->pb_op->o_ndn.bv_val;
472 case SLAPI_MANAGEDSAIT:
473 PBLOCK_ASSERT_OP( pb, 0 );
474 *((int *)value) = get_manageDSAit( pb->pb_op );
477 PBLOCK_ASSERT_OP( pb, 0 );
478 *((BackendDB **)value) = pb->pb_op->o_bd;
481 PBLOCK_ASSERT_OP( pb, 0 );
482 if ( pb->pb_op->o_bd != NULL )
483 *((char **)value) = pb->pb_op->o_bd->bd_info->bi_type;
487 case SLAPI_CONNECTION:
488 *value = pb->pb_conn;
490 case SLAPI_X_CONN_SSF:
491 PBLOCK_ASSERT_OP( pb, 0 );
492 *((slap_ssf_t *)value) = pb->pb_conn->c_ssf;
494 case SLAPI_X_CONN_SASL_CONTEXT:
495 PBLOCK_ASSERT_CONN( pb );
496 if ( pb->pb_conn->c_sasl_authctx != NULL )
497 *value = pb->pb_conn->c_sasl_authctx;
499 *value = pb->pb_conn->c_sasl_sockctx;
501 case SLAPI_TARGET_DN:
502 PBLOCK_ASSERT_OP( pb, 0 );
503 *((char **)value) = pb->pb_op->o_req_ndn.bv_val;
505 case SLAPI_REQUESTOR_ISROOT:
506 *((int *)value) = pblock_be_call( pb, be_isroot );
508 case SLAPI_IS_REPLICATED_OPERATION:
509 *((int *)value) = pblock_be_call( pb, be_slurp_update );
511 case SLAPI_CONN_AUTHTYPE:
512 case SLAPI_CONN_AUTHMETHOD: /* XXX should return SASL mech */
513 PBLOCK_ASSERT_CONN( pb );
514 *((char **)value) = pblock_get_authtype( &pb->pb_conn->c_authz,
516 pb->pb_conn->c_is_tls
522 case SLAPI_X_CONN_IS_UDP:
523 PBLOCK_ASSERT_CONN( pb );
524 #ifdef LDAP_CONNECTIONLESS
525 *((int *)value) = pb->pb_conn->c_is_udp;
531 PBLOCK_ASSERT_CONN( pb );
532 *((long *)value) = pb->pb_conn->c_connid;
535 PBLOCK_ASSERT_CONN( pb );
536 *((char **)value) = pb->pb_conn->c_dn.bv_val;
538 case SLAPI_CONN_CLIENTIP:
539 PBLOCK_ASSERT_CONN( pb );
540 if ( strncmp( pb->pb_conn->c_peer_name.bv_val, "IP=", 3 ) == 0 )
541 *((char **)value) = &pb->pb_conn->c_peer_name.bv_val[3];
545 case SLAPI_X_CONN_CLIENTPATH:
546 PBLOCK_ASSERT_CONN( pb );
547 if ( strncmp( pb->pb_conn->c_peer_name.bv_val, "PATH=", 3 ) == 0 )
548 *((char **)value) = &pb->pb_conn->c_peer_name.bv_val[5];
552 case SLAPI_CONN_SERVERIP:
553 PBLOCK_ASSERT_CONN( pb );
554 if ( strncmp( pb->pb_conn->c_peer_name.bv_val, "IP=", 3 ) == 0 )
555 *((char **)value) = &pb->pb_conn->c_sock_name.bv_val[3];
559 case SLAPI_X_CONN_SERVERPATH:
560 PBLOCK_ASSERT_CONN( pb );
561 if ( strncmp( pb->pb_conn->c_peer_name.bv_val, "PATH=", 3 ) == 0 )
562 *((char **)value) = &pb->pb_conn->c_sock_name.bv_val[5];
566 case SLAPI_RESULT_CODE:
567 case SLAPI_PLUGIN_INTOP_RESULT:
568 PBLOCK_ASSERT_OP( pb, 0 );
569 *((int *)value) = pb->pb_rs->sr_err;
571 case SLAPI_RESULT_TEXT:
572 PBLOCK_ASSERT_OP( pb, 0 );
573 *((const char **)value) = pb->pb_rs->sr_text;
575 case SLAPI_RESULT_MATCHED:
576 PBLOCK_ASSERT_OP( pb, 0 );
577 *((const char **)value) = pb->pb_rs->sr_matched;
579 case SLAPI_ADD_ENTRY:
580 PBLOCK_ASSERT_OP( pb, 0 );
581 if ( pb->pb_op->o_tag == LDAP_REQ_ADD )
582 *((Slapi_Entry **)value) = pb->pb_op->ora_e;
586 case SLAPI_MODIFY_MODS: {
587 LDAPMod **mods = NULL;
589 pblock_get_default( pb, param, (void **)&mods );
590 if ( mods == NULL && pb->pb_intop == 0 ) {
591 if ( pb->pb_op->o_tag != LDAP_REQ_MODIFY ) {
595 mods = slapi_int_modifications2ldapmods( &pb->pb_op->orm_modlist, NULL );
596 pblock_set_default( pb, param, (void *)mods );
598 *((LDAPMod ***)value) = mods;
601 case SLAPI_MODRDN_NEWRDN:
602 PBLOCK_ASSERT_OP( pb, 0 );
603 if ( pb->pb_op->o_tag == LDAP_REQ_MODRDN )
604 *((char **)value) = pb->pb_op->orr_newrdn.bv_val;
608 case SLAPI_MODRDN_NEWSUPERIOR:
609 PBLOCK_ASSERT_OP( pb, 0 );
610 if ( pb->pb_op->o_tag == LDAP_REQ_MODRDN && pb->pb_op->orr_newSup != NULL )
611 *((char **)value) = pb->pb_op->orr_newSup->bv_val;
615 case SLAPI_MODRDN_DELOLDRDN:
616 PBLOCK_ASSERT_OP( pb, 0 );
617 if ( pb->pb_op->o_tag == LDAP_REQ_MODRDN )
618 *((int *)value) = pb->pb_op->orr_deleteoldrdn;
622 case SLAPI_SEARCH_SCOPE:
623 PBLOCK_ASSERT_OP( pb, 0 );
624 if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )
625 *((int *)value) = pb->pb_op->ors_scope;
629 case SLAPI_SEARCH_DEREF:
630 PBLOCK_ASSERT_OP( pb, 0 );
631 if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )
632 *((int *)value) = pb->pb_op->ors_deref;
636 case SLAPI_SEARCH_SIZELIMIT:
637 PBLOCK_ASSERT_OP( pb, 0 );
638 if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )
639 *((int *)value) = pb->pb_op->ors_slimit;
643 case SLAPI_SEARCH_TIMELIMIT:
644 PBLOCK_ASSERT_OP( pb, 0 );
645 if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )
646 *((int *)value) = pb->pb_op->ors_tlimit;
650 case SLAPI_SEARCH_FILTER:
651 PBLOCK_ASSERT_OP( pb, 0 );
652 if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )
653 *((Slapi_Filter **)value) = pb->pb_op->ors_filter;
655 *((Slapi_Filter **)value) = NULL;
657 case SLAPI_SEARCH_STRFILTER:
658 PBLOCK_ASSERT_OP( pb, 0 );
659 if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )
660 *((char **)value) = pb->pb_op->ors_filterstr.bv_val;
662 *((char **)value) = NULL;
664 case SLAPI_SEARCH_ATTRS: {
667 PBLOCK_ASSERT_OP( pb, 0 );
668 if ( pb->pb_op->o_tag != LDAP_REQ_SEARCH ) {
672 pblock_get_default( pb, param, (void **)&attrs );
673 if ( attrs == NULL && pb->pb_intop == 0 ) {
674 attrs = anlist2charray_x( pb->pb_op->ors_attrs, 0, pb->pb_op->o_tmpmemctx );
675 pblock_set_default( pb, param, (void *)attrs );
677 *((char ***)attrs) = attrs;
679 case SLAPI_SEARCH_ATTRSONLY:
680 PBLOCK_ASSERT_OP( pb, 0 );
681 if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )
682 *((int *)value) = pb->pb_op->ors_attrsonly;
686 case SLAPI_SEARCH_RESULT_ENTRY:
687 PBLOCK_ASSERT_OP( pb, 0 );
688 *((Slapi_Entry **)value) = pb->pb_rs->sr_entry;
690 case SLAPI_BIND_RET_SASLCREDS:
691 PBLOCK_ASSERT_OP( pb, 0 );
692 *((struct berval **)value) = pb->pb_rs->sr_sasldata;
694 case SLAPI_EXT_OP_REQ_OID:
695 *((const char **)value) = pb->pb_op->ore_reqoid.bv_val;
697 case SLAPI_EXT_OP_REQ_VALUE:
698 *((struct berval **)value) = pb->pb_op->ore_reqdata;
700 case SLAPI_EXT_OP_RET_OID:
701 PBLOCK_ASSERT_OP( pb, 0 );
702 *((const char **)value) = pb->pb_rs->sr_rspoid;
704 case SLAPI_EXT_OP_RET_VALUE:
705 PBLOCK_ASSERT_OP( pb, 0 );
706 *((struct berval **)value) = pb->pb_rs->sr_rspdata;
708 case SLAPI_BIND_METHOD:
709 if ( pb->pb_op->o_tag == LDAP_REQ_BIND )
710 *((int *)value) = pb->pb_op->orb_method;
714 case SLAPI_BIND_CREDENTIALS:
715 if ( pb->pb_op->o_tag == LDAP_REQ_BIND )
716 *((struct berval **)value) = &pb->pb_op->orb_cred;
720 case SLAPI_COMPARE_TYPE:
721 if ( pb->pb_op->o_tag == LDAP_REQ_COMPARE )
722 *((char **)value) = pb->pb_op->orc_ava->aa_desc->ad_cname.bv_val;
726 case SLAPI_COMPARE_VALUE:
727 if ( pb->pb_op->o_tag == LDAP_REQ_COMPARE )
728 *((struct berval **)value) = &pb->pb_op->orc_ava->aa_value;
732 case SLAPI_ABANDON_MSGID:
733 if ( pb->pb_op->o_tag == LDAP_REQ_ABANDON )
734 *((int *)value) = pb->pb_op->orn_msgid;
739 rc = pblock_get_default( pb, param, value );
749 pblock_add_control( Slapi_PBlock *pb, LDAPControl *control )
751 LDAPControl **controls = NULL;
754 pblock_get_default( pb, SLAPI_RESCONTROLS, (void **)&controls );
756 if ( controls != NULL ) {
757 for ( i = 0; controls[i] != NULL; i++ )
763 controls = (LDAPControl **)slapi_ch_realloc( (char *)controls,
764 ( i + 2 ) * sizeof(LDAPControl *));
765 controls[i] = control;
767 return pblock_set_default( pb, SLAPI_RESCONTROLS, (void *)controls );
771 pblock_set_dn( void *value, struct berval *dn, struct berval *ndn, void *memctx )
775 if ( !BER_BVISNULL( dn )) {
776 slap_sl_free( dn->bv_val, memctx );
779 if ( !BER_BVISNULL( ndn )) {
780 slap_sl_free( ndn->bv_val, memctx );
784 bv.bv_val = (char *)value;
785 bv.bv_len = strlen( bv.bv_val );
787 return dnPrettyNormal( NULL, &bv, dn, ndn, memctx );
791 pblock_set( Slapi_PBlock *pb, int param, void *value )
793 int rc = PBLOCK_SUCCESS;
798 case SLAPI_OPERATION:
799 pb->pb_op = (Operation *)value;
801 case SLAPI_OPINITIATED_TIME:
802 PBLOCK_ASSERT_OP( pb, 0 );
803 pb->pb_op->o_time = *((long *)value);
805 case SLAPI_OPERATION_ID:
806 PBLOCK_ASSERT_OP( pb, 0 );
807 pb->pb_op->o_opid = *((long *)value);
809 case SLAPI_OPERATION_TYPE:
810 PBLOCK_ASSERT_OP( pb, 0 );
811 pb->pb_op->o_tag = *((ber_tag_t *)value);
813 case SLAPI_REQCONTROLS:
814 PBLOCK_ASSERT_OP( pb, 0 );
815 pb->pb_op->o_ctrls = (LDAPControl **)value;
817 case SLAPI_RESCONTROLS: {
818 LDAPControl **ctrls = NULL;
820 pblock_get_default( pb, param, (void **)&ctrls );
821 if ( ctrls == NULL ) {
822 /* free old ones first */
823 ldap_controls_free( ctrls );
825 rc = pblock_set_default( pb, param, value );
828 case SLAPI_ADD_RESCONTROL:
829 PBLOCK_ASSERT_OP( pb, 0 );
830 rc = pblock_add_control( pb, (LDAPControl *)value );
832 case SLAPI_REQUESTOR_DN:
833 PBLOCK_ASSERT_OP( pb, 0 );
834 rc = pblock_set_dn( value, &pb->pb_op->o_dn, &pb->pb_op->o_ndn, pb->pb_op->o_tmpmemctx );
836 case SLAPI_MANAGEDSAIT:
837 PBLOCK_ASSERT_OP( pb, 0 );
838 pb->pb_op->o_managedsait = *((int *)value);
841 PBLOCK_ASSERT_OP( pb, 0 );
842 pb->pb_op->o_bd = (BackendDB *)value;
844 case SLAPI_CONNECTION:
845 pb->pb_conn = (Connection *)value;
847 case SLAPI_X_CONN_SSF:
848 PBLOCK_ASSERT_CONN( pb );
849 PBLOCK_LOCK_CONN( pb );
850 pb->pb_conn->c_ssf = (slap_ssf_t)value;
851 PBLOCK_UNLOCK_CONN( pb );
853 case SLAPI_X_CONN_SASL_CONTEXT:
854 PBLOCK_ASSERT_CONN( pb );
855 PBLOCK_LOCK_CONN( pb );
856 pb->pb_conn->c_sasl_authctx = value;
857 PBLOCK_UNLOCK_CONN( pb );
859 case SLAPI_TARGET_DN:
860 PBLOCK_ASSERT_OP( pb, 0 );
861 rc = pblock_set_dn( value, &pb->pb_op->o_req_dn, &pb->pb_op->o_req_ndn, pb->pb_op->o_tmpmemctx );
864 PBLOCK_ASSERT_CONN( pb );
865 PBLOCK_LOCK_CONN( pb );
866 pb->pb_conn->c_connid = *((long *)value);
867 PBLOCK_UNLOCK_CONN( pb );
870 PBLOCK_ASSERT_CONN( pb );
871 PBLOCK_LOCK_CONN( pb );
872 rc = pblock_set_dn( value, &pb->pb_conn->c_dn, &pb->pb_conn->c_ndn, NULL );
873 PBLOCK_UNLOCK_CONN( pb );
875 case SLAPI_RESULT_CODE:
876 case SLAPI_PLUGIN_INTOP_RESULT:
877 PBLOCK_ASSERT_OP( pb, 0 );
878 pb->pb_rs->sr_err = *((int *)value);
880 case SLAPI_RESULT_TEXT:
881 PBLOCK_ASSERT_OP( pb, 0 );
882 snprintf( pb->pb_textbuf, sizeof( pb->pb_textbuf ), "%s", (char *)value );
883 pb->pb_rs->sr_text = pb->pb_textbuf;
885 case SLAPI_RESULT_MATCHED:
886 PBLOCK_ASSERT_OP( pb, 0 );
887 pb->pb_rs->sr_matched = (char *)value; /* XXX should dup? */
889 case SLAPI_ADD_ENTRY:
890 PBLOCK_ASSERT_OP( pb, 0 );
891 if ( pb->pb_op->o_tag == LDAP_REQ_ADD ) {
892 pb->pb_op->ora_e = (Slapi_Entry *)value;
897 case SLAPI_MODIFY_MODS: {
900 PBLOCK_ASSERT_OP( pb, 0 );
901 rc = pblock_set_default( pb, param, value );
902 if ( rc != PBLOCK_SUCCESS ) {
906 if ( pb->pb_op->o_tag == LDAP_REQ_MODIFY ) {
907 mlp = &pb->pb_op->orm_modlist;
908 } else if ( pb->pb_op->o_tag == LDAP_REQ_ADD ) {
909 mlp = &pb->pb_op->ora_modlist;
914 if ( *mlp != NULL ) {
915 slapi_int_mods_free( *mlp );
918 *mlp = slapi_int_ldapmods2modifications( (LDAPMod **)value, NULL );
921 case SLAPI_MODRDN_NEWRDN:
922 PBLOCK_ASSERT_OP( pb, 0 );
923 PBLOCK_VALIDATE_IS_INTOP( pb );
924 if ( pb->pb_op->o_tag == LDAP_REQ_MODRDN ) {
925 rc = pblock_set_dn( value, &pb->pb_op->orr_newrdn, &pb->pb_op->orr_nnewrdn, pb->pb_op->o_tmpmemctx );
926 if ( rc == LDAP_SUCCESS )
927 rc = rdn_validate( &pb->pb_op->orr_nnewrdn );
932 case SLAPI_MODRDN_NEWSUPERIOR:
933 PBLOCK_ASSERT_OP( pb, 0 );
934 PBLOCK_VALIDATE_IS_INTOP( pb );
935 if ( pb->pb_op->o_tag == LDAP_REQ_MODRDN ) {
936 if ( value == NULL ) {
937 if ( pb->pb_op->orr_newSup != NULL ) {
938 pb->pb_op->o_tmpfree( pb->pb_op->orr_newSup, pb->pb_op->o_tmpmemctx );
939 BER_BVZERO( pb->pb_op->orr_newSup );
940 pb->pb_op->orr_newSup = NULL;
942 if ( pb->pb_op->orr_newSup != NULL ) {
943 pb->pb_op->o_tmpfree( pb->pb_op->orr_nnewSup, pb->pb_op->o_tmpmemctx );
944 BER_BVZERO( pb->pb_op->orr_nnewSup );
945 pb->pb_op->orr_nnewSup = NULL;
948 if ( pb->pb_op->orr_newSup == NULL ) {
949 pb->pb_op->orr_newSup = (struct berval *)pb->pb_op->o_tmpalloc(
950 sizeof(struct berval), pb->pb_op->o_tmpmemctx );
951 BER_BVZERO( pb->pb_op->orr_newSup );
953 if ( pb->pb_op->orr_nnewSup == NULL ) {
954 pb->pb_op->orr_nnewSup = (struct berval *)pb->pb_op->o_tmpalloc(
955 sizeof(struct berval), pb->pb_op->o_tmpmemctx );
956 BER_BVZERO( pb->pb_op->orr_nnewSup );
958 rc = pblock_set_dn( value, pb->pb_op->orr_newSup, pb->pb_op->orr_nnewSup, pb->pb_op->o_tmpmemctx );
964 case SLAPI_MODRDN_DELOLDRDN:
965 PBLOCK_ASSERT_OP( pb, 0 );
966 PBLOCK_VALIDATE_IS_INTOP( pb );
967 if ( pb->pb_op->o_tag == LDAP_REQ_MODRDN )
968 pb->pb_op->orr_deleteoldrdn = *((int *)value);
972 case SLAPI_SEARCH_SCOPE: {
973 int scope = *((int *)value);
975 PBLOCK_ASSERT_OP( pb, 0 );
976 if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH ) {
977 switch ( *((int *)value) ) {
978 case LDAP_SCOPE_BASE:
979 case LDAP_SCOPE_ONELEVEL:
980 case LDAP_SCOPE_SUBTREE:
981 #ifdef LDAP_SCOPE_SUBORDINATE
982 case LDAP_SCOPE_SUBORDINATE:
984 pb->pb_op->ors_scope = scope;
995 case SLAPI_SEARCH_DEREF:
996 PBLOCK_ASSERT_OP( pb, 0 );
997 if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )
998 pb->pb_op->ors_deref = *((int *)value);
1002 case SLAPI_SEARCH_SIZELIMIT:
1003 PBLOCK_ASSERT_OP( pb, 0 );
1004 if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )
1005 pb->pb_op->ors_slimit = *((int *)value);
1009 case SLAPI_SEARCH_TIMELIMIT:
1010 PBLOCK_ASSERT_OP( pb, 0 );
1011 if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )
1012 pb->pb_op->ors_tlimit = *((int *)value);
1016 case SLAPI_SEARCH_FILTER:
1017 PBLOCK_ASSERT_OP( pb, 0 );
1018 if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )
1019 pb->pb_op->ors_filter = (Slapi_Filter *)value;
1023 case SLAPI_SEARCH_STRFILTER:
1024 PBLOCK_ASSERT_OP( pb, 0 );
1025 if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH ) {
1026 pb->pb_op->ors_filterstr.bv_val = (char *)value;
1027 pb->pb_op->ors_filterstr.bv_len = strlen((char *)value);
1032 case SLAPI_SEARCH_ATTRS: {
1033 AttributeName *an = NULL;
1035 char **attrs = (char **)value;
1037 PBLOCK_ASSERT_OP( pb, 0 );
1038 PBLOCK_VALIDATE_IS_INTOP( pb );
1040 if ( pb->pb_op->o_tag != LDAP_REQ_SEARCH ) {
1044 /* also set mapped attrs */
1045 rc = pblock_set_default( pb, param, value );
1046 if ( rc != PBLOCK_SUCCESS ) {
1049 if ( pb->pb_op->ors_attrs != NULL ) {
1050 pb->pb_op->o_tmpfree( pb->pb_op->ors_attrs, pb->pb_op->o_tmpmemctx );
1051 pb->pb_op->ors_attrs = NULL;
1053 if ( attrs != NULL ) {
1054 for ( i = 0; attrs[i] != NULL; i++ )
1058 an = (AttributeName *)pb->pb_op->o_tmpalloc( (i + 1) *
1059 sizeof(AttributeName), pb->pb_op->o_tmpmemctx );
1060 for ( i = 0; attrs[i] != NULL; i++ ) {
1061 an[i].an_desc = NULL;
1063 an[i].an_oc_exclude = 0;
1064 an[i].an_name.bv_val = attrs[i];
1065 an[i].an_name.bv_len = strlen( attrs[i] );
1066 slap_bv2ad( &an[i].an_name, &an[i].an_desc, &pb->pb_rs->sr_text );
1068 an[i].an_name.bv_val = NULL;
1069 an[i].an_name.bv_len = 0;
1071 pb->pb_op->ors_attrs = an;
1074 case SLAPI_SEARCH_ATTRSONLY:
1075 PBLOCK_ASSERT_OP( pb, 0 );
1076 PBLOCK_VALIDATE_IS_INTOP( pb );
1078 if ( pb->pb_op->o_tag == LDAP_REQ_SEARCH )
1079 pb->pb_op->ors_attrsonly = *((int *)value);
1083 case SLAPI_SEARCH_RESULT_ENTRY:
1084 PBLOCK_ASSERT_OP( pb, 0 );
1085 pb->pb_rs->sr_entry = (Slapi_Entry *)value;
1087 case SLAPI_BIND_RET_SASLCREDS:
1088 PBLOCK_ASSERT_OP( pb, 0 );
1089 pb->pb_rs->sr_sasldata = (struct berval *)value;
1091 case SLAPI_EXT_OP_REQ_OID:
1092 PBLOCK_ASSERT_OP( pb, 0 );
1093 PBLOCK_VALIDATE_IS_INTOP( pb );
1095 if ( pb->pb_op->o_tag == LDAP_REQ_EXTENDED ) {
1096 pb->pb_op->ore_reqoid.bv_val = (char *)value;
1097 pb->pb_op->ore_reqoid.bv_len = strlen((char *)value);
1102 case SLAPI_EXT_OP_REQ_VALUE:
1103 PBLOCK_ASSERT_OP( pb, 0 );
1104 PBLOCK_VALIDATE_IS_INTOP( pb );
1106 if ( pb->pb_op->o_tag == LDAP_REQ_EXTENDED )
1107 pb->pb_op->ore_reqdata = (struct berval *)value;
1111 case SLAPI_EXT_OP_RET_OID:
1112 PBLOCK_ASSERT_OP( pb, 0 );
1113 pb->pb_rs->sr_rspoid = (char *)value;
1115 case SLAPI_EXT_OP_RET_VALUE:
1116 PBLOCK_ASSERT_OP( pb, 0 );
1117 pb->pb_rs->sr_rspdata = (struct berval *)value;
1119 case SLAPI_BIND_METHOD:
1120 PBLOCK_ASSERT_OP( pb, 0 );
1121 PBLOCK_VALIDATE_IS_INTOP( pb );
1123 if ( pb->pb_op->o_tag == LDAP_REQ_BIND )
1124 pb->pb_op->orb_method = *((int *)value);
1128 case SLAPI_BIND_CREDENTIALS:
1129 PBLOCK_ASSERT_OP( pb, 0 );
1130 PBLOCK_VALIDATE_IS_INTOP( pb );
1132 if ( pb->pb_op->o_tag == LDAP_REQ_BIND )
1133 pb->pb_op->orb_cred = *((struct berval *)value);
1137 case SLAPI_COMPARE_TYPE:
1138 PBLOCK_ASSERT_OP( pb, 0 );
1139 PBLOCK_VALIDATE_IS_INTOP( pb );
1141 if ( pb->pb_op->o_tag == LDAP_REQ_COMPARE ) {
1144 pb->pb_op->orc_ava->aa_desc = NULL;
1145 rc = slap_str2ad( (char *)value, &pb->pb_op->orc_ava->aa_desc, &text );
1150 case SLAPI_COMPARE_VALUE:
1151 PBLOCK_ASSERT_OP( pb, 0 );
1152 PBLOCK_VALIDATE_IS_INTOP( pb );
1154 if ( pb->pb_op->o_tag == LDAP_REQ_COMPARE )
1155 pb->pb_op->orc_ava->aa_value = *((struct berval *)value);
1159 case SLAPI_ABANDON_MSGID:
1160 PBLOCK_ASSERT_OP( pb, 0 );
1161 PBLOCK_VALIDATE_IS_INTOP( pb );
1163 if ( pb->pb_op->o_tag == LDAP_REQ_ABANDON)
1164 pb->pb_op->orn_msgid = *((int *)value);
1168 case SLAPI_REQUESTOR_ISROOT:
1169 case SLAPI_IS_REPLICATED_OPERATION:
1170 case SLAPI_CONN_AUTHTYPE:
1171 case SLAPI_CONN_AUTHMETHOD:
1172 case SLAPI_X_CONN_IS_UDP:
1173 case SLAPI_CONN_CLIENTIP:
1174 case SLAPI_X_CONN_CLIENTPATH:
1175 case SLAPI_CONN_SERVERIP:
1176 case SLAPI_X_CONN_SERVERPATH:
1177 /* These parameters cannot be set */
1181 rc = pblock_set_default( pb, param, value );
1185 pblock_unlock( pb );
1191 pblock_clear( Slapi_PBlock *pb )
1197 pblock_delete_param( Slapi_PBlock *p, int param )
1203 for ( i = 0; i < p->pb_nParams; i++ ) {
1204 if ( p->pb_params[i] == param ) {
1209 if (i >= p->pb_nParams ) {
1211 return PBLOCK_ERROR;
1214 /* move last parameter to index of deleted parameter */
1215 if ( p->pb_nParams > 1 ) {
1216 p->pb_params[i] = p->pb_params[p->pb_nParams - 1];
1217 p->pb_values[i] = p->pb_values[p->pb_nParams - 1];
1223 return PBLOCK_SUCCESS;
1227 slapi_pblock_new(void)
1231 pb = (Slapi_PBlock *) ch_calloc( 1, sizeof(Slapi_PBlock) );
1233 ldap_pvt_thread_mutex_init( &pb->pb_mutex );
1235 pb->pb_params[0] = SLAPI_IBM_PBLOCK;
1236 pb->pb_values[0].pv_pointer = NULL;
1247 pblock_destroy( Slapi_PBlock *pb )
1249 LDAPControl **controls = NULL;
1250 LDAPMod **mods = NULL;
1251 char **attrs = NULL;
1253 assert( pb != NULL );
1255 pblock_get_default( pb, SLAPI_RESCONTROLS, (void **)&controls );
1256 if ( controls != NULL ) {
1257 ldap_controls_free( controls );
1260 if ( pb->pb_intop ) {
1261 slapi_int_connection_done_pb( pb );
1263 pblock_get_default( pb, SLAPI_MODIFY_MODS, (void **)&mods );
1264 slapi_int_free_ldapmods( mods );
1266 pblock_get_default( pb, SLAPI_SEARCH_ATTRS, (void **)&attrs );
1267 if ( attrs != NULL )
1268 pb->pb_op->o_tmpfree( attrs, pb->pb_op->o_tmpmemctx );
1271 ldap_pvt_thread_mutex_destroy( &pb->pb_mutex );
1272 slapi_ch_free( (void **)&pb );
1276 slapi_pblock_destroy( Slapi_PBlock *pb )
1279 pblock_destroy( pb );
1284 slapi_pblock_get( Slapi_PBlock *pb, int arg, void *value )
1286 return pblock_get( pb, arg, (void **)value );
1290 slapi_pblock_set( Slapi_PBlock *pb, int arg, void *value )
1292 return pblock_set( pb, arg, value );
1296 slapi_pblock_clear( Slapi_PBlock *pb )
1302 slapi_pblock_delete_param( Slapi_PBlock *p, int param )
1304 return pblock_delete_param( p, param );
1308 * OpenLDAP extension
1311 slapi_int_pblock_get_first( Backend *be, Slapi_PBlock **pb )
1313 assert( pb != NULL );
1314 *pb = SLAPI_BACKEND_PBLOCK( be );
1315 return (*pb == NULL ? LDAP_OTHER : LDAP_SUCCESS);
1319 * OpenLDAP extension
1322 slapi_int_pblock_get_next( Slapi_PBlock **pb )
1324 assert( pb != NULL );
1325 return slapi_pblock_get( *pb, SLAPI_IBM_PBLOCK, pb );
1328 #endif /* LDAP_SLAPI */