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

version 1.38, 2004/11/13 13:43:30 version 1.38.2.11, 2007/01/02 21:44:02
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.10 2006/09/26 12:54:26 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-2007 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;
   
           ldapconn_t      *lc;
         ber_int_t       msgid;          ber_int_t       msgid;
         LDAPControl     **ctrls = NULL;          LDAPControl     **ctrls = NULL;
         int             do_retry = 1;          int             do_retry = 1;
         int             rc = LDAP_SUCCESS;          int             rc = LDAP_SUCCESS;
         char            *newSup = NULL;          char            *newSup = NULL;
   
         lc = ldap_back_getconn( op, rs );          lc = ldap_back_getconn( op, rs, LDAP_BACK_SENDERR );
         if ( !lc || !ldap_back_dobind( lc, op, rs ) ) {          if ( !lc || !ldap_back_dobind( lc, op, rs, LDAP_BACK_SENDERR ) ) {
                 return( -1 );                  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, op, rs, &ctrls );          rc = ldap_back_proxy_authz_ctrl( lc, 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,
                   li->li_timeout[ LDAP_BACK_OP_MODRDN ], LDAP_BACK_SENDRESULT );
         if ( rs->sr_err == LDAP_SERVER_DOWN && do_retry ) {          if ( rs->sr_err == LDAP_SERVER_DOWN && do_retry ) {
                 do_retry = 0;                  do_retry = 0;
                 if ( ldap_back_retry( lc, op, rs ) ) {                  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( op, rs, lc );
           }
   
         return rc;          return rc;
 }  }

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


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