X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fmodrdn.c;h=84f08f464af43ff48c55013c42faae311fc0d2af;hb=b94d5e17e22b58b990dac4d4af5319be915366a6;hp=ea8dd0e612ff41e5de32bd1210f4a6c8a1f249bc;hpb=372dcb78eb33e78ef901976203225ef8d274efa1;p=openldap diff --git a/servers/slapd/modrdn.c b/servers/slapd/modrdn.c index ea8dd0e612..84f08f464a 100644 --- a/servers/slapd/modrdn.c +++ b/servers/slapd/modrdn.c @@ -50,24 +50,24 @@ do_modrdn( SlapReply *rs ) { - struct berval dn = { 0, NULL }; - struct berval newrdn = { 0, NULL }; - struct berval newSuperior = { 0, NULL }; + struct berval dn = BER_BVNULL; + struct berval newrdn = BER_BVNULL; + struct berval newSuperior = BER_BVNULL; ber_int_t deloldrdn; - struct berval pnewSuperior = { 0, NULL }; + struct berval pnewSuperior = BER_BVNULL; - struct berval nnewSuperior = { 0, NULL }; + struct berval nnewSuperior = BER_BVNULL; Backend *newSuperior_be = NULL; ber_len_t length; int manageDSAit; - struct berval pdn = { 0, NULL }; - struct berval org_req_dn = { 0, NULL }; - struct berval org_req_ndn = { 0, NULL }; - struct berval org_dn = { 0, NULL }; - struct berval org_ndn = { 0, NULL }; + struct berval pdn = BER_BVNULL; + struct berval org_req_dn = BER_BVNULL; + struct berval org_req_ndn = BER_BVNULL; + struct berval org_dn = BER_BVNULL; + struct berval org_ndn = BER_BVNULL; int org_managedsait; #ifdef NEW_LOGGING @@ -236,7 +236,7 @@ do_modrdn( goto cleanup; } - if( rdnValidate( &op->orr_newrdn ) != LDAP_SUCCESS ) { + if( rdn_validate( &op->orr_newrdn ) != LDAP_SUCCESS ) { #ifdef NEW_LOGGING LDAP_LOG( OPERATION, ERR, "do_modrdn: invalid rdn (%s).\n", op->orr_newrdn.bv_val, 0, 0 ); @@ -277,7 +277,8 @@ do_modrdn( * appropriate one, or send a referral to our "referral server" * if we don't hold it. */ - if ( (op->o_bd = select_backend( &op->o_req_ndn, manageDSAit, 0 )) == NULL ) { + op->o_bd = select_backend( &op->o_req_ndn, manageDSAit, 0 ); + if ( op->o_bd == NULL ) { rs->sr_ref = referral_rewrite( default_referral, NULL, &op->o_req_dn, LDAP_SCOPE_DEFAULT ); if (!rs->sr_ref) rs->sr_ref = default_referral; @@ -289,7 +290,7 @@ do_modrdn( if (rs->sr_ref != default_referral) ber_bvarray_free( rs->sr_ref ); } else { send_ldap_error( op, rs, LDAP_UNWILLING_TO_PERFORM, - "referral missing" ); + "no global superior knowledge" ); } goto cleanup; } @@ -361,12 +362,9 @@ do_modrdn( */ if ( op->o_bd->be_modrdn ) { /* do the update here */ - int repl_user = be_isupdate( op->o_bd, &op->o_ndn ); + int repl_user = be_isupdate( op ); #ifndef SLAPD_MULTIMASTER - if ( LDAP_STAILQ_EMPTY( &op->o_bd->be_syncinfo ) && - ( !op->o_bd->be_update_ndn.bv_len || repl_user )) -#else - if ( LDAP_STAILQ_EMPTY( &op->o_bd->be_syncinfo )) + if ( !SLAP_SHADOW(op->o_bd) || repl_user ) #endif { slap_callback cb = { NULL, slap_replog_cb, NULL, NULL }; @@ -415,18 +413,9 @@ do_modrdn( #ifndef SLAPD_MULTIMASTER } else { - BerVarray defref = NULL; - if ( !LDAP_STAILQ_EMPTY( &op->o_bd->be_syncinfo )) { - syncinfo_t *si; - LDAP_STAILQ_FOREACH( si, &op->o_bd->be_syncinfo, si_next ) { - struct berval tmpbv; - ber_dupbv( &tmpbv, &si->si_provideruri_bv[0] ); - ber_bvarray_add( &defref, &tmpbv ); - } - } else { - defref = op->o_bd->be_update_refs - ? op->o_bd->be_update_refs : default_referral; - } + BerVarray defref = op->o_bd->be_update_refs + ? op->o_bd->be_update_refs : default_referral; + if ( defref != NULL ) { rs->sr_ref = referral_rewrite( defref, NULL, &op->o_req_dn, LDAP_SCOPE_DEFAULT ); @@ -437,9 +426,8 @@ do_modrdn( if (rs->sr_ref != defref) ber_bvarray_free( rs->sr_ref ); } else { - send_ldap_error( op, rs, - LDAP_UNWILLING_TO_PERFORM, - "referral missing" ); + send_ldap_error( op, rs, LDAP_UNWILLING_TO_PERFORM, + "shadow context; no update referral" ); } #endif } @@ -493,7 +481,7 @@ slap_modrdn2mods( assert( new_rdn != NULL ); assert( !op->orr_deleteoldrdn || old_rdn != NULL ); - repl_user = be_isupdate( op->o_bd, &op->o_ndn ); + repl_user = be_isupdate( op ); /* Add new attribute values to the entry */ for ( a_cnt = 0; new_rdn[a_cnt]; a_cnt++ ) {