[Date Prev][Date Next] [Chronological] [Thread] [Top]

OpenLDAP cache



Hello,

Can someone, please, clarify a few things for me, I just can't figure it out fast enough by myself :(

1. If the (*be->be_add) operation was successful - entry is released using be_entry_release_w( be, e ); otherwise - entry_free(e);

I hope I'm not mistaken here. But what should be done after delete and search?

If I performed an internal search (like SASL code does), stored the entries returned by be->be_search in an array and then deleted them one by one - what has to be done to release them and free the memory (in case of success and failure)?

The callback function for sending the entry looks like this:

int xps_send_search_entry (
   Backend    *be,
   Connection    *conn,
   Operation    *op,
   Entry    *e,
   AttributeName    *attrs,
   int        attrsonly,
   LDAPControl **ctrls
)
{
   int num;

Debug(LDAP_DEBUG_TRACE, "===> xps_send_search_entry: xps_send_search_entry dn = %s\n",e->e_name.bv_val, 0, 0);

   for ( num = 0; xps_e_level1[num] != NULL; num++ );

xps_e_level1 = (Entry **)ch_realloc( xps_e_level1,
sizeof( Entry *) * ( num + 2 ) );
xps_e_level1[num] = e;
xps_e_level1[num+1] = NULL;
Debug(LDAP_DEBUG_TRACE, "<=== xps_send_search_entry\n",0, 0, 0);
return LDAP_SUCCESS;
}


Next, I'm trying to delete them:

   for ( i = 0; xps_e_level1[i]!= 0; i++)
       {
           if ( (*be->be_delete)( be, conn, op, &xps_e_level2[i]->e_name,
                        &xps_e_level2[i]->e_nname ) != 0 )
           {
               return LDAP_UNWILLING_TO_PERFORM;
           }

After that I need to free those entries (do I, or is it done anyway after the operation is finished? This doesn't seem like the right answer)

Any help or info would be really appreciated,
thanks in advance,
Mikhail