]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slapi/slapi_pblock.c
First round of SLAPI cleanups - use slapi_int_XXX for internal functions
[openldap] / servers / slapd / slapi / slapi_pblock.c
index 4e9156ee8c7011d72db2f5251e3005ed14df16e6..f0b5380aa5ad0b3bd3d199de02890b9879b2ba6f 100644 (file)
@@ -278,6 +278,7 @@ set( Slapi_PBlock *pb, int param, void *val )
 {
 #if defined(LDAP_SLAPI)
        int i, freeit;
+       int addcon = 0;
 
        if ( isValidParam( pb, param ) == INVALID_PARAM ) {
                return PBLOCK_ERROR;
@@ -290,6 +291,11 @@ set( Slapi_PBlock *pb, int param, void *val )
                return PBLOCK_ERROR; 
        }
 
+       if ( param == SLAPI_ADD_RESCONTROL ) {
+               addcon = 1;
+               param = SLAPI_RES_CONTROLS;
+       }
+
        switch ( param ) {
         case SLAPI_CONN_DN:
         case SLAPI_CONN_AUTHMETHOD:
@@ -311,8 +317,19 @@ set( Slapi_PBlock *pb, int param, void *val )
                pb->curParams[i] = param;
                pb->numParams++;
        }
-       if ( freeit ) ch_free( pb->curVals[i] );
-       pb->curVals[i] = val;
+       if ( addcon ) {
+               LDAPControl **ctrls = pb->curVals[i];
+               int j;
+
+               for (j=0; ctrls[j]; j++);
+               ctrls = ch_realloc( ctrls, (j+2)*sizeof(LDAPControl *) );
+               ctrls[j] = val;
+               ctrls[j+1] = NULL;
+               pb->curVals[i] = ctrls;
+       } else {
+               if ( freeit ) ch_free( pb->curVals[i] );
+               pb->curVals[i] = val;
+       }
 
        unLock( pb );   
        return LDAP_SUCCESS;
@@ -383,6 +400,7 @@ slapi_pblock_destroy( Slapi_PBlock* pb )
 {
 #if defined(LDAP_SLAPI)
        char *str = NULL;
+       LDAPControl **rescontrols = NULL;
 
        get( pb, SLAPI_CONN_DN,(void **)&str );
        if ( str != NULL ) {
@@ -419,6 +437,12 @@ slapi_pblock_destroy( Slapi_PBlock* pb )
                str = NULL;
        }
 
+       get( pb, SLAPI_RESCONTROLS, (void **)&rescontrols );
+       if ( rescontrols != NULL ) {
+               ldap_controls_free( rescontrols );
+               rescontrols = NULL;
+       }
+
        ldap_pvt_thread_mutex_destroy( &pb->pblockMutex );
 
        ch_free( pb ); 
@@ -492,7 +516,7 @@ slapi_pblock_check_params( Slapi_PBlock *pb, int flag )
  * OpenLDAP extension
  */
 int
-slapi_x_pblock_get_first( Backend *be, Slapi_PBlock **pb )
+slapi_int_pblock_get_first( Backend *be, Slapi_PBlock **pb )
 {
 #if defined(LDAP_SLAPI)
        assert( pb );
@@ -507,7 +531,7 @@ slapi_x_pblock_get_first( Backend *be, Slapi_PBlock **pb )
  * OpenLDAP extension
  */
 int
-slapi_x_pblock_get_next( Slapi_PBlock **pb )
+slapi_int_pblock_get_next( Slapi_PBlock **pb )
 {
 #if defined(LDAP_SLAPI)
        assert( pb );