Author: idra
Date: 2005-09-18 10:47:03 +0000 (Sun, 18 Sep 2005)
New Revision: 10304

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=10304

Log:

check for basic ldb_message sanity and return appropriate
LDB_ERR_ value


Modified:
   branches/SAMBA_4_0/source/lib/ldb/common/ldb.c
   branches/SAMBA_4_0/source/lib/ldb/common/ldb_msg.c
   branches/SAMBA_4_0/source/lib/ldb/include/ldb.h
   branches/SAMBA_4_0/source/lib/ldb/include/ldb_private.h


Changeset:
Modified: branches/SAMBA_4_0/source/lib/ldb/common/ldb.c
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/common/ldb.c      2005-09-18 10:46:21 UTC 
(rev 10303)
+++ branches/SAMBA_4_0/source/lib/ldb/common/ldb.c      2005-09-18 10:47:03 UTC 
(rev 10304)
@@ -34,6 +34,7 @@
 
 #include "includes.h"
 #include "ldb/include/ldb.h"
+#include "ldb/include/ldb_errors.h"
 #include "ldb/include/ldb_private.h"
 
 /* 
@@ -89,20 +90,20 @@
 #endif
        else {
                ldb_debug(ldb, LDB_DEBUG_FATAL, "Unable to find backend for 
'%s'\n", url);
-               return -1;
+               return LDB_ERR_OTHER;
        }
 
-       if (ret != 0) {
+       if (ret != LDB_ERR_SUCCESS) {
                ldb_debug(ldb, LDB_DEBUG_ERROR, "Failed to connect to '%s'\n", 
url);
                return ret;
        }
 
-       if (ldb_load_modules(ldb, options) != 0) {
+       if (ldb_load_modules(ldb, options) != LDB_ERR_SUCCESS) {
                ldb_debug(ldb, LDB_DEBUG_FATAL, "Unable to load modules for 
'%s'\n", url);
-               return -1;
+               return LDB_ERR_OTHER;
        }
 
-       return 0;
+       return LDB_ERR_SUCCESS;
 }
 
 /*
@@ -162,9 +163,15 @@
 int ldb_add(struct ldb_context *ldb, 
            const struct ldb_message *message)
 {
-       int status = ldb_start_trans(ldb);
-       if (status != 0) return status;
+       int status;
 
+
+       status = ldb_msg_sanity_check(message);
+       if (status != LDB_ERR_SUCCESS) return status;
+
+       status = ldb_start_trans(ldb);
+       if (status != LDB_ERR_SUCCESS) return status;
+
        status = ldb->modules->ops->add_record(ldb->modules, message);
        return ldb_end_trans(ldb, status);
 }
@@ -175,9 +182,14 @@
 int ldb_modify(struct ldb_context *ldb, 
               const struct ldb_message *message)
 {
-       int status = ldb_start_trans(ldb);
-       if (status != 0) return status;
+       int status;
 
+       status = ldb_msg_sanity_check(message);
+       if (status != LDB_ERR_SUCCESS) return status;
+
+       status = ldb_start_trans(ldb);
+       if (status != LDB_ERR_SUCCESS) return status;
+
        status = ldb->modules->ops->modify_record(ldb->modules, message);
        return ldb_end_trans(ldb, status);
 }
@@ -189,7 +201,7 @@
 int ldb_delete(struct ldb_context *ldb, const struct ldb_dn *dn)
 {
        int status = ldb_start_trans(ldb);
-       if (status != 0) return status;
+       if (status != LDB_ERR_SUCCESS) return status;
 
        status = ldb->modules->ops->delete_record(ldb->modules, dn);
        return ldb_end_trans(ldb, status);
@@ -201,7 +213,7 @@
 int ldb_rename(struct ldb_context *ldb, const struct ldb_dn *olddn, const 
struct ldb_dn *newdn)
 {
        int status = ldb_start_trans(ldb);
-       if (status != 0) return status;
+       if (status != LDB_ERR_SUCCESS) return status;
 
        status = ldb->modules->ops->rename_record(ldb->modules, olddn, newdn);
        return ldb_end_trans(ldb, status);
@@ -227,13 +239,13 @@
        struct ldb_opaque *o = talloc(ldb, struct ldb_opaque);
        if (o == NULL) {
                ldb_oom(ldb);
-               return -1;
+               return LDB_ERR_OTHER;
        }
        o->next = ldb->opaque;
        o->name = name;
        o->value = value;
        ldb->opaque = o;
-       return 0;
+       return LDB_ERR_SUCCESS;
 }
 
 /*

Modified: branches/SAMBA_4_0/source/lib/ldb/common/ldb_msg.c
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/common/ldb_msg.c  2005-09-18 10:46:21 UTC 
(rev 10303)
+++ branches/SAMBA_4_0/source/lib/ldb/common/ldb_msg.c  2005-09-18 10:47:03 UTC 
(rev 10304)
@@ -34,6 +34,7 @@
 
 #include "includes.h"
 #include "ldb/include/ldb.h"
+#include "ldb/include/ldb_errors.h"
 #include "ldb/include/ldb_private.h"
 
 /*
@@ -499,3 +500,32 @@
 
        return mod;
 }
+
+int ldb_msg_sanity_check(const struct ldb_message *msg)
+{
+       int i, j;
+
+       /* basic check on DN */
+       if (msg->dn == NULL) {
+               /* TODO: return also an error string */
+               return LDB_ERR_INVALID_DN_SYNTAX;
+       }
+       if (msg->dn->comp_num == 0) {
+               /* root dse has empty dn */
+               /* TODO: return also an error string */
+               return LDB_ERR_ENTRY_ALREADY_EXISTS;
+       }
+
+       /* basic syntax checks */
+       for (i = 0; i < msg->num_elements; i++) {
+               for (j = 0; j < msg->elements[i].num_values; j++) {
+                       if (msg->elements[i].values[j].length == 0) {
+                               /* an attribute cannot be empty */
+                               /* TODO: return also an error string */
+                               return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
+                       }
+               }
+       }
+
+       return LDB_ERR_SUCCESS;
+}

Modified: branches/SAMBA_4_0/source/lib/ldb/include/ldb.h
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/include/ldb.h     2005-09-18 10:46:21 UTC 
(rev 10303)
+++ branches/SAMBA_4_0/source/lib/ldb/include/ldb.h     2005-09-18 10:47:03 UTC 
(rev 10304)
@@ -3,6 +3,7 @@
 
    Copyright (C) Andrew Tridgell  2004
    Copyright (C) Stefan Metzmacher  2004
+   Copyright (C) Simo Sorce  2005
 
      ** NOTE! The following LGPL license applies to the ldb
      ** library. This does NOT imply that all of Samba is released
@@ -451,6 +452,8 @@
                                 struct ldb_message *msg1,
                                 struct ldb_message *msg2);
 
+int ldb_msg_sanity_check(const struct ldb_message *msg);
+
 struct ldb_val ldb_val_dup(void *mem_ctx, const struct ldb_val *v);
 
 /*

Modified: branches/SAMBA_4_0/source/lib/ldb/include/ldb_private.h
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/include/ldb_private.h     2005-09-18 
10:46:21 UTC (rev 10303)
+++ branches/SAMBA_4_0/source/lib/ldb/include/ldb_private.h     2005-09-18 
10:47:03 UTC (rev 10304)
@@ -3,7 +3,7 @@
 
    Copyright (C) Andrew Tridgell    2004
    Copyright (C) Stefan Metzmacher  2004
-   Copyright (C) Simo Sorce         2004
+   Copyright (C) Simo Sorce         2004-2005
 
      ** NOTE! The following LGPL license applies to the ldb
      ** library. This does NOT imply that all of Samba is released

Reply via email to