r9392: Fix ldb_dn_compose to make build farm happy
authorSimo Sorce <idra@samba.org>
Thu, 18 Aug 2005 16:18:48 +0000 (16:18 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:33:33 +0000 (13:33 -0500)
Add ldb_dn_string_compose so that you can build a dn starting from a
struct ldb_dn base and a set of parameters to be composed in a format
string with the same syntax of printf

source/kdc/hdb-ldb.c
source/lib/ldb/common/ldb_dn.c
source/lib/ldb/include/ldb.h
source/libnet/libnet_samsync_ldb.c
source/ntptr/simple_ldb/ntptr_simple_ldb.c
source/rpc_server/lsa/dcesrv_lsa.c
source/rpc_server/samr/dcesrv_samr.c

index 78084f2e899e8d83afe265c96ecb29ca02f243db..f138373cc3ff3dc3a6cecf4fd23495bc10e36af7 100644 (file)
@@ -624,10 +624,9 @@ static krb5_error_code LDB_lookup_spn_alias(krb5_context context, struct ldb_con
        int count;
        struct ldb_message **msg;
        struct ldb_message_element *spnmappings;
-       struct ldb_dn *service_dn = ldb_dn_compose_string_dn(mem_ctx,
+       struct ldb_dn *service_dn = ldb_dn_string_compose(mem_ctx, realm_dn,
                                                "CN=Directory Service,CN=Windows NT"
-                                               ",CN=Services,CN=Configuration", 
-                                               realm_dn);
+                                               ",CN=Services,CN=Configuration");
        char *service_dn_str = ldb_dn_linearize(mem_ctx, service_dn);
        const char *directory_attrs[] = {
                "sPNMappings", 
index dae79fd9e13f90038a531255103a131c43ea4b81..df95e37dac472cf75c91739b83c37af855c8edbf 100644 (file)
@@ -771,7 +771,9 @@ struct ldb_dn *ldb_dn_compose(void *mem_ctx, const struct ldb_dn *dn1, const str
                new->comp_num = dn1->comp_num;
                new->components = talloc_array(new, struct ldb_dn_component, new->comp_num);
        } else {
-               new = ldb_dn_copy_partial(mem_ctx, dn2, dn2->comp_num + dn1?dn1->comp_num:0);
+               int comp_num = dn2->comp_num;
+               if (dn1 != NULL) comp_num += dn1->comp_num;
+               new = ldb_dn_copy_partial(mem_ctx, dn2, comp_num);
        }
 
        if (dn1 == NULL) {
@@ -790,11 +792,26 @@ failed:
        return NULL;
 }
 
-struct ldb_dn *ldb_dn_compose_string_dn(void *mem_ctx, const char *dn1, const struct ldb_dn *dn2)
+struct ldb_dn *ldb_dn_string_compose(void *mem_ctx, const struct ldb_dn *base, const char *child_fmt, ...)
 {
-       if (dn1 == NULL) return NULL;
+       struct ldb_dn *dn;
+       char *child_str;
+       va_list ap;
+       int ret;
+       
+       if (child_fmt == NULL) return NULL;
+
+       va_start(ap, child_fmt);
+       ret = vasprintf(&child_str, child_fmt, ap);
+       va_end(ap);
+
+       if (ret <= 0) return NULL;
 
-       return ldb_dn_compose(mem_ctx, ldb_dn_explode(mem_ctx, dn1), dn2);
+       dn = ldb_dn_compose(mem_ctx, ldb_dn_explode(mem_ctx, child_str), base);
+
+       free(child_str);
+
+       return dn;
 }
 
 struct ldb_dn_component *ldb_dn_get_rdn(void *mem_ctx, const struct ldb_dn *dn)
index 13c9b72e6db6f4ab18d588c1320b73a6ddd7be22..e7862522e4fa934ffc854f7a5a3d0308f85541b8 100644 (file)
@@ -371,7 +371,7 @@ struct ldb_dn *ldb_dn_make_child(void *mem_ctx,
                                 const struct ldb_dn_component *component,
                                 const struct ldb_dn *base);
 struct ldb_dn *ldb_dn_compose(void *mem_ctx, const struct ldb_dn *dn1, const struct ldb_dn *dn2);
-struct ldb_dn *ldb_dn_compose_string_dn(void *mem_ctx, const char *dn1, const struct ldb_dn *dn2);
+struct ldb_dn *ldb_dn_string_compose(void *mem_ctx, const struct ldb_dn *base, const char *child_fmt, ...);
 struct ldb_dn_component *ldb_dn_get_rdn(void *mem_ctx, const struct ldb_dn *dn);
 
 /* useful functions for ldb_message structure manipulation */
index 4ec7c60715bf44c1d18ba9e4f1d91a5e99f356e9..8d06ec84b6c78afc93385f3533ec6b50e86680a4 100644 (file)
@@ -337,11 +337,8 @@ static NTSTATUS samsync_ldb_handle_user(TALLOC_CTX *mem_ctx,
        if (add) {
                samdb_msg_add_string(state->sam_ldb, mem_ctx, msg, 
                                     "objectClass", obj_class);
-               msg->dn = ldb_dn_build_child(mem_ctx,
-                                            "CN", cn_name,
-                                            ldb_dn_build_child(mem_ctx,
-                                                               "CN", container,
-                                                               state->base_dn[database]));
+               msg->dn = ldb_dn_string_compose(mem_ctx, state->base_dn[database],
+                                               "CN=%s, CN=%s", cn_name, container);
                if (!msg->dn) {
                        return NT_STATUS_NO_MEMORY;             
                }
@@ -477,11 +474,8 @@ static NTSTATUS samsync_ldb_handle_group(TALLOC_CTX *mem_ctx,
        if (add) {
                samdb_msg_add_string(state->sam_ldb, mem_ctx, msg, 
                                     "objectClass", obj_class);
-               msg->dn = ldb_dn_build_child(mem_ctx,
-                                            "CN", cn_name,
-                                            ldb_dn_build_child(mem_ctx,
-                                                               "CN", container,
-                                                               state->base_dn[database]));
+               msg->dn = ldb_dn_string_compose(mem_ctx, state->base_dn[database],
+                                               "CN=%s, CN=%s", cn_name, container);
                if (!msg->dn) {
                        return NT_STATUS_NO_MEMORY;             
                }
@@ -694,11 +688,8 @@ static NTSTATUS samsync_ldb_handle_alias(TALLOC_CTX *mem_ctx,
        if (add) {
                samdb_msg_add_string(state->sam_ldb, mem_ctx, msg, 
                                     "objectClass", obj_class);
-               msg->dn = ldb_dn_build_child(mem_ctx,
-                                            "CN", cn_name,
-                                            ldb_dn_build_child(mem_ctx,
-                                                               "CN", container,
-                                                               state->base_dn[database]));
+               msg->dn = ldb_dn_string_compose(mem_ctx, state->base_dn[database],
+                                               "CN=%s, CN=%s", cn_name, container);
                if (!msg->dn) {
                        return NT_STATUS_NO_MEMORY;             
                }
index c0ae2e078d00d44992abe1d188c3da78d57370ea..78280e294b982e52fc237d7bb1211f1159d6d033 100644 (file)
@@ -710,11 +710,7 @@ static WERROR sptr_GetPrinterForm(struct ntptr_GenericHandle *printer, TALLOC_CT
         * }
         */
 
-       base_dn = ldb_dn_compose_string_dn(mem_ctx,
-                                          "CN=Forms",
-                                          ldb_dn_build_child(mem_ctx,
-                                                             "CN", printer->object_name,
-                                                             ldb_dn_explode(mem_ctx, "CN=Printers")));
+       base_dn = ldb_dn_string_compose(mem_ctx, NULL, "CN=Forms, CN=%s, CN=Printers", printer->object_name);
        W_ERROR_HAVE_NO_MEMORY(base_dn);
 
        count = sptr_db_search(sptr_db, mem_ctx, base_dn, &msgs, NULL,
index 9ee0d6faec30409c51acb1bee3124729125429fb..bac25fcc241ff20969663f84396ee2da87b42796 100644 (file)
@@ -1774,10 +1774,7 @@ static NTSTATUS lsa_CreateSecret(struct dcesrv_call_state *dce_call, TALLOC_CTX
                        return NT_STATUS_INTERNAL_DB_CORRUPTION;
                }
 
-               msg->dn = ldb_dn_build_child(mem_ctx,
-                                            "cn", name,
-                                            ldb_dn_build_child(mem_ctx,
-                                                               "cn", "LSA Secrets", NULL));
+               msg->dn = ldb_dn_string_compose(mem_ctx, NULL, "cn=%s,cn=LSA Secrets", name);
                samdb_msg_add_string(secret_state->sam_ldb, mem_ctx, msg, "cn", name);
        } 
 
index 81db2b386b0b3a15a592f20bbab4abea3eb21fb7..ff15eb43bb5e803893999fa4b1903f8381140664 100644 (file)
@@ -554,11 +554,8 @@ static NTSTATUS samr_CreateDomainGroup(struct dcesrv_call_state *dce_call, TALLO
        }
 
        /* add core elements to the ldb_message for the user */
-       msg->dn = ldb_dn_build_child(mem_ctx,
-                                    "CN", groupname,
-                                    ldb_dn_build_child(mem_ctx,
-                                                       "CN", "Users",
-                                                       d_state->domain_dn));
+       msg->dn = ldb_dn_string_compose(mem_ctx, d_state->domain_dn,
+                                       "CN=%s, CN=Users", groupname);
        if (!msg->dn) {
                return NT_STATUS_NO_MEMORY;
        }
@@ -991,11 +988,8 @@ static NTSTATUS samr_CreateDomAlias(struct dcesrv_call_state *dce_call, TALLOC_C
        }
 
        /* add core elements to the ldb_message for the alias */
-       msg->dn = ldb_dn_build_child(mem_ctx,
-                                    "CN", alias_name,
-                                    ldb_dn_build_child(mem_ctx,
-                                                       "CN", "Users",
-                                                       d_state->domain_dn));
+       msg->dn = ldb_dn_string_compose(mem_ctx, d_state->domain_dn,
+                                       "CN=%s, CN=Users", alias_name);
        if (!msg->dn) {
                return NT_STATUS_NO_MEMORY;
        }