1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-10 13:57:47 +03:00

r10304: check for basic ldb_message sanity and return appropriate

LDB_ERR_ value
This commit is contained in:
Simo Sorce 2005-09-18 10:47:03 +00:00 committed by Gerald (Jerry) Carter
parent f0ad9495e4
commit 610f5646f0
4 changed files with 59 additions and 14 deletions

View File

@ -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 @@ int ldb_connect(struct ldb_context *ldb, const char *url, unsigned int flags, co
#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,8 +163,14 @@ int ldb_search_bytree(struct ldb_context *ldb,
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,8 +182,13 @@ int ldb_add(struct ldb_context *ldb,
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_modify(struct ldb_context *ldb,
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_delete(struct ldb_context *ldb, const struct ldb_dn *dn)
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 @@ int ldb_set_opaque(struct ldb_context *ldb, const char *name, void *value)
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;
}
/*

View File

@ -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 @@ struct ldb_message *ldb_msg_diff(struct ldb_context *ldb,
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;
}

View File

@ -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 *ldb_msg_diff(struct ldb_context *ldb,
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);
/*

View File

@ -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