diff options
Diffstat (limited to 'source3/auth')
-rw-r--r-- | source3/auth/check_samsec.c | 22 |
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; } |