]> git.sur5r.net Git - openldap/blob - servers/slapd/slapi/slapi_pblock.c
Use accessor macros for SLAPI parameter blocks, should make it
[openldap] / servers / slapd / slapi / slapi_pblock.c
1 /* $OpenLDAP$ */
2 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
3  *
4  * Copyright 2002-2005 The OpenLDAP Foundation.
5  * Portions Copyright 1997,2002-2003 IBM Corporation.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted only as authorized by the OpenLDAP
10  * Public License.
11  *
12  * A copy of this license is available in the file LICENSE in the
13  * top-level directory of the distribution or, alternatively, at
14  * <http://www.OpenLDAP.org/license.html>.
15  */
16 /* ACKNOWLEDGEMENTS:
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:
20  *   Luke Howard
21  */
22
23 #include "portable.h"
24 #include <slap.h>
25 #include <slapi.h>
26
27 static slapi_pblock_class_t 
28 getPBlockClass( int param ) 
29 {
30         switch ( param ) {
31         case SLAPI_PLUGIN_TYPE:
32         case SLAPI_PLUGIN_ARGC:
33         case SLAPI_PLUGIN_VERSION:
34         case SLAPI_PLUGIN_OPRETURN:
35         case SLAPI_PLUGIN_INTOP_RESULT:
36         case SLAPI_CONFIG_LINENO:
37         case SLAPI_CONFIG_ARGC:
38         case SLAPI_BIND_METHOD:
39         case SLAPI_MODRDN_DELOLDRDN:
40         case SLAPI_SEARCH_SCOPE:
41         case SLAPI_SEARCH_DEREF:
42         case SLAPI_SEARCH_SIZELIMIT:
43         case SLAPI_SEARCH_TIMELIMIT:
44         case SLAPI_SEARCH_ATTRSONLY:
45         case SLAPI_NENTRIES:
46         case SLAPI_CHANGENUMBER:
47         case SLAPI_DBSIZE:
48         case SLAPI_REQUESTOR_ISROOT:
49         case SLAPI_BE_READONLY:
50         case SLAPI_BE_LASTMOD:
51         case SLAPI_DB2LDIF_PRINTKEY:
52         case SLAPI_LDIF2DB_REMOVEDUPVALS:
53         case SLAPI_MANAGEDSAIT:
54         case SLAPI_IBM_BROADCAST_BE:
55         case SLAPI_IBM_REPLICATE:
56         case SLAPI_IBM_CL_MAX_ENTRIES:
57         case SLAPI_IBM_CL_FIRST_ENTRY:
58         case SLAPI_IBM_CL_LAST_ENTRY:
59         case SLAPI_IBM_EVENT_ENABLED:
60         case SLAPI_IBM_EVENT_MAXREG:
61         case SLAPI_IBM_EVENT_REGPERCONN:
62         case SLAPI_REQUESTOR_ISUPDATEDN:
63         case SLAPI_X_CONN_IS_UDP:
64         case SLAPI_X_CONN_SSF:
65         case SLAPI_RESULT_CODE:
66                 return PBLOCK_CLASS_INTEGER;
67                 break;
68
69         case SLAPI_CONN_ID:
70         case SLAPI_OPERATION_ID:
71         case SLAPI_OPINITIATED_TIME:
72         case SLAPI_ABANDON_MSGID:
73                 return PBLOCK_CLASS_LONG_INTEGER;
74                 break;
75
76         case SLAPI_PLUGIN_DB_INIT_FN:
77         case SLAPI_PLUGIN_DESTROY_FN:
78         case SLAPI_PLUGIN_DB_BIND_FN:
79         case SLAPI_PLUGIN_DB_UNBIND_FN:
80         case SLAPI_PLUGIN_DB_SEARCH_FN:
81         case SLAPI_PLUGIN_DB_COMPARE_FN:
82         case SLAPI_PLUGIN_DB_MODIFY_FN:
83         case SLAPI_PLUGIN_DB_MODRDN_FN:
84         case SLAPI_PLUGIN_DB_ADD_FN:
85         case SLAPI_PLUGIN_DB_DELETE_FN:
86         case SLAPI_PLUGIN_DB_ABANDON_FN:
87         case SLAPI_PLUGIN_DB_CONFIG_FN:
88         case SLAPI_PLUGIN_CLOSE_FN:
89         case SLAPI_PLUGIN_DB_FLUSH_FN:
90         case SLAPI_PLUGIN_START_FN:
91         case SLAPI_PLUGIN_DB_SEQ_FN:
92         case SLAPI_PLUGIN_DB_ENTRY_FN:
93         case SLAPI_PLUGIN_DB_REFERRAL_FN:
94         case SLAPI_PLUGIN_DB_RESULT_FN:
95         case SLAPI_PLUGIN_DB_LDIF2DB_FN:
96         case SLAPI_PLUGIN_DB_DB2LDIF_FN:
97         case SLAPI_PLUGIN_DB_BEGIN_FN:
98         case SLAPI_PLUGIN_DB_COMMIT_FN:
99         case SLAPI_PLUGIN_DB_ABORT_FN:
100         case SLAPI_PLUGIN_DB_ARCHIVE2DB_FN:
101         case SLAPI_PLUGIN_DB_DB2ARCHIVE_FN:
102         case SLAPI_PLUGIN_DB_NEXT_SEARCH_ENTRY_FN:
103         case SLAPI_PLUGIN_DB_FREE_RESULT_SET_FN:
104         case SLAPI_PLUGIN_DB_SIZE_FN:
105         case SLAPI_PLUGIN_DB_TEST_FN:
106         case SLAPI_PLUGIN_DB_NO_ACL:
107         case SLAPI_PLUGIN_EXT_OP_FN:
108         case SLAPI_PLUGIN_EXT_OP_OIDLIST:
109         case SLAPI_PLUGIN_PRE_BIND_FN:
110         case SLAPI_PLUGIN_PRE_UNBIND_FN:
111         case SLAPI_PLUGIN_PRE_SEARCH_FN:
112         case SLAPI_PLUGIN_PRE_COMPARE_FN:
113         case SLAPI_PLUGIN_PRE_MODIFY_FN:
114         case SLAPI_PLUGIN_PRE_MODRDN_FN:
115         case SLAPI_PLUGIN_PRE_ADD_FN:
116         case SLAPI_PLUGIN_PRE_DELETE_FN:
117         case SLAPI_PLUGIN_PRE_ABANDON_FN:
118         case SLAPI_PLUGIN_PRE_ENTRY_FN:
119         case SLAPI_PLUGIN_PRE_REFERRAL_FN:
120         case SLAPI_PLUGIN_PRE_RESULT_FN:
121         case SLAPI_PLUGIN_POST_BIND_FN:
122         case SLAPI_PLUGIN_POST_UNBIND_FN:
123         case SLAPI_PLUGIN_POST_SEARCH_FN:
124         case SLAPI_PLUGIN_POST_COMPARE_FN:
125         case SLAPI_PLUGIN_POST_MODIFY_FN:
126         case SLAPI_PLUGIN_POST_MODRDN_FN:
127         case SLAPI_PLUGIN_POST_ADD_FN:
128         case SLAPI_PLUGIN_POST_DELETE_FN:
129         case SLAPI_PLUGIN_POST_ABANDON_FN:
130         case SLAPI_PLUGIN_POST_ENTRY_FN:
131         case SLAPI_PLUGIN_POST_REFERRAL_FN:
132         case SLAPI_PLUGIN_POST_RESULT_FN:
133         case SLAPI_PLUGIN_MR_FILTER_CREATE_FN:
134         case SLAPI_PLUGIN_MR_INDEXER_CREATE_FN:
135         case SLAPI_PLUGIN_MR_FILTER_MATCH_FN:
136         case SLAPI_PLUGIN_MR_FILTER_INDEX_FN:
137         case SLAPI_PLUGIN_MR_FILTER_RESET_FN:
138         case SLAPI_PLUGIN_MR_INDEX_FN:
139         case SLAPI_PLUGIN_COMPUTE_EVALUATOR_FN:
140         case SLAPI_PLUGIN_COMPUTE_SEARCH_REWRITER_FN:
141         case SLAPI_PLUGIN_ACL_ALLOW_ACCESS:
142         case SLAPI_X_PLUGIN_PRE_GROUP_FN:
143         case SLAPI_X_PLUGIN_POST_GROUP_FN:
144         case SLAPI_PLUGIN_AUDIT_FN:
145                 return PBLOCK_CLASS_FUNCTION_POINTER;
146                 break;
147
148         case SLAPI_BACKEND:
149         case SLAPI_CONNECTION:
150         case SLAPI_OPERATION:
151         case SLAPI_OPERATION_PARAMETERS:
152         case SLAPI_OPERATION_TYPE:
153         case SLAPI_OPERATION_AUTHTYPE:
154         case SLAPI_BE_MONITORDN:
155         case SLAPI_BE_TYPE:
156         case SLAPI_REQUESTOR_DN:
157         case SLAPI_CONN_DN:
158         case SLAPI_CONN_CLIENTIP:
159         case SLAPI_CONN_SERVERIP:
160         case SLAPI_CONN_AUTHTYPE:
161         case SLAPI_CONN_AUTHMETHOD:
162         case SLAPI_CONN_CERT:
163         case SLAPI_X_CONN_CLIENTPATH:
164         case SLAPI_X_CONN_SERVERPATH:
165         case SLAPI_X_CONN_SASL_CONTEXT:
166         case SLAPI_X_CONFIG_ARGV:
167         case SLAPI_X_INTOP_FLAGS:
168         case SLAPI_X_INTOP_RESULT_CALLBACK:
169         case SLAPI_X_INTOP_SEARCH_ENTRY_CALLBACK:
170         case SLAPI_X_INTOP_REFERRAL_ENTRY_CALLBACK:
171         case SLAPI_X_INTOP_CALLBACK_DATA:
172         case SLAPI_IBM_CONN_DN_ALT:
173         case SLAPI_IBM_CONN_DN_ORIG:
174         case SLAPI_IBM_GSSAPI_CONTEXT:
175         case SLAPI_PLUGIN_MR_OID:
176         case SLAPI_PLUGIN_MR_TYPE:
177         case SLAPI_PLUGIN_MR_VALUE:
178         case SLAPI_PLUGIN_MR_VALUES:
179         case SLAPI_PLUGIN_MR_KEYS:
180         case SLAPI_PLUGIN:
181         case SLAPI_PLUGIN_PRIVATE:
182         case SLAPI_PLUGIN_ARGV:
183         case SLAPI_PLUGIN_OBJECT:
184         case SLAPI_PLUGIN_DESCRIPTION:
185         case SLAPI_PLUGIN_IDENTITY:
186         case SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES:
187         case SLAPI_PLUGIN_INTOP_SEARCH_REFERRALS:
188         case SLAPI_PLUGIN_MR_FILTER_REUSABLE:
189         case SLAPI_PLUGIN_MR_QUERY_OPERATOR:
190         case SLAPI_PLUGIN_MR_USAGE:
191         case SLAPI_OP_LESS:
192         case SLAPI_OP_LESS_OR_EQUAL:
193         case SLAPI_PLUGIN_MR_USAGE_INDEX:
194         case SLAPI_PLUGIN_SYNTAX_FILTER_AVA:
195         case SLAPI_PLUGIN_SYNTAX_FILTER_SUB:
196         case SLAPI_PLUGIN_SYNTAX_VALUES2KEYS:
197         case SLAPI_PLUGIN_SYNTAX_ASSERTION2KEYS_AVA:
198         case SLAPI_PLUGIN_SYNTAX_ASSERTION2KEYS_SUB:
199         case SLAPI_PLUGIN_SYNTAX_NAMES:
200         case SLAPI_PLUGIN_SYNTAX_OID:
201         case SLAPI_PLUGIN_SYNTAX_FLAGS:
202         case SLAPI_PLUGIN_SYNTAX_COMPARE:
203         case SLAPI_CONFIG_FILENAME:
204         case SLAPI_CONFIG_ARGV:
205         case SLAPI_TARGET_ADDRESS:
206         case SLAPI_TARGET_UNIQUEID:
207         case SLAPI_TARGET_DN:
208         case SLAPI_REQCONTROLS:
209         case SLAPI_ENTRY_PRE_OP:
210         case SLAPI_ENTRY_POST_OP:
211         case SLAPI_RESCONTROLS:
212         case SLAPI_ADD_RESCONTROL:
213         case SLAPI_ADD_ENTRY:
214         case SLAPI_ADD_EXISTING_DN_ENTRY:
215         case SLAPI_ADD_PARENT_ENTRY:
216         case SLAPI_ADD_PARENT_UNIQUEID:
217         case SLAPI_ADD_EXISTING_UNIQUEID_ENTRY:
218         case SLAPI_BIND_CREDENTIALS:
219         case SLAPI_BIND_SASLMECHANISM:
220         case SLAPI_BIND_RET_SASLCREDS:
221         case SLAPI_COMPARE_TYPE:
222         case SLAPI_COMPARE_VALUE:
223         case SLAPI_MODIFY_MODS:
224         case SLAPI_MODRDN_NEWRDN:
225         case SLAPI_MODRDN_NEWSUPERIOR:
226         case SLAPI_MODRDN_PARENT_ENTRY:
227         case SLAPI_MODRDN_NEWPARENT_ENTRY:
228         case SLAPI_MODRDN_TARGET_ENTRY:
229         case SLAPI_MODRDN_NEWSUPERIOR_ADDRESS:
230         case SLAPI_SEARCH_FILTER:
231         case SLAPI_SEARCH_STRFILTER:
232         case SLAPI_SEARCH_ATTRS:
233         case SLAPI_SEQ_TYPE:
234         case SLAPI_SEQ_ATTRNAME:
235         case SLAPI_SEQ_VAL:
236         case SLAPI_EXT_OP_REQ_OID:
237         case SLAPI_EXT_OP_REQ_VALUE:
238         case SLAPI_EXT_OP_RET_OID:
239         case SLAPI_EXT_OP_RET_VALUE:
240         case SLAPI_MR_FILTER_ENTRY:
241         case SLAPI_MR_FILTER_TYPE:
242         case SLAPI_MR_FILTER_VALUE:
243         case SLAPI_MR_FILTER_OID:
244         case SLAPI_MR_FILTER_DNATTRS:
245         case SLAPI_LDIF2DB_FILE:
246         case SLAPI_PARENT_TXN:
247         case SLAPI_TXN:
248         case SLAPI_SEARCH_RESULT_SET:
249         case SLAPI_SEARCH_RESULT_ENTRY:
250         case SLAPI_SEARCH_REFERRALS:
251         case SLAPI_LOG_OPERATION:
252         case SLAPI_RESULT_TEXT:
253         case SLAPI_RESULT_MATCHED:
254         case SLAPI_X_GROUP_ENTRY:
255         case SLAPI_X_GROUP_ATTRIBUTE:
256         case SLAPI_X_GROUP_OPERATION_DN:
257         case SLAPI_X_GROUP_TARGET_ENTRY:
258         case SLAPI_PLUGIN_AUDIT_DATA:
259         case SLAPI_IBM_PBLOCK:
260                 return PBLOCK_CLASS_POINTER;
261                 break;
262         default:
263                 break;
264         }
265
266         return PBLOCK_CLASS_INVALID;
267 }
268
269 static void
270 Lock( Slapi_PBlock *pb )
271 {
272         ldap_pvt_thread_mutex_lock(&pb->pblockMutex);
273 }
274
275 static void
276 unLock( Slapi_PBlock *pb )
277 {
278         ldap_pvt_thread_mutex_unlock(&pb->pblockMutex);
279 }
280
281 static int 
282 get( Slapi_PBlock *pb, int param, void **val ) 
283 {       
284         int i;
285         slapi_pblock_class_t pbClass;
286
287         pbClass = getPBlockClass( param );
288         if ( pbClass == PBLOCK_CLASS_INVALID ) {
289                 return PBLOCK_ERROR;
290         }
291         
292         Lock( pb );
293
294         switch ( pbClass ) {
295         case PBLOCK_CLASS_INTEGER:
296                 *((int *)val) = 0;
297                 break;
298         case PBLOCK_CLASS_LONG_INTEGER:
299                 *((long *)val) = 0L;
300                 break;
301         case PBLOCK_CLASS_POINTER:
302         case PBLOCK_CLASS_FUNCTION_POINTER:
303                 *val = NULL;
304                 break;
305         }
306
307         for ( i = 0; i < pb->numParams; i++ ) {
308                 if ( pb->curParams[i] == param ) {
309                         switch ( pbClass ) {
310                         case PBLOCK_CLASS_INTEGER:
311                                 *((int *)val) = (int)pb->curVals[i];
312                                 break;
313                         case PBLOCK_CLASS_LONG_INTEGER:
314                                 *((long *)val) = (long)pb->curVals[i];
315                                 break;
316                         case PBLOCK_CLASS_POINTER:
317                         case PBLOCK_CLASS_FUNCTION_POINTER:
318                                 *val = pb->curVals[i];
319                                 break;
320                         default:
321                                 break;
322                         }
323                         break;
324                 }
325         }
326         unLock( pb );   
327         return PBLOCK_SUCCESS;
328 }
329
330 static int 
331 set( Slapi_PBlock *pb, int param, void *val ) 
332 {
333 #if defined(LDAP_SLAPI)
334         int i, freeit;
335         int addcon = 0;
336         slapi_pblock_class_t pbClass;
337
338         pbClass = getPBlockClass( param );
339         if ( pbClass == PBLOCK_CLASS_INVALID ) {
340                 return PBLOCK_ERROR;
341         }
342
343         Lock( pb );     
344
345         if ( pb->numParams == PBLOCK_MAX_PARAMS ) {
346                 unLock( pb );
347                 return PBLOCK_ERROR; 
348         }
349
350         if ( param == SLAPI_ADD_RESCONTROL ) {
351                 addcon = 1;
352                 param = SLAPI_RES_CONTROLS;
353         }
354
355         switch ( param ) {
356         case SLAPI_CONN_DN:
357         case SLAPI_CONN_AUTHMETHOD:
358         case SLAPI_IBM_CONN_DN_ALT:
359         case SLAPI_IBM_CONN_DN_ORIG:
360         case SLAPI_RESULT_TEXT:
361         case SLAPI_RESULT_MATCHED:
362                 freeit = 1;
363                 break;
364         default:
365                 freeit = 0;
366                 break;
367         }
368         for( i = 0; i < pb->numParams; i++ ) { 
369                 if ( pb->curParams[i] == param ) {
370                         break;
371                 }
372         }
373
374         if ( i >= pb->numParams ) {
375                 pb->curParams[i] = param;
376                 pb->numParams++;
377         }
378         if ( addcon ) {
379                 LDAPControl **ctrls = pb->curVals[i];
380                 int j;
381
382                 if ( ctrls ) {
383                         for (j=0; ctrls[j]; j++);
384                         ctrls = ch_realloc( ctrls, (j+2)*sizeof(LDAPControl *) );
385                 } else {
386                         ctrls = ch_malloc( 2 * sizeof(LDAPControl *) );
387                         j = 0;
388                 }
389                 ctrls[j] = val;
390                 ctrls[j+1] = NULL;
391                 pb->curVals[i] = ctrls;
392         } else {
393                 if ( freeit ) ch_free( pb->curVals[i] );
394                 pb->curVals[i] = val;
395         }
396
397         unLock( pb );   
398         return PBLOCK_SUCCESS;
399 #endif /* LDAP_SLAPI */
400         return PBLOCK_ERROR;
401 }
402
403 static void
404 clearPB( Slapi_PBlock *pb ) 
405 {
406         pb->numParams = 1;
407 }
408
409 static void
410 checkParams( Slapi_PBlock *pb, int flag ) 
411 {
412         pb->ckParams = flag;
413 }
414
415 static int
416 deleteParam( Slapi_PBlock *p, int param ) 
417 {
418         int i;
419
420         Lock(p);
421         for ( i = 0; i < p->numParams; i++ ) { 
422                 if ( p->curParams[i] == param ) {
423                         break;
424                 }
425         }
426     
427         if (i >= p->numParams ) {
428                 unLock( p );
429                 return PBLOCK_ERROR;
430         }
431         if ( p->numParams > 1 ) {
432                 p->curParams[i] = p->curParams[p->numParams];
433                 p->curVals[i] = p->curVals[p->numParams];
434         }
435         p->numParams--;
436         unLock( p );    
437         return PBLOCK_SUCCESS;
438 }
439
440 Slapi_PBlock *
441 slapi_pblock_new() 
442 {
443 #if defined(LDAP_SLAPI)
444         Slapi_PBlock *pb;
445
446         pb = (Slapi_PBlock *) ch_malloc(sizeof(Slapi_PBlock));
447         if ( pb != NULL ) {
448                 pb->ckParams = 1;
449                 ldap_pvt_thread_mutex_init( &pb->pblockMutex );
450                 memset( pb->curParams, 0, sizeof(pb->curParams) );
451                 memset( pb->curVals, 0, sizeof(pb->curVals) );
452                 pb->curParams[0] = SLAPI_IBM_PBLOCK;
453                 pb->curVals[0] = NULL;
454                 pb->numParams = 1;
455         }
456         return pb;
457 #endif /* LDAP_SLAPI */
458         return NULL;
459 }
460
461 void 
462 slapi_pblock_destroy( Slapi_PBlock* pb ) 
463 {
464 #if defined(LDAP_SLAPI)
465         char *str = NULL;
466         LDAPControl **rescontrols = NULL;
467
468         get( pb, SLAPI_CONN_DN,(void **)&str );
469         if ( str != NULL ) {
470                 ch_free( str );
471                 str = NULL;
472         }
473
474         get( pb, SLAPI_CONN_AUTHMETHOD, (void **)&str );
475         if ( str != NULL ) {
476                 ch_free( str );
477                 str = NULL;
478         }
479
480         get( pb, SLAPI_IBM_CONN_DN_ALT, (void **)&str );
481         if ( str != NULL ) {
482                 ch_free( str );
483                 str = NULL;
484         }
485
486         get( pb, SLAPI_IBM_CONN_DN_ORIG, (void **)&str );
487         if ( str != NULL ) {
488                 ch_free( str );
489         }
490
491         get( pb, SLAPI_RESULT_TEXT, (void **)&str );
492         if ( str != NULL ) {
493                 ch_free( str );
494                 str = NULL;
495         }
496
497         get( pb, SLAPI_RESULT_MATCHED, (void **)&str );
498         if ( str != NULL ) {
499                 ch_free( str );
500                 str = NULL;
501         }
502
503         get( pb, SLAPI_RESCONTROLS, (void **)&rescontrols );
504         if ( rescontrols != NULL ) {
505                 ldap_controls_free( rescontrols );
506                 rescontrols = NULL;
507         }
508
509         ldap_pvt_thread_mutex_destroy( &pb->pblockMutex );
510
511         ch_free( pb ); 
512 #endif /* LDAP_SLAPI */
513 }
514
515 int 
516 slapi_pblock_get( Slapi_PBlock *pb, int arg, void *value ) 
517 {
518 #if defined(LDAP_SLAPI)
519         return get( pb, arg, (void **)value );
520 #endif /* LDAP_SLAPI */
521         return PBLOCK_ERROR;
522 }
523
524 int 
525 slapi_pblock_set( Slapi_PBlock *pb, int arg, void *value ) 
526 {
527 #if defined(LDAP_SLAPI)
528         void *pTmp = NULL;
529
530         switch ( arg ) {
531         case SLAPI_CONN_DN:
532         case SLAPI_CONN_AUTHMETHOD:
533         case SLAPI_IBM_CONN_DN_ALT:
534         case SLAPI_IBM_CONN_DN_ORIG:
535         case SLAPI_RESULT_TEXT:
536         case SLAPI_RESULT_MATCHED:
537                 if ( value != NULL ) {
538                         pTmp = (void *)slapi_ch_strdup((char *)value);
539                         if ( pTmp == NULL ) {
540                                 return LDAP_NO_MEMORY;
541                         }
542                 }
543                 break;
544         default:
545                 pTmp = value;
546                 break;
547         }
548         return set( pb, arg, pTmp );
549 #endif /* LDAP_SLAPI */
550         return LDAP_NO_MEMORY;
551 }
552
553 void
554 slapi_pblock_clear( Slapi_PBlock *pb ) 
555 {
556 #if defined(LDAP_SLAPI)
557    clearPB( pb );
558 #endif /* LDAP_SLAPI */
559 }
560
561 int 
562 slapi_pblock_delete_param( Slapi_PBlock *p, int param ) 
563 {
564 #if defined(LDAP_SLAPI)
565         return deleteParam( p, param );
566 #endif /* LDAP_SLAPI */
567         return PBLOCK_ERROR;
568 }
569
570 void
571 slapi_pblock_check_params( Slapi_PBlock *pb, int flag ) 
572 {
573 #if defined(LDAP_SLAPI)
574         checkParams( pb, flag );
575 #endif /* LDAP_SLAPI */
576 }
577
578 /*
579  * OpenLDAP extension
580  */
581 int
582 slapi_int_pblock_get_first( Backend *be, Slapi_PBlock **pb )
583 {
584 #if defined(LDAP_SLAPI)
585         assert( pb != NULL );
586         *pb = SLAPI_BACKEND_PBLOCK( be );
587         return (*pb == NULL ? LDAP_OTHER : LDAP_SUCCESS);
588 #else /* LDAP_SLAPI */
589         return LDAP_OTHER;
590 #endif /* LDAP_SLAPI */
591 }
592
593 /*
594  * OpenLDAP extension
595  */
596 int
597 slapi_int_pblock_get_next( Slapi_PBlock **pb )
598 {
599 #if defined(LDAP_SLAPI)
600         assert( pb != NULL );
601         return slapi_pblock_get( *pb, SLAPI_IBM_PBLOCK, pb );
602 #else /* LDAP_SLAPI */
603         return LDAP_OTHER;
604 #endif /* LDAP_SLAPI */
605 }
606