|
|
b6b438 |
From 5a4fb7d50cfa71a57ce62fdd0e090b70da56b33c Mon Sep 17 00:00:00 2001
|
|
|
b6b438 |
From: Andreas Schneider <asn@samba.org>
|
|
|
b6b438 |
Date: Tue, 16 Jul 2019 15:49:43 +0200
|
|
|
b6b438 |
Subject: [PATCH 061/187] s3:utils: Use a stackframe for temporary memory
|
|
|
b6b438 |
|
|
|
b6b438 |
Signed-off-by: Andreas Schneider <asn@samba.org>
|
|
|
b6b438 |
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
|
|
|
b6b438 |
(cherry picked from commit 52b3f921ad2d04cb30232a6aadf261c9fc9aafb2)
|
|
|
b6b438 |
---
|
|
|
b6b438 |
source3/utils/net_rpc.c | 21 +++++++++++++--------
|
|
|
b6b438 |
1 file changed, 13 insertions(+), 8 deletions(-)
|
|
|
b6b438 |
|
|
|
b6b438 |
diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c
|
|
|
b6b438 |
index f6fb892a2d9..03462d89e1b 100644
|
|
|
b6b438 |
--- a/source3/utils/net_rpc.c
|
|
|
b6b438 |
+++ b/source3/utils/net_rpc.c
|
|
|
b6b438 |
@@ -6095,6 +6095,7 @@ static NTSTATUS rpc_trustdom_add_internals(struct net_context *c,
|
|
|
b6b438 |
unsigned int orig_timeout;
|
|
|
b6b438 |
struct dcerpc_binding_handle *b = pipe_hnd->binding_handle;
|
|
|
b6b438 |
DATA_BLOB session_key = data_blob_null;
|
|
|
b6b438 |
+ TALLOC_CTX *frame = NULL;
|
|
|
b6b438 |
|
|
|
b6b438 |
if (argc != 2) {
|
|
|
b6b438 |
d_printf("%s\n%s",
|
|
|
b6b438 |
@@ -6104,22 +6105,24 @@ static NTSTATUS rpc_trustdom_add_internals(struct net_context *c,
|
|
|
b6b438 |
return NT_STATUS_INVALID_PARAMETER;
|
|
|
b6b438 |
}
|
|
|
b6b438 |
|
|
|
b6b438 |
+ frame = talloc_stackframe();
|
|
|
b6b438 |
+
|
|
|
b6b438 |
/*
|
|
|
b6b438 |
* Make valid trusting domain account (ie. uppercased and with '$' appended)
|
|
|
b6b438 |
*/
|
|
|
b6b438 |
|
|
|
b6b438 |
if (asprintf(&acct_name, "%s$", argv[0]) < 0) {
|
|
|
b6b438 |
- return NT_STATUS_NO_MEMORY;
|
|
|
b6b438 |
+ status = NT_STATUS_NO_MEMORY;
|
|
|
b6b438 |
}
|
|
|
b6b438 |
|
|
|
b6b438 |
if (!strupper_m(acct_name)) {
|
|
|
b6b438 |
- SAFE_FREE(acct_name);
|
|
|
b6b438 |
- return NT_STATUS_INVALID_PARAMETER;
|
|
|
b6b438 |
+ status = NT_STATUS_INVALID_PARAMETER;
|
|
|
b6b438 |
+ goto done;
|
|
|
b6b438 |
}
|
|
|
b6b438 |
|
|
|
b6b438 |
init_lsa_String(&lsa_acct_name, acct_name);
|
|
|
b6b438 |
|
|
|
b6b438 |
- status = cli_get_session_key(mem_ctx, pipe_hnd, &session_key);
|
|
|
b6b438 |
+ status = cli_get_session_key(frame, pipe_hnd, &session_key);
|
|
|
b6b438 |
if (!NT_STATUS_IS_OK(status)) {
|
|
|
b6b438 |
DEBUG(0,("Error getting session_key of SAM pipe. Error was %s\n",
|
|
|
b6b438 |
nt_errstr(status)));
|
|
|
b6b438 |
@@ -6127,7 +6130,7 @@ static NTSTATUS rpc_trustdom_add_internals(struct net_context *c,
|
|
|
b6b438 |
}
|
|
|
b6b438 |
|
|
|
b6b438 |
/* Get samr policy handle */
|
|
|
b6b438 |
- status = dcerpc_samr_Connect2(b, mem_ctx,
|
|
|
b6b438 |
+ status = dcerpc_samr_Connect2(b, frame,
|
|
|
b6b438 |
pipe_hnd->desthost,
|
|
|
b6b438 |
MAXIMUM_ALLOWED_ACCESS,
|
|
|
b6b438 |
&connect_pol,
|
|
|
b6b438 |
@@ -6141,7 +6144,7 @@ static NTSTATUS rpc_trustdom_add_internals(struct net_context *c,
|
|
|
b6b438 |
}
|
|
|
b6b438 |
|
|
|
b6b438 |
/* Get domain policy handle */
|
|
|
b6b438 |
- status = dcerpc_samr_OpenDomain(b, mem_ctx,
|
|
|
b6b438 |
+ status = dcerpc_samr_OpenDomain(b, frame,
|
|
|
b6b438 |
&connect_pol,
|
|
|
b6b438 |
MAXIMUM_ALLOWED_ACCESS,
|
|
|
b6b438 |
discard_const_p(struct dom_sid2, domain_sid),
|
|
|
b6b438 |
@@ -6168,7 +6171,7 @@ static NTSTATUS rpc_trustdom_add_internals(struct net_context *c,
|
|
|
b6b438 |
SAMR_USER_ACCESS_GET_ATTRIBUTES |
|
|
|
b6b438 |
SAMR_USER_ACCESS_SET_ATTRIBUTES;
|
|
|
b6b438 |
|
|
|
b6b438 |
- status = dcerpc_samr_CreateUser2(b, mem_ctx,
|
|
|
b6b438 |
+ status = dcerpc_samr_CreateUser2(b, frame,
|
|
|
b6b438 |
&domain_pol,
|
|
|
b6b438 |
&lsa_acct_name,
|
|
|
b6b438 |
acb_info,
|
|
|
b6b438 |
@@ -6207,7 +6210,7 @@ static NTSTATUS rpc_trustdom_add_internals(struct net_context *c,
|
|
|
b6b438 |
info.info23.info.acct_flags = ACB_DOMTRUST;
|
|
|
b6b438 |
info.info23.password = crypt_pwd;
|
|
|
b6b438 |
|
|
|
b6b438 |
- status = dcerpc_samr_SetUserInfo2(b, mem_ctx,
|
|
|
b6b438 |
+ status = dcerpc_samr_SetUserInfo2(b, frame,
|
|
|
b6b438 |
&user_pol,
|
|
|
b6b438 |
23,
|
|
|
b6b438 |
&info,
|
|
|
b6b438 |
@@ -6224,9 +6227,11 @@ static NTSTATUS rpc_trustdom_add_internals(struct net_context *c,
|
|
|
b6b438 |
}
|
|
|
b6b438 |
}
|
|
|
b6b438 |
|
|
|
b6b438 |
+ status = NT_STATUS_OK;
|
|
|
b6b438 |
done:
|
|
|
b6b438 |
SAFE_FREE(acct_name);
|
|
|
b6b438 |
data_blob_clear_free(&session_key);
|
|
|
b6b438 |
+ TALLOC_FREE(frame);
|
|
|
b6b438 |
return status;
|
|
|
b6b438 |
}
|
|
|
b6b438 |
|
|
|
b6b438 |
--
|
|
|
b6b438 |
2.23.0
|
|
|
b6b438 |
|