Diff for /servers/slapd/back-ldap/modrdn.c between versions 1.47 and 1.47.2.6

version 1.47, 2006/03/28 17:20:01 version 1.47.2.6, 2008/02/11 23:26:46
Line 1 Line 1
 /* modrdn.c - ldap backend modrdn function */  /* modrdn.c - ldap backend modrdn function */
 /* $OpenLDAP: pkg/ldap/servers/slapd/back-ldap/modrdn.c,v 1.46 2006/01/03 22:12:19 kurt Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/back-ldap/modrdn.c,v 1.47.2.5 2007/08/31 23:14:02 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.  /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *   *
  * Copyright 1999-2006 The OpenLDAP Foundation.   * Copyright 1999-2008 The OpenLDAP Foundation.
  * Portions Copyright 1999-2003 Howard Chu.   * Portions Copyright 1999-2003 Howard Chu.
  * Portions Copyright 2000-2003 Pierangelo Masarati.   * Portions Copyright 2000-2003 Pierangelo Masarati.
  * All rights reserved.   * All rights reserved.
Line 36  ldap_back_modrdn( Line 36  ldap_back_modrdn(
                 Operation       *op,                  Operation       *op,
                 SlapReply       *rs )                  SlapReply       *rs )
 {  {
         ldapinfo_t      *li = (ldapinfo_t *)op->o_bd->be_private;          ldapinfo_t              *li = (ldapinfo_t *)op->o_bd->be_private;
   
         ldapconn_t      *lc;          ldapconn_t              *lc = NULL;
         ber_int_t       msgid;          ber_int_t               msgid;
         LDAPControl     **ctrls = NULL;          LDAPControl             **ctrls = NULL;
         int             do_retry = 1;          ldap_back_send_t        retrying = LDAP_BACK_RETRYING;
         int             rc = LDAP_SUCCESS;          int                     rc = LDAP_SUCCESS;
         char            *newSup = NULL;          char                    *newSup = NULL;
   
         lc = ldap_back_getconn( op, rs, LDAP_BACK_SENDERR );          if ( !ldap_back_dobind( &lc, op, rs, LDAP_BACK_SENDERR ) ) {
         if ( !lc || !ldap_back_dobind( lc, op, rs, LDAP_BACK_SENDERR ) ) {  
                 return rs->sr_err;                  return rs->sr_err;
         }          }
   
         if ( op->orr_newSup ) {          if ( op->orr_newSup ) {
                 int     version = LDAP_VERSION3;                  /* needs LDAPv3 */
                   switch ( li->li_version ) {
                   case LDAP_VERSION3:
                           break;
   
                   case 0:
                           if ( op->o_protocol == 0 || op->o_protocol == LDAP_VERSION3 ) {
                                   break;
                           }
                           /* fall thru */
   
                   default:
                           /* op->o_protocol cannot be anything but LDAPv3,
                            * otherwise wouldn't be here */
                           rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
                           send_ldap_result( op, rs );
                           goto cleanup;
                   }
                                   
                 ldap_set_option( lc->lc_ld, LDAP_OPT_PROTOCOL_VERSION, &version );  
                 newSup = op->orr_newSup->bv_val;                  newSup = op->orr_newSup->bv_val;
         }          }
   
   retry:
         ctrls = op->o_ctrls;          ctrls = op->o_ctrls;
         rc = ldap_back_proxy_authz_ctrl( lc, op, rs, &ctrls );          rc = ldap_back_controls_add( op, rs, lc, &ctrls );
         if ( rc != LDAP_SUCCESS ) {          if ( rc != LDAP_SUCCESS ) {
                 send_ldap_result( op, rs );                  send_ldap_result( op, rs );
                 rc = -1;                  rc = -1;
                 goto cleanup;                  goto cleanup;
         }          }
   
 retry:  
         rs->sr_err = ldap_rename( lc->lc_ld, op->o_req_dn.bv_val,          rs->sr_err = ldap_rename( lc->lc_ld, op->o_req_dn.bv_val,
                         op->orr_newrdn.bv_val, newSup,                          op->orr_newrdn.bv_val, newSup,
                         op->orr_deleteoldrdn, ctrls, NULL, &msgid );                          op->orr_deleteoldrdn, ctrls, NULL, &msgid );
         rc = ldap_back_op_result( lc, op, rs, msgid,          rc = ldap_back_op_result( lc, op, rs, msgid,
                 li->li_timeout[ LDAP_BACK_OP_MODRDN ], LDAP_BACK_SENDRESULT );                  li->li_timeout[ SLAP_OP_MODRDN ],
         if ( rs->sr_err == LDAP_SERVER_DOWN && do_retry ) {                  ( LDAP_BACK_SENDRESULT | retrying ) );
                 do_retry = 0;          if ( rs->sr_err == LDAP_UNAVAILABLE && retrying ) {
                   retrying &= ~LDAP_BACK_RETRYING;
                 if ( ldap_back_retry( &lc, op, rs, LDAP_BACK_SENDERR ) ) {                  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;                          goto retry;
                 }                  }
         }          }
   
 cleanup:  cleanup:
         (void)ldap_back_proxy_authz_ctrl_free( op, &ctrls );          (void)ldap_back_controls_free( op, rs, &ctrls );
   
         if ( lc != NULL ) {          if ( lc != NULL ) {
                 ldap_back_release_conn( op, rs, lc );                  ldap_back_release_conn( li, lc );
         }          }
   
         return rc;          return rc;

Removed from v.1.47  
changed lines
  Added in v.1.47.2.6


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org