struct ldb_val cf_value;
};
+struct ldb_dn_extended_component {
+
+ char *name;
+ struct ldb_val value;
+};
+
struct ldb_dn {
struct ldb_context *ldb;
struct ldb_dn_component *components;
unsigned int extended_comp_num;
- struct ldb_dn_component *extended_components;
+ struct ldb_dn_extended_component *extended_components;
};
/* strdn may be NULL */
dn->extended_components = talloc_realloc(dn,
dn->extended_components,
- struct ldb_dn_component,
+ struct ldb_dn_extended_component,
dn->extended_comp_num + 1);
if ( ! dn->extended_components) {
/* ouch ! */
return dst;
}
+static struct ldb_dn_extended_component ldb_dn_extended_copy_component(void *mem_ctx, struct ldb_dn_extended_component *src)
+{
+ struct ldb_dn_extended_component dst;
+
+ memset(&dst, 0, sizeof(dst));
+
+ if (src == NULL) {
+ return dst;
+ }
+
+ dst.value = ldb_val_dup(mem_ctx, &(src->value));
+ if (dst.value.data == NULL) {
+ return dst;
+ }
+
+ dst.name = talloc_strdup(mem_ctx, src->name);
+ if (dst.name == NULL) {
+ LDB_FREE(dst.value.data);
+ return dst;
+ }
+
+ return dst;
+}
+
struct ldb_dn *ldb_dn_copy(void *mem_ctx, struct ldb_dn *dn)
{
struct ldb_dn *new_dn;
if (dn->extended_components) {
int i;
- new_dn->extended_components = talloc_zero_array(new_dn, struct ldb_dn_component, dn->extended_comp_num);
+ new_dn->extended_components = talloc_zero_array(new_dn, struct ldb_dn_extended_component, dn->extended_comp_num);
if ( ! new_dn->extended_components) {
talloc_free(new_dn);
return NULL;
}
for (i = 0; i < dn->extended_comp_num; i++) {
- new_dn->extended_components[i] = ldb_dn_copy_component(new_dn->extended_components, &dn->extended_components[i]);
+ new_dn->extended_components[i] = ldb_dn_extended_copy_component(new_dn->extended_components, &dn->extended_components[i]);
if ( ! new_dn->extended_components[i].value.data) {
talloc_free(new_dn);
return NULL;
int ldb_dn_set_extended_component(struct ldb_dn *dn, const char *name, const struct ldb_val *val)
{
- struct ldb_dn_component *p;
+ struct ldb_dn_extended_component *p;
int i;
if ( ! ldb_dn_validate(dn)) {
dn->extended_components = talloc_realloc(dn,
dn->extended_components,
- struct ldb_dn_component,
+ struct ldb_dn_extended_component,
dn->extended_comp_num);
if (!dn->extended_components) {
dn->invalid = true;
p = dn->extended_components
= talloc_realloc(dn,
dn->extended_components,
- struct ldb_dn_component,
+ struct ldb_dn_extended_component,
dn->extended_comp_num + 1);
if (!dn->extended_components) {
dn->invalid = true;