⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modrdn.c

📁 OpenLdap是LDAP的开源项目
💻 C
📖 第 1 页 / 共 2 页
字号:
		goto done;	}	Debug( LDAP_DEBUG_TRACE, "   backsql_modrdn(): "		"executing renentry_stmt\n", 0, 0, 0 );	rc = backsql_Prepare( dbh, &sth, bi->sql_renentry_stmt, 0 );	if ( rc != SQL_SUCCESS ) {		Debug( LDAP_DEBUG_TRACE,			"   backsql_modrdn(): "			"error preparing renentry_stmt\n", 0, 0, 0 );		backsql_PrintErrors( bi->sql_db_env, dbh, 				sth, rc );		rs->sr_text = "SQL-backend error";		rs->sr_err = LDAP_OTHER;		e = NULL;		goto done;	}	rc = backsql_BindParamBerVal( sth, 1, SQL_PARAM_INPUT, &realnew_dn );	if ( rc != SQL_SUCCESS ) {		Debug( LDAP_DEBUG_TRACE,			"   backsql_add_attr(): "			"error binding DN parameter for objectClass %s\n",			oc->bom_oc->soc_cname.bv_val, 0, 0 );		backsql_PrintErrors( bi->sql_db_env, dbh, 			sth, rc );		SQLFreeStmt( sth, SQL_DROP );		rs->sr_text = "SQL-backend error";		rs->sr_err = LDAP_OTHER;		e = NULL;		goto done;	}	rc = backsql_BindParamID( sth, 2, SQL_PARAM_INPUT, &n_id.eid_id );	if ( rc != SQL_SUCCESS ) {		Debug( LDAP_DEBUG_TRACE,			"   backsql_add_attr(): "			"error binding parent ID parameter for objectClass %s\n",			oc->bom_oc->soc_cname.bv_val, 0, 0 );		backsql_PrintErrors( bi->sql_db_env, dbh, 			sth, rc );		SQLFreeStmt( sth, SQL_DROP );		rs->sr_text = "SQL-backend error";		rs->sr_err = LDAP_OTHER;		e = NULL;		goto done;	}	rc = backsql_BindParamID( sth, 3, SQL_PARAM_INPUT, &e_id.eid_keyval );	if ( rc != SQL_SUCCESS ) {		Debug( LDAP_DEBUG_TRACE,			"   backsql_add_attr(): "			"error binding entry ID parameter for objectClass %s\n",			oc->bom_oc->soc_cname.bv_val, 0, 0 );		backsql_PrintErrors( bi->sql_db_env, dbh, 			sth, rc );		SQLFreeStmt( sth, SQL_DROP );		rs->sr_text = "SQL-backend error";		rs->sr_err = LDAP_OTHER;		e = NULL;		goto done;	}	rc = backsql_BindParamID( sth, 4, SQL_PARAM_INPUT, &e_id.eid_id );	if ( rc != SQL_SUCCESS ) {		Debug( LDAP_DEBUG_TRACE,			"   backsql_add_attr(): "			"error binding ID parameter for objectClass %s\n",			oc->bom_oc->soc_cname.bv_val, 0, 0 );		backsql_PrintErrors( bi->sql_db_env, dbh, 			sth, rc );		SQLFreeStmt( sth, SQL_DROP );		rs->sr_text = "SQL-backend error";		rs->sr_err = LDAP_OTHER;		e = NULL;		goto done;	}	rc = SQLExecute( sth );	if ( rc != SQL_SUCCESS ) {		Debug( LDAP_DEBUG_TRACE, "   backsql_modrdn(): "			"could not rename ldap_entries record\n", 0, 0, 0 );		backsql_PrintErrors( bi->sql_db_env, dbh, sth, rc );		SQLFreeStmt( sth, SQL_DROP );		rs->sr_err = LDAP_OTHER;		rs->sr_text = "SQL-backend error";		e = NULL;		goto done;	}	SQLFreeStmt( sth, SQL_DROP );	/*	 * Get attribute type and attribute value of our new rdn,	 * we will need to add that to our new entry	 */	if ( ldap_bv2rdn( &op->oq_modrdn.rs_newrdn, &new_rdn, &next, 				LDAP_DN_FORMAT_LDAP ) )	{		Debug( LDAP_DEBUG_TRACE,			"   backsql_modrdn: can't figure out "			"type(s)/values(s) of new_rdn\n", 			0, 0, 0 );		rs->sr_err = LDAP_INVALID_DN_SYNTAX;		e = &r;		goto done;	}	Debug( LDAP_DEBUG_TRACE, "backsql_modrdn: "		"new_rdn_type=\"%s\", new_rdn_val=\"%s\"\n",		new_rdn[ 0 ]->la_attr.bv_val,		new_rdn[ 0 ]->la_value.bv_val, 0 );	if ( op->oq_modrdn.rs_deleteoldrdn ) {		if ( ldap_bv2rdn( &op->o_req_dn, &old_rdn, &next,					LDAP_DN_FORMAT_LDAP ) )		{			Debug( LDAP_DEBUG_TRACE,				"   backsql_modrdn: can't figure out "				"the old_rdn type(s)/value(s)\n", 				0, 0, 0 );			rs->sr_err = LDAP_OTHER;			e = NULL;			goto done;		}	}	rs->sr_err = slap_modrdn2mods( op, rs, &r, old_rdn, new_rdn, &mod );	if ( rs->sr_err != LDAP_SUCCESS ) {		e = &r;		goto done;	}	oc = backsql_id2oc( bi, e_id.eid_oc_id );	rs->sr_err = backsql_modify_internal( op, rs, dbh, oc, &e_id, mod );	slap_graduate_commit_csn( op );	if ( rs->sr_err != LDAP_SUCCESS ) {		e = &r;		goto done;	}	if ( BACKSQL_CHECK_SCHEMA( bi ) ) {		char		textbuf[ SLAP_TEXT_BUFLEN ] = { '\0' };		backsql_entry_clean( op, &r );		(void)backsql_free_entryID( op, &e_id, 0 );		bsi.bsi_e = &r;		rs->sr_err = backsql_init_search( &bsi, &new_ndn,				LDAP_SCOPE_BASE, 				(time_t)(-1), NULL, dbh, op, rs,				slap_anlist_all_attributes,				( BACKSQL_ISF_MATCHED | BACKSQL_ISF_GET_ENTRY ) );		switch ( rs->sr_err ) {		case LDAP_SUCCESS:			break;		case LDAP_REFERRAL:			if ( manageDSAit && !BER_BVISNULL( &bsi.bsi_e->e_nname ) &&					dn_match( &new_ndn, &bsi.bsi_e->e_nname ) )			{				rs->sr_err = LDAP_SUCCESS;				rs->sr_text = NULL;				rs->sr_matched = NULL;				if ( rs->sr_ref ) {					ber_bvarray_free( rs->sr_ref );					rs->sr_ref = NULL;				}				break;			}			e = &r;			/* fallthru */		default:			Debug( LDAP_DEBUG_TRACE, "backsql_modrdn(): "				"could not retrieve modrdnDN ID - no such entry\n", 				0, 0, 0 );			if ( !BER_BVISNULL( &r.e_nname ) ) {				/* FIXME: should always be true! */				e = &r;			} else {				e = NULL;			}			goto done;		}		e_id = bsi.bsi_base_id;		rs->sr_err = entry_schema_check( op, &r, NULL, 0,			&rs->sr_text, textbuf, sizeof( textbuf ) );		if ( rs->sr_err != LDAP_SUCCESS ) {			Debug( LDAP_DEBUG_TRACE, "   backsql_add(\"%s\"): "				"entry failed schema check -- aborting\n",				r.e_name.bv_val, 0, 0 );			e = NULL;			goto done;		}	}done:;#ifdef SLAP_ACL_HONOR_DISCLOSE	if ( e != NULL ) {		if ( !access_allowed( op, e, slap_schema.si_ad_entry, NULL,					ACL_DISCLOSE, NULL ) )		{			rs->sr_err = LDAP_NO_SUCH_OBJECT;			rs->sr_text = NULL;			rs->sr_matched = NULL;			if ( rs->sr_ref ) {				ber_bvarray_free( rs->sr_ref );				rs->sr_ref = NULL;			}		}	}#endif /* SLAP_ACL_HONOR_DISCLOSE */	/*	 * Commit only if all operations succeed	 */	if ( sth != SQL_NULL_HSTMT ) {		SQLUSMALLINT	CompletionType = SQL_ROLLBACK;			if ( rs->sr_err == LDAP_SUCCESS && !op->o_noop ) {			CompletionType = SQL_COMMIT;		}		SQLTransact( SQL_NULL_HENV, dbh, CompletionType );	}	if ( op->o_noop && rs->sr_err == LDAP_SUCCESS ) {		rs->sr_err = LDAP_X_NO_OPERATION;	}	send_ldap_result( op, rs );	slap_graduate_commit_csn( op );	if ( !BER_BVISNULL( &realnew_dn ) && realnew_dn.bv_val != new_dn.bv_val ) {		ch_free( realnew_dn.bv_val );	}	if ( !BER_BVISNULL( &new_dn ) ) {		slap_sl_free( new_dn.bv_val, op->o_tmpmemctx );	}		if ( !BER_BVISNULL( &new_ndn ) ) {		slap_sl_free( new_ndn.bv_val, op->o_tmpmemctx );	}		/* LDAP v2 supporting correct attribute handling. */	if ( new_rdn != NULL ) {		ldap_rdnfree( new_rdn );	}	if ( old_rdn != NULL ) {		ldap_rdnfree( old_rdn );	}	if ( mod != NULL ) {		Modifications *tmp;		for (; mod; mod = tmp ) {			tmp = mod->sml_next;			free( mod );		}	}	if ( !BER_BVISNULL( &e_id.eid_ndn ) ) {		(void)backsql_free_entryID( op, &e_id, 0 );	}	if ( !BER_BVISNULL( &n_id.eid_ndn ) ) {		(void)backsql_free_entryID( op, &n_id, 0 );	}	if ( !BER_BVISNULL( &r.e_nname ) ) {		backsql_entry_clean( op, &r );	}	if ( !BER_BVISNULL( &p.e_nname ) ) {		backsql_entry_clean( op, &p );	}	if ( !BER_BVISNULL( &n.e_nname ) ) {		backsql_entry_clean( op, &n );	}	if ( rs->sr_ref ) {		ber_bvarray_free( rs->sr_ref );		rs->sr_ref = NULL;	}	Debug( LDAP_DEBUG_TRACE, "<==backsql_modrdn()\n", 0, 0, 0 );	return rs->sr_err;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -