* We also ensure that the links are in the Functional Level 2003
* linked attributes format.
*/
-static int get_parsed_dns_trusted(struct ldb_module *module,
- struct replmd_private *replmd_private,
- TALLOC_CTX *mem_ctx,
- struct ldb_message_element *el,
- struct parsed_dn **pdn,
- const char *ldap_oid,
- struct ldb_request *parent)
+static int get_parsed_dns_trusted_fallback(struct ldb_module *module,
+ struct replmd_private *replmd_private,
+ TALLOC_CTX *mem_ctx,
+ struct ldb_message_element *el,
+ struct parsed_dn **pdn,
+ const char *ldap_oid,
+ struct ldb_request *parent)
{
- unsigned int i;
int ret;
if (el == NULL) {
*pdn = NULL;
return ret;
}
} else {
- /* Here we get a list of 'struct parsed_dns' without the parsing */
- *pdn = talloc_zero_array(mem_ctx, struct parsed_dn,
- el->num_values);
- if (!*pdn) {
+ ret = get_parsed_dns_trusted(mem_ctx, el, pdn);
+ if (ret != LDB_SUCCESS) {
ldb_module_oom(module);
return LDB_ERR_OPERATIONS_ERROR;
}
-
- for (i = 0; i < el->num_values; i++) {
- (*pdn)[i].v = &el->values[i];
- }
}
/*
/*
* This sort() is critical for the operation of
- * get_parsed_dns_trusted() because callers of this function
+ * get_parsed_dns_trusted_fallback() because callers of this function
* expect a sorted list, and FL2000 style links are not
* sorted. In particular, as well as the upgrade case,
- * get_parsed_dns_trusted() is called from
+ * get_parsed_dns_trusted_fallback() is called from
* replmd_delete_remove_link() even in FL2000 mode
*
* We do not normally pay the cost of the qsort() due to the
}
/* get the existing DNs, lazily parsed */
- ret = get_parsed_dns_trusted(module, replmd_private,
- tmp_ctx, old_el, &old_dns,
- schema_attr->syntax->ldap_oid, parent);
+ ret = get_parsed_dns_trusted_fallback(module, replmd_private,
+ tmp_ctx, old_el, &old_dns,
+ schema_attr->syntax->ldap_oid,
+ parent);
if (ret != LDB_SUCCESS) {
talloc_free(tmp_ctx);
return ret;
}
- ret = get_parsed_dns_trusted(module, replmd_private,
- tmp_ctx, old_el, &old_dns,
- schema_attr->syntax->ldap_oid, parent);
+ ret = get_parsed_dns_trusted_fallback(module, replmd_private,
+ tmp_ctx, old_el, &old_dns,
+ schema_attr->syntax->ldap_oid,
+ parent);
if (ret != LDB_SUCCESS) {
talloc_free(tmp_ctx);
* this is safe to call in FL2000 or on databases that
* have been run at that level in the past.
*/
- ret = get_parsed_dns_trusted(module, replmd_private, tmp_ctx,
- link_el, &link_dns,
- target_attr->syntax->ldap_oid, parent);
+ ret = get_parsed_dns_trusted_fallback(module, replmd_private,
+ tmp_ctx,
+ link_el, &link_dns,
+ target_attr->syntax->ldap_oid,
+ parent);
if (ret != LDB_SUCCESS) {
talloc_free(tmp_ctx);
return ret;
* group, so we try to minimize the times we do it)
*/
if (pdn_list == NULL) {
- ret = get_parsed_dns_trusted(module, replmd_private,
- tmp_ctx, old_el,
- &pdn_list,
- attr->syntax->ldap_oid,
- NULL);
+ ret = get_parsed_dns_trusted_fallback(module,
+ replmd_private,
+ tmp_ctx, old_el,
+ &pdn_list,
+ attr->syntax->ldap_oid,
+ NULL);
if (ret != LDB_SUCCESS) {
return ret;
}
}
-/*
- * Similar to function in repl_meta_data without the extra
- * dependencies.
- */
-static WERROR get_parsed_dns_trusted(TALLOC_CTX *mem_ctx, struct ldb_message_element *el,
- struct parsed_dn **pdn)
-{
- /* Here we get a list of 'struct parsed_dns' without the parsing */
- int i;
- *pdn = talloc_zero_array(mem_ctx, struct parsed_dn,
- el->num_values);
- if (!*pdn) {
- return WERR_DS_DRA_INTERNAL_ERROR;
- }
-
- for (i = 0; i < el->num_values; i++) {
- (*pdn)[i].v = &el->values[i];
- }
-
- return WERR_OK;
-}
-
static WERROR getncchanges_update_revealed_list(struct ldb_context *sam_ctx,
TALLOC_CTX *mem_ctx,
struct ldb_message **msg,
/* Replace the old value (if one exists) with the current one */
struct parsed_dn *link_dns;
struct parsed_dn *exact = NULL, *unused = NULL;
- WERROR werr;
uint8_t attid[4];
DATA_BLOB partial_meta;
- werr = get_parsed_dns_trusted(mem_ctx, existing, &link_dns);
- if (!W_ERROR_IS_OK(werr)) {
- return werr;
+ ldb_err = get_parsed_dns_trusted(mem_ctx, existing, &link_dns);
+ if (ldb_err != LDB_SUCCESS) {
+ return WERR_DS_DRA_INTERNAL_ERROR;
}
/* Construct a partial metadata blob to match on in the DB */