From a993f53d525799df410bab1061fdb28f52379b3c Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 14 Aug 2006 02:50:18 +0000 Subject: r17529: Simo doesn't like the use of the internal ldb_errstring in functions not used purely as ldb module helper functions. This now passes these strings back as explicit parameters. Andrew Bartlett (This used to be commit 9c1cd9c2c6bcd9d056a7c9caafacdd573562ebbc) --- source4/dsdb/samdb/ldb_modules/samldb.c | 36 +++++++++++++++++++++++++-------- source4/dsdb/samdb/samdb.c | 14 ++++++++----- 2 files changed, 37 insertions(+), 13 deletions(-) (limited to 'source4/dsdb/samdb') diff --git a/source4/dsdb/samdb/ldb_modules/samldb.c b/source4/dsdb/samdb/ldb_modules/samldb.c index 67724d56b5..e9ddb7cad7 100644 --- a/source4/dsdb/samdb/ldb_modules/samldb.c +++ b/source4/dsdb/samdb/ldb_modules/samldb.c @@ -435,6 +435,7 @@ static int samldb_fill_group_object(struct ldb_module *module, const struct ldb_ struct ldb_message *msg2; struct ldb_dn_component *rdn; TALLOC_CTX *mem_ctx = talloc_new(msg); + char *errstr; if (!mem_ctx) { return LDB_ERR_OPERATIONS_ERROR; } @@ -447,8 +448,11 @@ static int samldb_fill_group_object(struct ldb_module *module, const struct ldb_ return LDB_ERR_OPERATIONS_ERROR; } - ret = samdb_copy_template(module->ldb, msg2, "(&(CN=TemplateGroup)(objectclass=groupTemplate))"); + ret = samdb_copy_template(module->ldb, msg2, + "(&(CN=TemplateGroup)(objectclass=groupTemplate))", + &errstr); if (ret != 0) { + talloc_free(mem_ctx); return ret; } @@ -494,6 +498,7 @@ static int samldb_fill_user_or_computer_object(struct ldb_module *module, const struct ldb_message *msg2; struct ldb_dn_component *rdn; TALLOC_CTX *mem_ctx = talloc_new(msg); + char *errstr; if (!mem_ctx) { return LDB_ERR_OPERATIONS_ERROR; } @@ -508,9 +513,14 @@ static int samldb_fill_user_or_computer_object(struct ldb_module *module, const if (samdb_find_attribute(module->ldb, msg, "objectclass", "computer") != NULL) { - ret = samdb_copy_template(module->ldb, msg2, "(&(CN=TemplateComputer)(objectclass=userTemplate))"); + ret = samdb_copy_template(module->ldb, msg2, + "(&(CN=TemplateComputer)(objectclass=userTemplate))", + &errstr); if (ret) { - ldb_debug(module->ldb, LDB_DEBUG_WARNING, "samldb_fill_user_or_computer_object: Error copying computer template!\n"); + ldb_asprintf_errstring(module->ldb, + "samldb_fill_user_or_computer_object: " + "Error copying computer template: %s", + errstr); talloc_free(mem_ctx); return ret; } @@ -528,9 +538,13 @@ static int samldb_fill_user_or_computer_object(struct ldb_module *module, const } } else { - ret = samdb_copy_template(module->ldb, msg2, "(&(CN=TemplateUser)(objectclass=userTemplate))"); + ret = samdb_copy_template(module->ldb, msg2, + "(&(CN=TemplateUser)(objectclass=userTemplate))", + &errstr); if (ret) { - ldb_debug(module->ldb, LDB_DEBUG_WARNING, "samldb_fill_user_or_computer_object: Error copying user template!\n"); + ldb_asprintf_errstring(module->ldb, + "samldb_fill_user_or_computer_object: Error copying user template: %s\n", + errstr); talloc_free(mem_ctx); return ret; } @@ -581,7 +595,7 @@ static int samldb_fill_user_or_computer_object(struct ldb_module *module, const } static int samldb_fill_foreignSecurityPrincipal_object(struct ldb_module *module, const struct ldb_message *msg, - struct ldb_message **ret_msg) + struct ldb_message **ret_msg) { struct ldb_message *msg2; struct ldb_dn_component *rdn; @@ -589,6 +603,7 @@ static int samldb_fill_foreignSecurityPrincipal_object(struct ldb_module *module struct dom_sid *sid; const char *dom_attrs[] = { "name", NULL }; struct ldb_message **dom_msgs; + char *errstr; int ret; TALLOC_CTX *mem_ctx = talloc_new(msg); @@ -604,9 +619,14 @@ static int samldb_fill_foreignSecurityPrincipal_object(struct ldb_module *module return LDB_ERR_OPERATIONS_ERROR; } - ret = samdb_copy_template(module->ldb, msg2, "(&(CN=TemplateForeignSecurityPrincipal)(objectclass=foreignSecurityPrincipalTemplate))"); + ret = samdb_copy_template(module->ldb, msg2, + "(&(CN=TemplateForeignSecurityPrincipal)(objectclass=foreignSecurityPrincipalTemplate))", + &errstr); if (ret != 0) { - ldb_debug(module->ldb, LDB_DEBUG_WARNING, "samldb_fill_foreignSecurityPrincipal_object: Error copying template!\n"); + ldb_asprintf_errstring(module->ldb, + "samldb_fill_foreignSecurityPrincipal_object: " + "Error copying template: %s", + errstr); talloc_free(mem_ctx); return ret; } diff --git a/source4/dsdb/samdb/samdb.c b/source4/dsdb/samdb/samdb.c index a659c66725..81b5afb2ee 100644 --- a/source4/dsdb/samdb/samdb.c +++ b/source4/dsdb/samdb/samdb.c @@ -674,11 +674,14 @@ int samdb_find_or_add_attribute(struct ldb_context *ldb, struct ldb_message *msg copy from a template record to a message */ int samdb_copy_template(struct ldb_context *ldb, - struct ldb_message *msg, const char *filter) + struct ldb_message *msg, const char *filter, + char **errstring) { struct ldb_result *res; struct ldb_message *t; int ret, i, j; + + *errstring = NULL; struct ldb_dn *basedn = ldb_dn_explode(ldb, "cn=Templates"); @@ -686,11 +689,12 @@ int samdb_copy_template(struct ldb_context *ldb, ret = ldb_search(ldb, basedn, LDB_SCOPE_SUBTREE, filter, NULL, &res); talloc_free(basedn); if (ret != LDB_SUCCESS) { + *errstring = talloc_steal(msg, ldb_errstring(ldb)); return ret; } if (res->count != 1) { - DEBUG(1, ("samdb_copy_template: ERROR: template '%s' matched %d records, expected 1\n", filter, - res->count)); + *errstring = talloc_asprintf(msg, "samdb_copy_template: ERROR: template '%s' matched %d records, expected 1\n", filter, + res->count); talloc_free(res); return LDB_ERR_OPERATIONS_ERROR; } @@ -719,7 +723,7 @@ int samdb_copy_template(struct ldb_context *ldb, ret = samdb_find_or_add_value(ldb, msg, el->name, (char *)el->values[j].data); if (ret) { - DEBUG(1, ( "Adding objectClass %s failed.\n", el->values[j].data)); + *errstring = talloc_asprintf(msg, "Adding objectClass %s failed.\n", el->values[j].data); talloc_free(res); return ret; } @@ -727,7 +731,7 @@ int samdb_copy_template(struct ldb_context *ldb, ret = samdb_find_or_add_attribute(ldb, msg, el->name, (char *)el->values[j].data); if (ret) { - DEBUG(1, ("Adding attribute %s failed.\n", el->name)); + *errstring = talloc_asprintf(msg, "Adding attribute %s failed.\n", el->name); talloc_free(res); return ret; } -- cgit