To avoid confusion, create a struct ldb_dn_extended_component
authorAndrew Bartlett <abartlet@samba.org>
Wed, 19 Nov 2008 21:05:33 +0000 (08:05 +1100)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 19 Nov 2008 21:05:33 +0000 (08:05 +1100)
This is instead of using struct ldb_dn_component and just ignoring the
casefolded elements.

Andrew Bartlett

source4/lib/ldb/common/ldb_dn.c

index 58bd92027bef133b4dc7e03c83cd463d06a11e4c..1bed218d172ddb3c9ce503444b08b88233ebaafd 100644 (file)
@@ -52,6 +52,12 @@ struct ldb_dn_component {
        struct ldb_val cf_value;
 };
 
+struct ldb_dn_extended_component {
+
+       char *name;
+       struct ldb_val value;
+};
+
 struct ldb_dn {
 
        struct ldb_context *ldb;
@@ -70,7 +76,7 @@ struct ldb_dn {
        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 */
@@ -330,7 +336,7 @@ static bool ldb_dn_explode(struct ldb_dn *dn)
 
                                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 ! */
@@ -1059,6 +1065,30 @@ static struct ldb_dn_component ldb_dn_copy_component(void *mem_ctx, struct ldb_d
        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;
@@ -1095,14 +1125,14 @@ struct ldb_dn *ldb_dn_copy(void *mem_ctx, struct ldb_dn *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;
@@ -1663,7 +1693,7 @@ const struct ldb_val *ldb_dn_get_extended_component(struct ldb_dn *dn, const cha
 
 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)) {
@@ -1691,7 +1721,7 @@ int ldb_dn_set_extended_component(struct ldb_dn *dn, const char *name, const str
                                
                                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;
@@ -1705,7 +1735,7 @@ int ldb_dn_set_extended_component(struct ldb_dn *dn, const char *name, const str
        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;