s4:ldb Fix check made conditional by mistake
authorSimo Sorce <idra@samba.org>
Sat, 30 Jan 2010 07:57:33 +0000 (02:57 -0500)
committerSimo Sorce <idra@samba.org>
Sat, 30 Jan 2010 07:57:33 +0000 (02:57 -0500)
source4/lib/ldb/ldb_tdb/ldb_tdb.c

index 568fc2a5a69cf0b2b5c6d0dc9e624f58c16bce26..edc0215fbeef9b538e905e22c8d8eeb3c5d57a7f 100644 (file)
@@ -659,6 +659,13 @@ int ltdb_modify_internal(struct ldb_module *module,
                switch (msg->elements[i].flags & LDB_FLAG_MOD_MASK) {
                case LDB_FLAG_MOD_ADD:
 
+                       if (el->num_values == 0) {
+                               ldb_asprintf_errstring(ldb, "attribute %s on %s specified, but with 0 values (illigal)",
+                                                      el->name, ldb_dn_get_linearized(msg2->dn));
+                               ret = LDB_ERR_CONSTRAINT_VIOLATION;
+                               goto done;
+                       }
+
                        /* make a copy of the array so that a permissive
                         * control can remove duplicates without changing the
                         * original values, but do not copy data as we do not
@@ -673,16 +680,13 @@ int ltdb_modify_internal(struct ldb_module *module,
                                el->name = msg->elements[i].name;
                                el->num_values = msg->elements[i].num_values;
                                el->values = talloc_array(el, struct ldb_val, el->num_values);
+                               if (el->values == NULL) {
+                                       ret = LDB_ERR_OTHER;
+                                       goto done;
+                               }
                                for (j = 0; j < el->num_values; j++) {
                                        el->values[j] = msg->elements[i].values[j];
                                }
-
-                               if (el->num_values == 0) {
-                                       ldb_asprintf_errstring(ldb, "attribute %s on %s specified, but with 0 values (illigal)",
-                                                              el->name, ldb_dn_get_linearized(msg2->dn));
-                                       ret = LDB_ERR_CONSTRAINT_VIOLATION;
-                                       goto done;
-                               }
                        }
 
                        if (a && a->flags & LDB_ATTR_FLAG_SINGLE_VALUE) {