r19905: use ldb_dn_new_fmt() to avoid double strdups
authorSimo Sorce <idra@samba.org>
Sun, 26 Nov 2006 03:59:01 +0000 (03:59 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:28:34 +0000 (14:28 -0500)
source/lib/ldb/ldb_tdb/ldb_index.c

index 872afb78aed17d4d2efdfc8fd2b217786334bd0c..045be985a4cd1c6e314ca25b06c0c768cca09726 100644 (file)
@@ -107,7 +107,6 @@ static struct ldb_dn *ltdb_index_key(struct ldb_context *ldb,
                                     const char *attr, const struct ldb_val *value)
 {
        struct ldb_dn *ret;
-       char *dn;
        struct ldb_val v;
        const struct ldb_attrib_handler *h;
        char *attr_folded;
@@ -128,27 +127,17 @@ static struct ldb_dn *ltdb_index_key(struct ldb_context *ldb,
        if (ldb_should_b64_encode(&v)) {
                char *vstr = ldb_base64_encode(ldb, (char *)v.data, v.length);
                if (!vstr) return NULL;
-               dn = talloc_asprintf(ldb, "%s:%s::%s", LTDB_INDEX, attr_folded, vstr);
+               ret = ldb_dn_new_fmt(ldb, ldb, "%s:%s::%s", LTDB_INDEX, attr_folded, vstr);
                talloc_free(vstr);
-               if (v.data != value->data) {
-                       talloc_free(v.data);
-               }
-               talloc_free(attr_folded);
-               if (dn == NULL) return NULL;
-               goto done;
+       } else {
+               ret = ldb_dn_new_fmt(ldb, ldb, "%s:%s:%.*s", LTDB_INDEX, attr_folded, (int)v.length, (char *)v.data);
        }
 
-       dn = talloc_asprintf(ldb, "%s:%s:%.*s", 
-                             LTDB_INDEX, attr_folded, (int)v.length, (char *)v.data);
-
        if (v.data != value->data) {
                talloc_free(v.data);
        }
        talloc_free(attr_folded);
 
-done:
-       ret = ldb_dn_new(ldb, ldb, dn);
-       talloc_free(dn);
        return ret;
 }