summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2005-08-30 00:43:26 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:34:59 -0500
commitc0293aa7159c8b5c9f1a1b13f64af08e5a55ad6a (patch)
treee0169e5c93e4d7aaca99124b95dfb02ff250b207
parent7be4cf8c1ded42daf7e86ecd2c0dbfeeed312b22 (diff)
downloadsamba-c0293aa7159c8b5c9f1a1b13f64af08e5a55ad6a.tar.gz
samba-c0293aa7159c8b5c9f1a1b13f64af08e5a55ad6a.tar.bz2
samba-c0293aa7159c8b5c9f1a1b13f64af08e5a55ad6a.zip
r9771: - Prevent ldb crash when a invalid DN is added
- Don't silently drop records with empty attributes tridge/simo: Could you please verify this patch is correct? (This used to be commit 505c9b1d3d39475da141d3b3c156a7e5ba06790c)
-rw-r--r--source4/lib/ldb/common/ldb_attributes.c2
-rw-r--r--source4/lib/ldb/common/ldb_ldif.c6
-rw-r--r--source4/lib/ldb/common/ldb_msg.c2
3 files changed, 8 insertions, 2 deletions
diff --git a/source4/lib/ldb/common/ldb_attributes.c b/source4/lib/ldb/common/ldb_attributes.c
index a915666d78..3973fc515c 100644
--- a/source4/lib/ldb/common/ldb_attributes.c
+++ b/source4/lib/ldb/common/ldb_attributes.c
@@ -66,7 +66,7 @@ static int ldb_default_copy(struct ldb_context *ldb,
{
*out = ldb_val_dup(mem_ctx, in);
- if (out->length == 0) {
+ if (out->data == NULL && in->data != NULL) {
return -1;
}
diff --git a/source4/lib/ldb/common/ldb_ldif.c b/source4/lib/ldb/common/ldb_ldif.c
index 38866d7031..a5768b9796 100644
--- a/source4/lib/ldb/common/ldb_ldif.c
+++ b/source4/lib/ldb/common/ldb_ldif.c
@@ -590,6 +590,12 @@ struct ldb_ldif *ldb_ldif_read(struct ldb_context *ldb,
msg->dn = ldb_dn_explode(msg, value.data);
+ if (msg->dn == NULL) {
+ ldb_debug(ldb, LDB_DEBUG_ERROR, "Error: Unable to parse dn '%s'\n",
+ value.data);
+ goto failed;
+ }
+
while (next_attr(ldif, &s, &attr, &value) == 0) {
const struct ldb_attrib_handler *h;
struct ldb_message_element *el;
diff --git a/source4/lib/ldb/common/ldb_msg.c b/source4/lib/ldb/common/ldb_msg.c
index 197c42ddb5..f65c944eab 100644
--- a/source4/lib/ldb/common/ldb_msg.c
+++ b/source4/lib/ldb/common/ldb_msg.c
@@ -99,7 +99,7 @@ struct ldb_val ldb_val_dup(void *mem_ctx, const struct ldb_val *v)
{
struct ldb_val v2;
v2.length = v->length;
- if (v->length == 0) {
+ if (v->data == NULL) {
v2.data = NULL;
return v2;
}