summaryrefslogtreecommitdiff
path: root/source4/lib/ldb/ldb_tdb/ldb_tdb.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-05-07 23:54:41 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:51:47 -0500
commit265023fafa463c742f89510879acb2a830de8ab9 (patch)
tree1614be24e20bd5c0bfc9f4a5d657a2b574df2c63 /source4/lib/ldb/ldb_tdb/ldb_tdb.c
parentdee25d910e5ed3d07a240cebe8600f4a95c94159 (diff)
downloadsamba-265023fafa463c742f89510879acb2a830de8ab9.tar.gz
samba-265023fafa463c742f89510879acb2a830de8ab9.tar.bz2
samba-265023fafa463c742f89510879acb2a830de8ab9.zip
r574: - another attempt at const cleanliness in ldb
- fixed a problem with searching for values containing an '=' sign - fixed the semantics of attempting an attribute deletion on an attribute that doesn't exist. - added some more ldb_msg_*() utilities (This used to be commit 62b4ec367d170330d837b0f1fe5cd13205a53b59)
Diffstat (limited to 'source4/lib/ldb/ldb_tdb/ldb_tdb.c')
-rw-r--r--source4/lib/ldb/ldb_tdb/ldb_tdb.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/source4/lib/ldb/ldb_tdb/ldb_tdb.c b/source4/lib/ldb/ldb_tdb/ldb_tdb.c
index eb28bc4938..09d1618ffc 100644
--- a/source4/lib/ldb/ldb_tdb/ldb_tdb.c
+++ b/source4/lib/ldb/ldb_tdb/ldb_tdb.c
@@ -436,10 +436,13 @@ static int msg_delete_element(struct ldb_context *ldb,
sizeof(el->values[i])*(el->num_values-(i+1)));
}
el->num_values--;
+ if (el->num_values == 0) {
+ return msg_delete_attribute(ldb, msg, name);
+ }
return 0;
}
}
-
+
return -1;
}
@@ -488,7 +491,7 @@ int ltdb_modify_internal(struct ldb_context *ldb, const struct ldb_message *msg)
already exists */
ret = find_element(&msg2, msg->elements[i].name);
if (ret != -1) {
- errno = EEXIST;
+ ltdb->last_err_string = "Attribute exists";
goto failed;
}
if (msg_add_element(ldb, &msg2, &msg->elements[i]) != 0) {
@@ -500,6 +503,7 @@ int ltdb_modify_internal(struct ldb_context *ldb, const struct ldb_message *msg)
/* replace all elements of this attribute name with the elements
listed */
if (msg_delete_attribute(ldb, &msg2, msg->elements[i].name) != 0) {
+ ltdb->last_err_string = "No such attribute";
goto failed;
}
/* add the replacement element */
@@ -514,6 +518,7 @@ int ltdb_modify_internal(struct ldb_context *ldb, const struct ldb_message *msg)
if (msg->elements[i].num_values == 0) {
if (msg_delete_attribute(ldb, &msg2,
msg->elements[i].name) != 0) {
+ ltdb->last_err_string = "No such attribute";
goto failed;
}
break;
@@ -523,6 +528,7 @@ int ltdb_modify_internal(struct ldb_context *ldb, const struct ldb_message *msg)
&msg2,
msg->elements[i].name,
&msg->elements[i].values[j]) != 0) {
+ ltdb->last_err_string = "No such attribute";
goto failed;
}
}