The branch, master has been updated
       via  f97e4f6 ldb-tdb: Introduce a flag on ltdb_add_internal to indicate 
whether unique value test should be performed or not
      from  a1c1f8c s3:libsmb: remove unused cli_smb_inbuf()

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit f97e4f6b8f0693c737bfaf1c4d58ea52d8854306
Author: Matthieu Patou <m...@matws.net>
Date:   Tue Jul 12 19:22:35 2011 +0400

    ldb-tdb: Introduce a flag on ltdb_add_internal to indicate whether unique 
value test should be performed or not
    
    The function ltdb_add_internal is called either from ltdb_add or
    ltdb_rename. In case of add we enforce the unique test (unless it has
    been relaxed by a upper module through the
    LDB_FLAG_INTERNAL_DISABLE_SINGLE_VALUE_CHECK flag), but for rename as it
    is translated by a delete + a add we relax the test as we can have one
    or more attribute which are supposed to be single valued but that are
    not (ie. when we have a couple of deleted value on a single valued
    attribute), we have already done the tests on insert so make the
    assumption that the values are OK.
    
    Without this patch deleting a subnet that has been affected to more than
    one site fails as the delete is in fact a rename to GUID\0DEL ... with
    an attribute siteObject that has 1 active link value and 1 inactive link
    value
    
    Autobuild-User: Matthieu Patou <m...@samba.org>
    Autobuild-Date: Wed Jul 13 02:29:20 CEST 2011 on sn-devel-104

-----------------------------------------------------------------------

Summary of changes:
 lib/ldb/ldb_tdb/ldb_tdb.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/ldb/ldb_tdb/ldb_tdb.c b/lib/ldb/ldb_tdb/ldb_tdb.c
index 0d4be49..d111e01 100644
--- a/lib/ldb/ldb_tdb/ldb_tdb.c
+++ b/lib/ldb/ldb_tdb/ldb_tdb.c
@@ -311,7 +311,8 @@ static bool ldb_tdb_single_valued(const struct 
ldb_schema_attribute *a,
 }
 
 static int ltdb_add_internal(struct ldb_module *module,
-                            const struct ldb_message *msg)
+                            const struct ldb_message *msg,
+                            bool check_single_value)
 {
        struct ldb_context *ldb = ldb_module_get_ctx(module);
        int ret = LDB_SUCCESS;
@@ -326,7 +327,9 @@ static int ltdb_add_internal(struct ldb_module *module,
                                               el->name, 
ldb_dn_get_linearized(msg->dn));
                        return LDB_ERR_CONSTRAINT_VIOLATION;
                }
-               if (el->num_values > 1 && ldb_tdb_single_valued(a, el)) {
+               if (check_single_value &&
+                               el->num_values > 1 &&
+                               ldb_tdb_single_valued(a, el)) {
                        ldb_asprintf_errstring(ldb, "SINGLE-VALUE attribute %s 
on %s specified more than once",
                                               el->name, 
ldb_dn_get_linearized(msg->dn));
                        return LDB_ERR_CONSTRAINT_VIOLATION;
@@ -373,7 +376,7 @@ static int ltdb_add(struct ltdb_context *ctx)
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       ret = ltdb_add_internal(module, req->op.add.message);
+       ret = ltdb_add_internal(module, req->op.add.message, true);
 
        return ret;
 }
@@ -998,7 +1001,11 @@ static int ltdb_rename(struct ltdb_context *ctx)
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       ret = ltdb_add_internal(module, msg);
+       /* We don't check single value as we can have more than 1 with
+        * deleted attributes. We could go through all elements but that's
+        * maybe not the most efficient way
+        */
+       ret = ltdb_add_internal(module, msg, false);
 
        return ret;
 }


-- 
Samba Shared Repository

Reply via email to