Back to index

openldap  2.4.31
Functions
delete.c File Reference
#include "portable.h"
#include <stdio.h>
#include <ac/string.h>
#include <ac/socket.h>
#include "slap.h"
#include "back-ldap.h"

Go to the source code of this file.

Functions

int ldap_back_delete (Operation *op, SlapReply *rs)

Function Documentation

int ldap_back_delete ( Operation op,
SlapReply rs 
)

Definition at line 35 of file delete.c.

{
       ldapinfo_t           *li = (ldapinfo_t *)op->o_bd->be_private;

       ldapconn_t           *lc = NULL;
       ber_int_t            msgid;
       LDAPControl          **ctrls = NULL;
       ldap_back_send_t     retrying = LDAP_BACK_RETRYING;
       int                  rc = LDAP_SUCCESS;

       if ( !ldap_back_dobind( &lc, op, rs, LDAP_BACK_SENDERR ) ) {
              return rs->sr_err;
       }

retry:
       ctrls = op->o_ctrls;
       rc = ldap_back_controls_add( op, rs, lc, &ctrls );
       if ( rc != LDAP_SUCCESS ) {
              send_ldap_result( op, rs );
              rc = rs->sr_err;
              goto cleanup;
       }

       rs->sr_err = ldap_delete_ext( lc->lc_ld, op->o_req_dn.bv_val,
                     ctrls, NULL, &msgid );
       rc = ldap_back_op_result( lc, op, rs, msgid,
              li->li_timeout[ SLAP_OP_DELETE ],
              ( LDAP_BACK_SENDRESULT | retrying ) );
       if ( rs->sr_err == LDAP_UNAVAILABLE && retrying ) {
              retrying &= ~LDAP_BACK_RETRYING;
              if ( ldap_back_retry( &lc, op, rs, LDAP_BACK_SENDERR ) ) {
                     /* if the identity changed, there might be need to re-authz */
                     (void)ldap_back_controls_free( op, rs, &ctrls );
                     goto retry;
              }
       }

cleanup:
       (void)ldap_back_controls_free( op, rs, &ctrls );

       if ( lc != NULL ) {
              ldap_back_release_conn( li, lc );
       }

       return rc;
}

Here is the call graph for this function: