[SCM] Samba Shared Repository - branch master updated
Matthias Dieter Wallnöfer
mdw at samba.org
Sun Jun 6 13:24:02 MDT 2010
The branch, master has been updated
via 93db960... s4:samldb LDB module - this codepart isn't needed due to the objectclass LDB module
via df63b2c... s4:get_last_structural_class - only real structural classes can be candidates for fetching the last one
via ae9faaa... s4:ldap.py - enhance the RDN name test to show that invalid "name" attributes are allowed on add operations
via dd64b25... s4:rdn_name LDB module - use "ldb_msg_remove_attr" for deleting attributes
via 430491b... s4:rdn_name LDB module - remove "rdn_name_find_attribute"
via cadf774... s4:dsdb/common/util.c - provide a better implementation of the "samdb_msg_add_(add/del)val" calls
via fa2a86e... ldb:ltdb_filter_attrs - fix a counter variable type
via f3f9106... s4:ldap_server/ldap_backend.c - send back also the extended error message if it exists
via 45171d6... s4:ridalloc LDB module - add more "talloc_free"s where useful
via 787a42e... s4:acl LDB module - fix counter types where appropriate
via fc037e0... s4:descriptor LDB module - cosmetic fixup
via 2fbb8c0... s4:urgent_replication.py - specify the "dnsRoot" attribute which is requested on "crossRef" entries
via 7896a35... s4:ldap.py - make sure that also the "posixuser" will be deleted on test breakages
via b8ea2e0... s4:provision - fix typo in substitution variable
from 62e0a74... Fix a long-standing bug with async io that would only be triggered by SMB2.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 93db960fae43913a423fe1e35a60acf5ed0cc437
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Sun Jun 6 19:12:48 2010 +0200
s4:samldb LDB module - this codepart isn't needed due to the objectclass LDB module
When a "computer" entry will be added, also the inherited "user" objectclass is
going to be specified.
commit df63b2ca0e64897b18f8b6be8c31e16d62a96a30
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Fri Jun 4 21:10:41 2010 +0200
s4:get_last_structural_class - only real structural classes can be candidates for fetching the last one
Classes with objectCategory = 1 are always structural, these with
objectCategory = 0 also (as we can see in our Windows 2008 R2 schema file where
class "Person" has 0 but is structural).
Abstract classes and auxiliary ones cannot be considered (objectCategory = 2, 3)
http://msdn.microsoft.com/en-us/library/ms677964(VS.85).aspx
commit ae9faaa89449cf25c2e5e8b51e64ceaacba01832
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Thu Jun 3 18:05:52 2010 +0200
s4:ldap.py - enhance the RDN name test to show that invalid "name" attributes are allowed on add operations
commit dd64b253fcd9013788093f6b98ebd14ef2308619
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Thu Jun 3 18:25:43 2010 +0200
s4:rdn_name LDB module - use "ldb_msg_remove_attr" for deleting attributes
commit 430491b2df9e3512a98a88aa279f04a91c12be92
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Thu Jun 3 17:56:09 2010 +0200
s4:rdn_name LDB module - remove "rdn_name_find_attribute"
It does exactly the same as "ldb_msg_find_element".
commit cadf774f8b8af2aedcdd359acf51695e9f4b04db
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Mon May 31 14:52:46 2010 +0200
s4:dsdb/common/util.c - provide a better implementation of the "samdb_msg_add_(add/del)val" calls
This supports now also coexisting add and delete message elements with the
same attribute name.
commit fa2a86ec61a80f7fe85a2bb9668885a0b287afd6
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Thu Jun 3 18:37:15 2010 +0200
ldb:ltdb_filter_attrs - fix a counter variable type
commit f3f91063bd1f79c8734fa55e92392a8f30ec4144
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Sat Jun 5 14:33:52 2010 +0200
s4:ldap_server/ldap_backend.c - send back also the extended error message if it exists
This message often contains suggestions how to fix issues.
commit 45171d61083339a624a83a1412602475ce7978a6
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Sat Jun 5 17:45:51 2010 +0200
s4:ridalloc LDB module - add more "talloc_free"s where useful
Some were missing on failure return branches.
commit 787a42ef9972eca3f3889e2ad8b5e890b7c551fd
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Sat Jun 5 20:08:45 2010 +0200
s4:acl LDB module - fix counter types where appropriate
commit fc037e029e23aeaa8debe1c17cf81bd3a859ae4a
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Sat Jun 5 19:58:28 2010 +0200
s4:descriptor LDB module - cosmetic fixup
commit 2fbb8c08ef6042a7f479e3d9ef36ba7cc730de79
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Sun Jun 6 20:23:42 2010 +0200
s4:urgent_replication.py - specify the "dnsRoot" attribute which is requested on "crossRef" entries
commit 7896a35da37c5d1cae44d864a5069df08d21013e
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Sat Jun 5 22:19:58 2010 +0200
s4:ldap.py - make sure that also the "posixuser" will be deleted on test breakages
commit b8ea2e07575a6f152019a8fbe17bf65552fbd324
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Sun Jun 6 00:11:16 2010 +0200
s4:provision - fix typo in substitution variable
-----------------------------------------------------------------------
Summary of changes:
source4/dsdb/common/util.c | 118 +++++++++++++++-----
source4/dsdb/samdb/ldb_modules/acl.c | 6 +-
source4/dsdb/samdb/ldb_modules/descriptor.c | 8 +-
source4/dsdb/samdb/ldb_modules/ridalloc.c | 3 +
source4/dsdb/samdb/ldb_modules/samldb.c | 13 --
source4/dsdb/samdb/ldb_modules/util.c | 2 +-
source4/ldap_server/ldap_backend.c | 57 +++++++---
source4/lib/ldb/ldb_tdb/ldb_search.c | 5 +-
source4/lib/ldb/modules/rdn_name.c | 21 +---
source4/lib/ldb/tests/python/ldap.py | 5 +-
source4/lib/ldb/tests/python/urgent_replication.py | 1 +
source4/scripting/python/samba/provision.py | 2 +-
source4/setup/provision_configuration.ldif | 2 +-
13 files changed, 154 insertions(+), 89 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source4/dsdb/common/util.c b/source4/dsdb/common/util.c
index 408a959..811d474 100644
--- a/source4/dsdb/common/util.c
+++ b/source4/dsdb/common/util.c
@@ -837,52 +837,114 @@ int samdb_msg_add_delete(struct ldb_context *sam_ldb, TALLOC_CTX *mem_ctx, struc
}
/*
- add a add attribute value to a message
+ add an add attribute value to a message or enhance an existing attribute
+ which has the same name and the add flag set.
*/
-int samdb_msg_add_addval(struct ldb_context *sam_ldb, TALLOC_CTX *mem_ctx, struct ldb_message *msg,
- const char *attr_name, const char *value)
+int samdb_msg_add_addval(struct ldb_context *sam_ldb, TALLOC_CTX *mem_ctx,
+ struct ldb_message *msg, const char *attr_name,
+ const char *value)
{
struct ldb_message_element *el;
- char *a, *v;
+ struct ldb_val val, *vals;
+ char *v;
+ unsigned int i;
+ bool found = false;
int ret;
- a = talloc_strdup(mem_ctx, attr_name);
- if (a == NULL)
- return LDB_ERR_OPERATIONS_ERROR;
+
v = talloc_strdup(mem_ctx, value);
- if (v == NULL)
+ if (v == NULL) {
return LDB_ERR_OPERATIONS_ERROR;
- ret = ldb_msg_add_string(msg, a, v);
- if (ret != 0)
- return ret;
- el = ldb_msg_find_element(msg, a);
- if (el == NULL)
+ }
+
+ val.data = (uint8_t *) v;
+ val.length = strlen(v);
+
+ if (val.length == 0) {
+ /* allow empty strings as non-existent attributes */
+ return LDB_SUCCESS;
+ }
+
+ for (i = 0; i < msg->num_elements; i++) {
+ el = &msg->elements[i];
+ if ((ldb_attr_cmp(el->name, attr_name) == 0) &&
+ (el->flags == LDB_FLAG_MOD_ADD)) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ ret = ldb_msg_add_empty(msg, attr_name, LDB_FLAG_MOD_ADD,
+ &el);
+ if (ret != LDB_SUCCESS) {
+ return ret;
+ }
+ }
+
+ vals = talloc_realloc(msg, el->values, struct ldb_val,
+ el->num_values + 1);
+ if (vals == NULL) {
return LDB_ERR_OPERATIONS_ERROR;
- el->flags = LDB_FLAG_MOD_ADD;
+ }
+ el->values = vals;
+ el->values[el->num_values] = val;
+ ++(el->num_values);
+
return LDB_SUCCESS;
}
/*
- add a delete attribute value to a message
+ add a delete attribute value to a message or enhance an existing attribute
+ which has the same name and the delete flag set.
*/
-int samdb_msg_add_delval(struct ldb_context *sam_ldb, TALLOC_CTX *mem_ctx, struct ldb_message *msg,
- const char *attr_name, const char *value)
+int samdb_msg_add_delval(struct ldb_context *sam_ldb, TALLOC_CTX *mem_ctx,
+ struct ldb_message *msg, const char *attr_name,
+ const char *value)
{
struct ldb_message_element *el;
- char *a, *v;
+ struct ldb_val val, *vals;
+ char *v;
+ unsigned int i;
+ bool found = false;
int ret;
- a = talloc_strdup(mem_ctx, attr_name);
- if (a == NULL)
- return LDB_ERR_OPERATIONS_ERROR;
+
v = talloc_strdup(mem_ctx, value);
- if (v == NULL)
+ if (v == NULL) {
return LDB_ERR_OPERATIONS_ERROR;
- ret = ldb_msg_add_string(msg, a, v);
- if (ret != 0)
- return ret;
- el = ldb_msg_find_element(msg, a);
- if (el == NULL)
+ }
+
+ val.data = (uint8_t *) v;
+ val.length = strlen(v);
+
+ if (val.length == 0) {
+ /* allow empty strings as non-existent attributes */
+ return LDB_SUCCESS;
+ }
+
+ for (i = 0; i < msg->num_elements; i++) {
+ el = &msg->elements[i];
+ if ((ldb_attr_cmp(el->name, attr_name) == 0) &&
+ (el->flags == LDB_FLAG_MOD_DELETE)) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ ret = ldb_msg_add_empty(msg, attr_name, LDB_FLAG_MOD_DELETE,
+ &el);
+ if (ret != LDB_SUCCESS) {
+ return ret;
+ }
+ }
+
+ vals = talloc_realloc(msg, el->values, struct ldb_val,
+ el->num_values + 1);
+ if (vals == NULL) {
return LDB_ERR_OPERATIONS_ERROR;
- el->flags = LDB_FLAG_MOD_DELETE;
+ }
+ el->values = vals;
+ el->values[el->num_values] = val;
+ ++(el->num_values);
+
return LDB_SUCCESS;
}
diff --git a/source4/dsdb/samdb/ldb_modules/acl.c b/source4/dsdb/samdb/ldb_modules/acl.c
index d2b6a2b..1b84e8a 100644
--- a/source4/dsdb/samdb/ldb_modules/acl.c
+++ b/source4/dsdb/samdb/ldb_modules/acl.c
@@ -411,7 +411,8 @@ static int acl_childClasses(struct ldb_module *module,
struct ldb_message_element *oc_el;
struct ldb_message_element *allowedClasses;
const struct dsdb_class *sclass;
- int i, j, ret;
+ unsigned int i, j;
+ int ret;
/* If we don't have a schema yet, we can't do anything... */
if (schema == NULL) {
@@ -468,7 +469,8 @@ static int acl_childClassesEffective(struct ldb_module *module,
struct ldb_control *as_system = ldb_request_get_control(ac->req,
LDB_CONTROL_AS_SYSTEM_OID);
struct dom_sid *sid = NULL;
- int i, j, ret;
+ unsigned int i, j;
+ int ret;
if (as_system != NULL) {
as_system->critical = 0;
diff --git a/source4/dsdb/samdb/ldb_modules/descriptor.c b/source4/dsdb/samdb/ldb_modules/descriptor.c
index cfab5a0..08754ed 100644
--- a/source4/dsdb/samdb/ldb_modules/descriptor.c
+++ b/source4/dsdb/samdb/ldb_modules/descriptor.c
@@ -399,12 +399,12 @@ static int get_search_callback(struct ldb_request *req, struct ldb_reply *ares)
switch (ares->type) {
case LDB_REPLY_ENTRY:
- if (ac->search_res != NULL) {
+ if (ac->search_res != NULL) {
ldb_set_errstring(ldb, "Too many results");
talloc_free(ares);
return ldb_module_done(ac->req, NULL, NULL,
LDB_ERR_OPERATIONS_ERROR);
- }
+ }
ac->search_res = talloc_steal(ac, ares);
break;
@@ -449,12 +449,12 @@ static int get_search_oc_callback(struct ldb_request *req, struct ldb_reply *are
switch (ares->type) {
case LDB_REPLY_ENTRY:
- if (ac->search_oc_res != NULL) {
+ if (ac->search_oc_res != NULL) {
ldb_set_errstring(ldb, "Too many results");
talloc_free(ares);
return ldb_module_done(ac->req, NULL, NULL,
LDB_ERR_OPERATIONS_ERROR);
- }
+ }
ac->search_oc_res = talloc_steal(ac, ares);
break;
diff --git a/source4/dsdb/samdb/ldb_modules/ridalloc.c b/source4/dsdb/samdb/ldb_modules/ridalloc.c
index 05aee77..e54d6b4 100644
--- a/source4/dsdb/samdb/ldb_modules/ridalloc.c
+++ b/source4/dsdb/samdb/ldb_modules/ridalloc.c
@@ -194,11 +194,13 @@ static int ridalloc_create_rid_set_ntds(struct ldb_module *module, TALLOC_CTX *m
rid_set_dn = ldb_dn_copy(tmp_ctx, machine_dn);
if (rid_set_dn == NULL) {
ldb_module_oom(module);
+ talloc_free(tmp_ctx);
return LDB_ERR_OPERATIONS_ERROR;
}
if (! ldb_dn_add_child_fmt(rid_set_dn, "CN=RID Set")) {
ldb_module_oom(module);
+ talloc_free(tmp_ctx);
return LDB_ERR_OPERATIONS_ERROR;
}
@@ -507,6 +509,7 @@ int ridalloc_allocate_rid(struct ldb_module *module, uint32_t *rid)
uint64_t new_pool;
ret = ridalloc_refresh_own_pool(module, &new_pool);
if (ret != LDB_SUCCESS) {
+ talloc_free(tmp_ctx);
return ret;
}
ret = dsdb_module_constrainted_update_integer(module, rid_set_dn, "rIDPreviousAllocationPool",
diff --git a/source4/dsdb/samdb/ldb_modules/samldb.c b/source4/dsdb/samdb/ldb_modules/samldb.c
index a068a29..8e5e0b4 100644
--- a/source4/dsdb/samdb/ldb_modules/samldb.c
+++ b/source4/dsdb/samdb/ldb_modules/samldb.c
@@ -1355,19 +1355,6 @@ static int samldb_add(struct ldb_module *module, struct ldb_request *req)
}
if (samdb_find_attribute(ldb, ac->msg,
- "objectclass", "computer") != NULL) {
-
- /* make sure the computer object also has the 'user'
- * objectclass so it will be handled by the next call */
- ret = samdb_find_or_add_value(ldb, ac->msg,
- "objectclass", "user");
- if (ret != LDB_SUCCESS) {
- talloc_free(ac);
- return ret;
- }
- }
-
- if (samdb_find_attribute(ldb, ac->msg,
"objectclass", "user") != NULL) {
ret = samldb_check_rdn(module, ac->req->op.add.message->dn);
diff --git a/source4/dsdb/samdb/ldb_modules/util.c b/source4/dsdb/samdb/ldb_modules/util.c
index 6512b26..bf92774 100644
--- a/source4/dsdb/samdb/ldb_modules/util.c
+++ b/source4/dsdb/samdb/ldb_modules/util.c
@@ -420,7 +420,7 @@ const struct dsdb_class * get_last_structural_class(const struct dsdb_schema *sc
continue;
}
- if(tmp_class->objectClassCategory == 3) {
+ if(tmp_class->objectClassCategory > 1) {
continue;
}
diff --git a/source4/ldap_server/ldap_backend.c b/source4/ldap_server/ldap_backend.c
index d9f15b8..7767d05 100644
--- a/source4/ldap_server/ldap_backend.c
+++ b/source4/ldap_server/ldap_backend.c
@@ -34,13 +34,14 @@
return NT_STATUS_NO_MEMORY;\
} else if ( ! ldb_dn_validate(dn)) {\
result = LDAP_INVALID_DN_SYNTAX;\
- map_ldb_error(local_ctx, LDB_ERR_INVALID_DN_SYNTAX, &errstr);\
+ map_ldb_error(local_ctx, LDB_ERR_INVALID_DN_SYNTAX, NULL,\
+ &errstr);\
goto reply;\
}\
} while(0)
static int map_ldb_error(TALLOC_CTX *mem_ctx, int ldb_err,
- const char **errstring)
+ const char *add_err_string, const char **errstring)
{
WERROR err;
@@ -166,6 +167,10 @@ static int map_ldb_error(TALLOC_CTX *mem_ctx, int ldb_err,
*errstring = talloc_asprintf(mem_ctx, "%08x: %s", W_ERROR_V(err),
ldb_strerror(ldb_err));
+ if (add_err_string != NULL) {
+ *errstring = talloc_asprintf(mem_ctx, "%s - %s", *errstring,
+ add_err_string);
+ }
/* result is 1:1 for now */
return ldb_err;
@@ -488,7 +493,7 @@ static NTSTATUS ldapsrv_SearchRequest(struct ldapsrv_call *call)
break;
default:
result = LDAP_PROTOCOL_ERROR;
- map_ldb_error(local_ctx, LDB_ERR_PROTOCOL_ERROR,
+ map_ldb_error(local_ctx, LDB_ERR_PROTOCOL_ERROR, NULL,
&errstr);
errstr = talloc_asprintf(local_ctx,
"%s. Invalid scope", errstr);
@@ -638,7 +643,8 @@ reply:
}
} else {
DEBUG(10,("SearchRequest: error\n"));
- result = map_ldb_error(local_ctx, ldb_ret, &errstr);
+ result = map_ldb_error(local_ctx, ldb_ret, ldb_errstring(samdb),
+ &errstr);
}
done->resultcode = result;
@@ -697,7 +703,7 @@ static NTSTATUS ldapsrv_ModifyRequest(struct ldapsrv_call *call)
default:
result = LDAP_PROTOCOL_ERROR;
map_ldb_error(local_ctx,
- LDB_ERR_PROTOCOL_ERROR, &errstr);
+ LDB_ERR_PROTOCOL_ERROR, NULL, &errstr);
errstr = talloc_asprintf(local_ctx,
"%s. Invalid LDAP_MODIFY_* type", errstr);
goto reply;
@@ -734,14 +740,17 @@ reply:
res = talloc_zero(local_ctx, struct ldb_result);
NT_STATUS_HAVE_NO_MEMORY(res);
ldb_ret = ldb_mod_req_with_controls(samdb, msg, call->request->controls, res);
- result = map_ldb_error(local_ctx, ldb_ret, &errstr);
+ result = map_ldb_error(local_ctx, ldb_ret, ldb_errstring(samdb),
+ &errstr);
}
modify_result = &modify_reply->msg->r.AddResponse;
modify_result->dn = NULL;
if (res->refs != NULL) {
- modify_result->resultcode = map_ldb_error(local_ctx, LDB_ERR_REFERRAL, &errstr);
+ modify_result->resultcode = map_ldb_error(local_ctx,
+ LDB_ERR_REFERRAL,
+ NULL, &errstr);
modify_result->errormessage = (errstr?talloc_strdup(modify_reply, errstr):NULL);
modify_result->referral = talloc_strdup(call, *res->refs);
} else {
@@ -822,13 +831,16 @@ reply:
res = talloc_zero(local_ctx, struct ldb_result);
NT_STATUS_HAVE_NO_MEMORY(res);
ldb_ret = ldb_add_with_context(samdb, msg, res);
- result = map_ldb_error(local_ctx, ldb_ret, &errstr);
+ result = map_ldb_error(local_ctx, ldb_ret, ldb_errstring(samdb),
+ &errstr);
}
add_result = &add_reply->msg->r.AddResponse;
add_result->dn = NULL;
if (res->refs != NULL) {
- add_result->resultcode = map_ldb_error(local_ctx, LDB_ERR_REFERRAL, &errstr);
+ add_result->resultcode = map_ldb_error(local_ctx,
+ LDB_ERR_REFERRAL, NULL,
+ &errstr);
add_result->errormessage = (errstr?talloc_strdup(add_reply,errstr):NULL);
add_result->referral = talloc_strdup(call, *res->refs);
} else {
@@ -875,13 +887,16 @@ reply:
res = talloc_zero(local_ctx, struct ldb_result);
NT_STATUS_HAVE_NO_MEMORY(res);
ldb_ret = ldb_delete_with_context(samdb, dn, res);
- result = map_ldb_error(local_ctx, ldb_ret, &errstr);
+ result = map_ldb_error(local_ctx, ldb_ret, ldb_errstring(samdb),
+ &errstr);
}
del_result = &del_reply->msg->r.DelResponse;
del_result->dn = NULL;
if (res->refs != NULL) {
- del_result->resultcode = map_ldb_error(local_ctx, LDB_ERR_REFERRAL, &errstr);
+ del_result->resultcode = map_ldb_error(local_ctx,
+ LDB_ERR_REFERRAL, NULL,
+ &errstr);
del_result->errormessage = (errstr?talloc_strdup(del_reply,errstr):NULL);
del_result->referral = talloc_strdup(call, *res->refs);
} else {
@@ -928,14 +943,16 @@ static NTSTATUS ldapsrv_ModifyDNRequest(struct ldapsrv_call *call)
if (ldb_dn_get_comp_num(newrdn) != 1) {
result = LDAP_INVALID_DN_SYNTAX;
- map_ldb_error(local_ctx, LDB_ERR_INVALID_DN_SYNTAX, &errstr);
+ map_ldb_error(local_ctx, LDB_ERR_INVALID_DN_SYNTAX, NULL,
+ &errstr);
goto reply;
}
/* we can't handle the rename if we should not remove the old dn */
if (!req->deleteolddn) {
result = LDAP_UNWILLING_TO_PERFORM;
- map_ldb_error(local_ctx, LDB_ERR_UNWILLING_TO_PERFORM, &errstr);
+ map_ldb_error(local_ctx, LDB_ERR_UNWILLING_TO_PERFORM, NULL,
+ &errstr);
errstr = talloc_asprintf(local_ctx,
"%s. Old RDN must be deleted", errstr);
goto reply;
@@ -949,7 +966,7 @@ static NTSTATUS ldapsrv_ModifyDNRequest(struct ldapsrv_call *call)
if (ldb_dn_get_comp_num(parentdn) < 1) {
result = LDAP_AFFECTS_MULTIPLE_DSAS;
map_ldb_error(local_ctx, LDB_ERR_AFFECTS_MULTIPLE_DSAS,
- &errstr);
+ NULL, &errstr);
errstr = talloc_asprintf(local_ctx,
"%s. Error new Superior DN invalid", errstr);
goto reply;
@@ -975,13 +992,16 @@ reply:
res = talloc_zero(local_ctx, struct ldb_result);
NT_STATUS_HAVE_NO_MEMORY(res);
ldb_ret = ldb_rename_with_context(samdb, olddn, newdn, res);
- result = map_ldb_error(local_ctx, ldb_ret, &errstr);
+ result = map_ldb_error(local_ctx, ldb_ret, ldb_errstring(samdb),
+ &errstr);
}
modifydn = &modifydn_r->msg->r.ModifyDNResponse;
modifydn->dn = NULL;
if (res->refs != NULL) {
- modifydn->resultcode = map_ldb_error(local_ctx, LDB_ERR_REFERRAL, &errstr);;
+ modifydn->resultcode = map_ldb_error(local_ctx,
+ LDB_ERR_REFERRAL, NULL,
+ &errstr);;
modifydn->errormessage = (errstr?talloc_strdup(modifydn_r,errstr):NULL);
modifydn->referral = talloc_strdup(call, *res->refs);
} else {
@@ -1037,7 +1057,8 @@ reply:
ldb_ret = ldb_search(samdb, local_ctx, &res,
dn, LDB_SCOPE_BASE, attrs, "%s", filter);
if (ldb_ret != LDB_SUCCESS) {
- result = map_ldb_error(local_ctx, ldb_ret, &errstr);
+ result = map_ldb_error(local_ctx, ldb_ret,
+ ldb_errstring(samdb), &errstr);
DEBUG(10,("CompareRequest: error: %s\n", errstr));
} else if (res->count == 0) {
DEBUG(10,("CompareRequest: doesn't matched\n"));
@@ -1049,7 +1070,7 @@ reply:
errstr = NULL;
} else if (res->count > 1) {
result = LDAP_OTHER;
- map_ldb_error(local_ctx, LDB_ERR_OTHER, &errstr);
+ map_ldb_error(local_ctx, LDB_ERR_OTHER, NULL, &errstr);
errstr = talloc_asprintf(local_ctx,
"%s. Too many objects match!", errstr);
DEBUG(10,("CompareRequest: %d results: %s\n", res->count, errstr));
diff --git a/source4/lib/ldb/ldb_tdb/ldb_search.c b/source4/lib/ldb/ldb_tdb/ldb_search.c
index efd6968..08ccc79 100644
--- a/source4/lib/ldb/ldb_tdb/ldb_search.c
+++ b/source4/lib/ldb/ldb_tdb/ldb_search.c
@@ -354,9 +354,10 @@ int ltdb_filter_attrs(struct ldb_message *msg, const char * const *attrs)
}
for (i = 0; i < msg->num_elements; i++) {
- int j, found;
+ unsigned int j;
+ int found = 0;
- for (j = 0, found = 0; attrs[j]; j++) {
+ for (j = 0; attrs[j]; j++) {
if (ldb_attr_cmp(msg->elements[i].name, attrs[j]) == 0) {
found = 1;
break;
diff --git a/source4/lib/ldb/modules/rdn_name.c b/source4/lib/ldb/modules/rdn_name.c
index 3a4068d..38a1b6f 100644
--- a/source4/lib/ldb/modules/rdn_name.c
+++ b/source4/lib/ldb/modules/rdn_name.c
@@ -46,19 +46,6 @@ struct rename_context {
struct ldb_reply *ares;
};
-static struct ldb_message_element *rdn_name_find_attribute(const struct ldb_message *msg, const char *name)
-{
- unsigned int i;
-
- for (i = 0; i < msg->num_elements; i++) {
- if (ldb_attr_cmp(name, msg->elements[i].name) == 0) {
- return &msg->elements[i];
- }
- }
-
- return NULL;
-}
-
static int rdn_name_add_callback(struct ldb_request *req,
struct ldb_reply *ares)
{
@@ -129,10 +116,8 @@ static int rdn_name_add(struct ldb_module *module, struct ldb_request *req)
rdn_val = ldb_val_dup(msg, ldb_dn_get_rdn_val(msg->dn));
- /* Perhaps someone above us tried to set this? */
- if ((attribute = rdn_name_find_attribute(msg, "name")) != NULL ) {
- attribute->num_values = 0;
--
Samba Shared Repository
More information about the samba-cvs
mailing list