diff options
Diffstat (limited to 'dfs_server/dfs_server_ad.c')
-rw-r--r-- | dfs_server/dfs_server_ad.c | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/dfs_server/dfs_server_ad.c b/dfs_server/dfs_server_ad.c index 062eb495ec4..504ab799ba3 100644 --- a/dfs_server/dfs_server_ad.c +++ b/dfs_server/dfs_server_ad.c @@ -198,11 +198,17 @@ static NTSTATUS get_dcs_insite(TALLOC_CTX *ctx, struct ldb_context *ldb, * Search all the object of class server in this site */ dc_list = talloc_array(r, const char *, r->count); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(dc_list, r); + if (dc_list == NULL) { + TALLOC_FREE(r); + return NT_STATUS_NO_MEMORY; + } /* TODO put some random here in the order */ list->names = talloc_realloc(list, list->names, const char *, list->count + r->count); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(list->names, r); + if (list->names == NULL) { + TALLOC_FREE(r); + return NT_STATUS_NO_MEMORY; + } for (i = 0; i<r->count; i++) { struct ldb_dn *dn; @@ -230,7 +236,10 @@ static NTSTATUS get_dcs_insite(TALLOC_CTX *ctx, struct ldb_context *ldb, } list->names[list->count] = talloc_strdup(list->names, dns); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(list->names[list->count], r); + if (list->names[list->count] == NULL) { + TALLOC_FREE(r); + return NT_STATUS_NO_MEMORY; + } } else { char *tmp; const char *aname = ldb_msg_find_attr_as_string(msg, "sAMAccountName", NULL); @@ -242,7 +251,10 @@ static NTSTATUS get_dcs_insite(TALLOC_CTX *ctx, struct ldb_context *ldb, } tmp = talloc_strdup(list->names, aname); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(tmp, r); + if (tmp == NULL) { + TALLOC_FREE(r); + return NT_STATUS_NO_MEMORY; + } /* Netbios name is also the sAMAccountName for computer but without the final $ */ @@ -335,10 +347,16 @@ static NTSTATUS get_dcs(TALLOC_CTX *ctx, struct ldb_context *ldb, sitedn = r->msgs[0]->dn; set_list = talloc_realloc(subctx, set_list, struct dc_set *, current_pos+1); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(set_list, subctx); + if (set_list == NULL) { + TALLOC_FREE(subctx); + return NT_STATUS_NO_MEMORY; + } set_list[current_pos] = talloc(set_list, struct dc_set); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(set_list[current_pos], subctx); + if (set_list[current_pos] == NULL) { + TALLOC_FREE(subctx); + return NT_STATUS_NO_MEMORY; + } set_list[current_pos]->names = NULL; set_list[current_pos]->count = 0; @@ -384,10 +402,16 @@ static NTSTATUS get_dcs(TALLOC_CTX *ctx, struct ldb_context *ldb, */ set_list = talloc_realloc(subctx, set_list, struct dc_set *, current_pos+2); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(set_list, subctx); + if (set_list == NULL) { + TALLOC_FREE(subctx); + return NT_STATUS_NO_MEMORY; + } set_list[current_pos] = talloc(ctx, struct dc_set); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(set_list[current_pos], subctx); + if (set_list[current_pos] == NULL) { + TALLOC_FREE(subctx); + return NT_STATUS_NO_MEMORY; + } set_list[current_pos]->names = NULL; set_list[current_pos]->count = 0; |