From a6d74a5a562b54f0b36934965f545fdeb1e8b34a Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sat, 19 Apr 2008 18:17:13 +0200 Subject: [PATCH] Refactoring: Make struct rpc_pipe_client its own talloc parent --- source/include/client.h | 2 -- source/libsmb/clientgen.c | 2 +- source/libsmb/passchange.c | 13 ++++++------- source/rpc_client/cli_netlogon.c | 4 ++-- source/rpc_client/cli_pipe.c | 32 +++++++++++++------------------- source/smbd/change_trust_pw.c | 3 ++- 6 files changed, 24 insertions(+), 32 deletions(-) diff --git a/source/include/client.h b/source/include/client.h index 0e73745edbb..3c0b65576ca 100644 --- a/source/include/client.h +++ b/source/include/client.h @@ -60,8 +60,6 @@ struct cli_pipe_auth_data { struct rpc_pipe_client { struct rpc_pipe_client *prev, *next; - TALLOC_CTX *mem_ctx; - struct cli_state *cli; int pipe_idx; diff --git a/source/libsmb/clientgen.c b/source/libsmb/clientgen.c index 64191239d33..860cb948ac1 100644 --- a/source/libsmb/clientgen.c +++ b/source/libsmb/clientgen.c @@ -650,7 +650,7 @@ bool cli_rpc_pipe_close(struct rpc_pipe_client *cli) cli->pipe_name, cli->cli->desthost )); DLIST_REMOVE(cli->cli->pipe_list, cli); - talloc_destroy(cli->mem_ctx); + talloc_destroy(cli); return ret; } diff --git a/source/libsmb/passchange.c b/source/libsmb/passchange.c index 468750f8012..2f9a87dee4a 100644 --- a/source/libsmb/passchange.c +++ b/source/libsmb/passchange.c @@ -177,8 +177,9 @@ NTSTATUS remote_password_change(const char *remote_machine, const char *user_nam } } - if (NT_STATUS_IS_OK(result = rpccli_samr_chgpasswd_user(pipe_hnd, pipe_hnd->mem_ctx, user_name, - new_passwd, old_passwd))) { + result = rpccli_samr_chgpasswd_user(pipe_hnd, talloc_tos(), + user_name, new_passwd, old_passwd); + if (NT_STATUS_IS_OK(result)) { /* Great - it all worked! */ cli_shutdown(cli); return NT_STATUS_OK; @@ -206,11 +207,9 @@ NTSTATUS remote_password_change(const char *remote_machine, const char *user_nam pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SAMR, &result); if ( pipe_hnd && - (NT_STATUS_IS_OK(result = rpccli_samr_chgpasswd_user(pipe_hnd, - pipe_hnd->mem_ctx, - user_name, - new_passwd, - old_passwd)))) { + (NT_STATUS_IS_OK(result = rpccli_samr_chgpasswd_user( + pipe_hnd, talloc_tos(), user_name, + new_passwd, old_passwd)))) { /* Great - it all worked! */ cli_shutdown(cli); return NT_STATUS_OK; diff --git a/source/rpc_client/cli_netlogon.c b/source/rpc_client/cli_netlogon.c index 851a4a8da82..478a8558824 100644 --- a/source/rpc_client/cli_netlogon.c +++ b/source/rpc_client/cli_netlogon.c @@ -159,7 +159,7 @@ NTSTATUS rpccli_netlogon_setup_creds(struct rpc_pipe_client *cli, generate_random_buffer(clnt_chal_send.data, 8); /* Get the server challenge. */ - result = rpccli_netr_ServerReqChallenge(cli, cli->mem_ctx, + result = rpccli_netr_ServerReqChallenge(cli, talloc_tos(), dc->remote_machine, clnt_name, &clnt_chal_send, @@ -180,7 +180,7 @@ NTSTATUS rpccli_netlogon_setup_creds(struct rpc_pipe_client *cli, * Send client auth-2 challenge and receive server repy. */ - result = rpccli_netr_ServerAuthenticate2(cli, cli->mem_ctx, + result = rpccli_netr_ServerAuthenticate2(cli, talloc_tos(), dc->remote_machine, dc->mach_acct, sec_chan_type, diff --git a/source/rpc_client/cli_pipe.c b/source/rpc_client/cli_pipe.c index bc49e24df1d..a94da8b79b9 100644 --- a/source/rpc_client/cli_pipe.c +++ b/source/rpc_client/cli_pipe.c @@ -1979,7 +1979,7 @@ static NTSTATUS rpc_finish_spnego_ntlmssp_bind(struct rpc_pipe_client *cli, /* Initialize the returning data struct. */ prs_mem_free(rbuf); - prs_init_empty(rbuf, cli->mem_ctx, UNMARSHALL); + prs_init_empty(rbuf, talloc_tos(), UNMARSHALL); nt_status = rpc_api_pipe(cli, &rpc_out, rbuf, RPC_ALTCONTRESP); if (!NT_STATUS_IS_OK(nt_status)) { @@ -2052,7 +2052,7 @@ static NTSTATUS rpc_pipe_bind(struct rpc_pipe_client *cli, return NT_STATUS_INVALID_PARAMETER; } - prs_init_empty(&rpc_out, cli->mem_ctx, MARSHALL); + prs_init_empty(&rpc_out, talloc_tos(), MARSHALL); rpc_call_id = get_rpc_call_id(); @@ -2068,7 +2068,7 @@ static NTSTATUS rpc_pipe_bind(struct rpc_pipe_client *cli, } /* Initialize the incoming data struct. */ - prs_init_empty(&rbuf, cli->mem_ctx, UNMARSHALL); + prs_init_empty(&rbuf, talloc_tos(), UNMARSHALL); /* send data on \PIPE\. receive a response */ status = rpc_api_pipe(cli, &rpc_out, &rbuf, RPC_BINDACK); @@ -2188,7 +2188,6 @@ static NTSTATUS rpc_pipe_bind(struct rpc_pipe_client *cli, static struct rpc_pipe_client *cli_rpc_pipe_open(struct cli_state *cli, int pipe_idx, NTSTATUS *perr) { - TALLOC_CTX *mem_ctx; struct rpc_pipe_client *result; int fnum; @@ -2204,18 +2203,11 @@ static struct rpc_pipe_client *cli_rpc_pipe_open(struct cli_state *cli, int pipe /* The pipe name index must fall within our array */ SMB_ASSERT((pipe_idx >= 0) && (pipe_idx < PI_MAX_PIPES)); - mem_ctx = talloc_init("struct rpc_pipe_client"); - if (mem_ctx == NULL) { - return NULL; - } - - result = TALLOC_ZERO_P(mem_ctx, struct rpc_pipe_client); + result = TALLOC_ZERO_P(NULL, struct rpc_pipe_client); if (result == NULL) { return NULL; } - result->mem_ctx = mem_ctx; - result->pipe_name = cli_get_pipe_name(pipe_idx); fnum = cli_nt_create(cli, result->pipe_name, DESIRED_ACCESS_PIPE); @@ -2226,7 +2218,7 @@ static struct rpc_pipe_client *cli_rpc_pipe_open(struct cli_state *cli, int pipe result->pipe_name, cli->desthost, cli_errstr(cli))); *perr = cli_get_nt_error(cli); - talloc_destroy(result->mem_ctx); + talloc_destroy(result); return NULL; } @@ -2238,9 +2230,9 @@ static struct rpc_pipe_client *cli_rpc_pipe_open(struct cli_state *cli, int pipe if (pipe_idx == PI_NETLOGON) { /* Set up a netlogon credential chain for a netlogon pipe. */ - result->dc = TALLOC_ZERO_P(mem_ctx, struct dcinfo); + result->dc = TALLOC_ZERO_P(result, struct dcinfo); if (result->dc == NULL) { - talloc_destroy(result->mem_ctx); + talloc_destroy(result); return NULL; } } @@ -2525,7 +2517,8 @@ struct rpc_pipe_client *cli_rpc_pipe_open_schannel_with_key(struct cli_state *cl return NULL; } - result->auth.a_u.schannel_auth = TALLOC_ZERO_P(result->mem_ctx, struct schannel_auth_struct); + result->auth.a_u.schannel_auth = TALLOC_ZERO_P( + result, struct schannel_auth_struct); if (!result->auth.a_u.schannel_auth) { cli_rpc_pipe_close(result); *perr = NT_STATUS_NO_MEMORY; @@ -2693,8 +2686,8 @@ struct rpc_pipe_client *cli_rpc_pipe_open_krb5(struct cli_state *cli, /* Default service principal is "desthost$@realm" */ if (!service_princ) { - service_princ = talloc_asprintf(result->mem_ctx, "%s$@%s", - cli->desthost, lp_realm() ); + service_princ = talloc_asprintf(result, "%s$@%s", + cli->desthost, lp_realm() ); if (!service_princ) { cli_rpc_pipe_close(result); return NULL; @@ -2710,7 +2703,8 @@ struct rpc_pipe_client *cli_rpc_pipe_open_krb5(struct cli_state *cli, } } - result->auth.a_u.kerberos_auth = TALLOC_ZERO_P(result->mem_ctx, struct kerberos_auth_struct); + result->auth.a_u.kerberos_auth = TALLOC_ZERO_P( + result, struct kerberos_auth_struct); if (!result->auth.a_u.kerberos_auth) { cli_rpc_pipe_close(result); *perr = NT_STATUS_NO_MEMORY; diff --git a/source/smbd/change_trust_pw.c b/source/smbd/change_trust_pw.c index 4773eeff864..227b2d68999 100644 --- a/source/smbd/change_trust_pw.c +++ b/source/smbd/change_trust_pw.c @@ -82,7 +82,8 @@ NTSTATUS change_trust_account_password( const char *domain, const char *remote_m goto failed; } - nt_status = trust_pw_find_change_and_store_it(netlogon_pipe, netlogon_pipe->mem_ctx, domain); + nt_status = trust_pw_find_change_and_store_it( + netlogon_pipe, netlogon_pipe, domain); cli_shutdown(cli); cli = NULL; -- 2.34.1