diff options
author | Simo Sorce <idra@samba.org> | 2006-05-21 20:06:01 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:08:19 -0500 |
commit | e2112ba3b7d491f6b6d9957b57a36a78efed18a9 (patch) | |
tree | 0c1d731eaae11579a71a635dd7d78043b435face /source4/dsdb/samdb/ldb_modules/samldb.c | |
parent | 03f520fd1232ef14eeb75af439685c6978db04e3 (diff) | |
download | samba-e2112ba3b7d491f6b6d9957b57a36a78efed18a9.tar.gz samba-e2112ba3b7d491f6b6d9957b57a36a78efed18a9.tar.bz2 samba-e2112ba3b7d491f6b6d9957b57a36a78efed18a9.zip |
r15782: More fixes for async cases
(This used to be commit 3c9434e264710a1fa29adedbe571d5324ecae906)
Diffstat (limited to 'source4/dsdb/samdb/ldb_modules/samldb.c')
-rw-r--r-- | source4/dsdb/samdb/ldb_modules/samldb.c | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/samldb.c b/source4/dsdb/samdb/ldb_modules/samldb.c index 31cf6143a1..8a708af83b 100644 --- a/source4/dsdb/samdb/ldb_modules/samldb.c +++ b/source4/dsdb/samdb/ldb_modules/samldb.c @@ -625,6 +625,20 @@ static int samldb_fill_user_or_computer_object(struct ldb_module *module, const return LDB_ERR_OPERATIONS_ERROR; } + /* make sure we also add person, organizationalPerson and top */ + if ( ! samldb_find_or_add_attribute(module, msg2, "objectclass", "person", "person")) { + talloc_free(mem_ctx); + return LDB_ERR_OPERATIONS_ERROR; + } + if ( ! samldb_find_or_add_attribute(module, msg2, "objectclass", "organizationalPerson", "organizationalPerson")) { + talloc_free(mem_ctx); + return LDB_ERR_OPERATIONS_ERROR; + } + if ( ! samldb_find_or_add_attribute(module, msg2, "objectclass", "top", "top")) { + talloc_free(mem_ctx); + return LDB_ERR_OPERATIONS_ERROR; + } + /* meddle with objectclass */ if (ldb_msg_find_element(msg2, "samAccountName") == NULL) { @@ -762,13 +776,16 @@ static int samldb_add(struct ldb_module *module, struct ldb_request *req) return ldb_next_request(module, req); } - /* is user or computer? add all relevant missing objects */ - if ((samldb_find_attribute(msg, "objectclass", "user") != NULL) || - (samldb_find_attribute(msg, "objectclass", "computer") != NULL)) { - ret = samldb_fill_user_or_computer_object(module, msg, &msg2); - if (ret) { - return ret; - } + /* is user or computer? Skip if not */ + if ((samldb_find_attribute(msg, "objectclass", "user") == NULL) && + (samldb_find_attribute(msg, "objectclass", "computer") == NULL)) { + return ldb_next_request(module, req); + } + + /* add all relevant missing objects */ + ret = samldb_fill_user_or_computer_object(module, msg, &msg2); + if (ret) { + return ret; } /* is group? add all relevant missing objects */ @@ -830,13 +847,16 @@ static int samldb_add_async(struct ldb_module *module, struct ldb_request *req) return LDB_ERR_OPERATIONS_ERROR; } - /* is user or computer? add all relevant missing objects */ - if ((samldb_find_attribute(msg, "objectclass", "user") != NULL) || - (samldb_find_attribute(msg, "objectclass", "computer") != NULL)) { - ret = samldb_fill_user_or_computer_object(module, msg, &msg2); - if (ret) { - return ret; - } + /* is user or computer? Skip if not */ + if ((samldb_find_attribute(msg, "objectclass", "user") == NULL) && + (samldb_find_attribute(msg, "objectclass", "computer") == NULL)) { + return ldb_next_request(module, req); + } + + /* add all relevant missing objects */ + ret = samldb_fill_user_or_computer_object(module, msg, &msg2); + if (ret) { + return ret; } /* is group? add all relevant missing objects */ |