Diff for /servers/slapd/back-ldap/modrdn.c between versions 1.38 and 1.38.2.15

version 1.38, 2004/11/13 13:43:30 version 1.38.2.15, 2008/02/11 23:24:20
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.37 2004/10/01 09:16:38 hyc Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/back-ldap/modrdn.c,v 1.38.2.14 2007/01/17 20:57:10 ando 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-2004 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 )
 {  {
         struct ldapconn *lc;          ldapinfo_t              *li = (ldapinfo_t *)op->o_bd->be_private;
         ber_int_t       msgid;  
         LDAPControl     **ctrls = NULL;          ldapconn_t              *lc = NULL;
         int             do_retry = 1;          ber_int_t               msgid;
         int             rc = LDAP_SUCCESS;          LDAPControl             **ctrls = NULL;
         char            *newSup = NULL;          ldap_back_send_t        retrying = LDAP_BACK_RETRYING;
           int                     rc = LDAP_SUCCESS;
         lc = ldap_back_getconn( op, rs );          char                    *newSup = NULL;
         if ( !lc || !ldap_back_dobind( lc, op, rs ) ) {  
                 return( -1 );          if ( !ldap_back_dobind( &lc, op, rs, LDAP_BACK_SENDERR ) ) {
                   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;
 #ifdef LDAP_BACK_PROXY_AUTHZ          rc = ldap_back_proxy_authz_ctrl( &lc->lc_bound_ndn,
         rc = ldap_back_proxy_authz_ctrl( lc, op, rs, &ctrls );                  li->li_version, &li->li_idassert, op, rs, &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;
         }          }
 #endif /* LDAP_BACK_PROXY_AUTHZ */  
   
 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_ndn.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, 1 );          rc = ldap_back_op_result( lc, op, rs, msgid,
         if ( rs->sr_err == LDAP_SERVER_DOWN && do_retry ) {                  li->li_timeout[ SLAP_OP_MODRDN ],
                 do_retry = 0;                  ( LDAP_BACK_SENDRESULT | retrying ) );
                 if ( ldap_back_retry( lc, op, rs ) ) {          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_proxy_authz_ctrl_free( op, &ctrls );
                         goto retry;                          goto retry;
                 }                  }
         }          }
   
 cleanup:  cleanup:
 #ifdef LDAP_BACK_PROXY_AUTHZ  
         (void)ldap_back_proxy_authz_ctrl_free( op, &ctrls );          (void)ldap_back_proxy_authz_ctrl_free( op, &ctrls );
 #endif /* LDAP_BACK_PROXY_AUTHZ */  
           if ( lc != NULL ) {
                   ldap_back_release_conn( li, lc );
           }
   
         return rc;          return rc;
 }  }

Removed from v.1.38  
changed lines
  Added in v.1.38.2.15


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