summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/auth/check_samsec.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/source3/auth/check_samsec.c b/source3/auth/check_samsec.c
index 299f43a1e9..db5f68fdfe 100644
--- a/source3/auth/check_samsec.c
+++ b/source3/auth/check_samsec.c
@@ -519,29 +519,31 @@ NTSTATUS check_sam_security_info3(const DATA_BLOB *challenge,
struct auth_serversupplied_info *server_info = NULL;
struct netr_SamInfo3 *info3;
NTSTATUS status;
- TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx);
- if (!tmp_ctx) {
- return NT_STATUS_NO_MEMORY;
- }
- status = check_sam_security(challenge, tmp_ctx, user_info, &server_info);
+ TALLOC_CTX *frame = talloc_stackframe();
+
+ status = check_sam_security(challenge, talloc_tos(), user_info,
+ &server_info);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(10, ("check_sam_security failed: %s\n",
nt_errstr(status)));
- return status;
+ goto done;
}
info3 = TALLOC_ZERO_P(mem_ctx, struct netr_SamInfo3);
if (info3 == NULL) {
- talloc_free(tmp_ctx);
- return NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
}
status = serverinfo_to_SamInfo3(server_info, NULL, 0, info3);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(10, ("serverinfo_to_SamInfo3 failed: %s\n",
nt_errstr(status)));
- return status;
+ goto done;
}
*pinfo3 = info3;
- return NT_STATUS_OK;
+ status = NT_STATUS_OK;
+done:
+ TALLOC_FREE(frame);
+ return status;
}