svn commit: samba r10304 - in branches/SAMBA_4_0/source/lib/ldb: common include

idra at samba.org idra at samba.org
Sun Sep 18 10:47:05 GMT 2005


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



More information about the samba-cvs mailing list