The branch, master has been updated via 98b98a2... s4:password_hash LDB module - adapt the module to the new "ldb_msg_remove_attr" behaviour via 28cb883... ldb:ldb_msg_remove_attr - provide a better implementation from 93db960... s4:samldb LDB module - this codepart isn't needed due to the objectclass LDB module
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 98b98a29f6502422fb6e4bd8c16b5731e2c9c553 Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Thu Jun 3 18:35:00 2010 +0200 s4:password_hash LDB module - adapt the module to the new "ldb_msg_remove_attr" behaviour commit 28cb8839b75ed9a023a032c195469b61224fe688 Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Thu Jun 3 18:22:10 2010 +0200 ldb:ldb_msg_remove_attr - provide a better implementation We can have some special (bad) messages which contain multiple message elements for the same attribute. The AD password change ones are such an example. ----------------------------------------------------------------------- Summary of changes: source4/dsdb/samdb/ldb_modules/password_hash.c | 23 ++++++----------------- source4/lib/ldb/common/ldb_msg.c | 5 +++-- 2 files changed, 9 insertions(+), 19 deletions(-) Changeset truncated at 500 lines: diff --git a/source4/dsdb/samdb/ldb_modules/password_hash.c b/source4/dsdb/samdb/ldb_modules/password_hash.c index 58ab6f7..1b0b490 100644 --- a/source4/dsdb/samdb/ldb_modules/password_hash.c +++ b/source4/dsdb/samdb/ldb_modules/password_hash.c @@ -2266,22 +2266,11 @@ static int password_hash_add_do_add(struct ph_context *ac) return LDB_ERR_OPERATIONS_ERROR; } - /* remove attributes that we just read into 'io' (handle also superfluous - * "password modify" trials - multiple attributes with the same name - - * on add operations) */ - while (ldb_msg_find_element(msg, "userPassword") != NULL) { - ldb_msg_remove_attr(msg, "userPassword"); - } - while (ldb_msg_find_element(msg, "clearTextPassword") != NULL) { - ldb_msg_remove_attr(msg, "clearTextPassword"); - } - while (ldb_msg_find_element(msg, "unicodePwd") != NULL) { - ldb_msg_remove_attr(msg, "unicodePwd"); - } - while (ldb_msg_find_element(msg, "dBCSPwd") != NULL) { - ldb_msg_remove_attr(msg, "dBCSPwd"); - } - + /* remove attributes that we just read into 'io' */ + ldb_msg_remove_attr(msg, "userPassword"); + ldb_msg_remove_attr(msg, "clearTextPassword"); + ldb_msg_remove_attr(msg, "unicodePwd"); + ldb_msg_remove_attr(msg, "dBCSPwd"); ldb_msg_remove_attr(msg, "pwdLastSet"); ldb = ldb_module_get_ctx(ac->module); @@ -2452,7 +2441,7 @@ static int password_hash_modify(struct ldb_module *module, struct ldb_request *r *l); return LDB_ERR_CONSTRAINT_VIOLATION; } - ldb_msg_remove_attr(msg, *l); + ldb_msg_remove_element(msg, passwordAttr); } } if ((del_attr_cnt > 0) && (add_attr_cnt == 0)) { diff --git a/source4/lib/ldb/common/ldb_msg.c b/source4/lib/ldb/common/ldb_msg.c index 59bd320..4d0149a 100644 --- a/source4/lib/ldb/common/ldb_msg.c +++ b/source4/lib/ldb/common/ldb_msg.c @@ -798,8 +798,9 @@ void ldb_msg_remove_element(struct ldb_message *msg, struct ldb_message_element */ void ldb_msg_remove_attr(struct ldb_message *msg, const char *attr) { - struct ldb_message_element *el = ldb_msg_find_element(msg, attr); - if (el) { + struct ldb_message_element *el; + + while ((el = ldb_msg_find_element(msg, attr)) != NULL) { ldb_msg_remove_element(msg, el); } } -- Samba Shared Repository