From 53765c81f726a8c056cc4e57004592dd489975c9 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 20 Apr 2009 16:50:49 +0200 Subject: [PATCH] Remove use of talloc_reference in cli_rpc_pipe_open_schannel_with_key() --- source3/include/proto.h | 2 +- source3/libnet/libnet_join.c | 2 +- source3/rpc_client/cli_pipe.c | 12 +++++++----- source3/utils/net_rpc_join.c | 2 +- source3/winbindd/winbindd_cm.c | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/source3/include/proto.h b/source3/include/proto.h index 9b27ca608a1..4cb908b6654 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -5244,7 +5244,7 @@ NTSTATUS cli_rpc_pipe_open_schannel_with_key(struct cli_state *cli, const struct ndr_syntax_id *interface, enum pipe_auth_level auth_level, const char *domain, - struct netlogon_creds_CredentialState *pdc, + struct netlogon_creds_CredentialState **pdc, struct rpc_pipe_client **presult); NTSTATUS cli_rpc_pipe_open_ntlmssp_auth_schannel(struct cli_state *cli, const struct ndr_syntax_id *interface, diff --git a/source3/libnet/libnet_join.c b/source3/libnet/libnet_join.c index 724cc90596a..8e75d36fe33 100644 --- a/source3/libnet/libnet_join.c +++ b/source3/libnet/libnet_join.c @@ -1072,7 +1072,7 @@ NTSTATUS libnet_join_ok(const char *netbios_domain_name, status = cli_rpc_pipe_open_schannel_with_key( cli, &ndr_table_netlogon.syntax_id, PIPE_AUTH_LEVEL_PRIVACY, - netbios_domain_name, netlogon_pipe->dc, &pipe_hnd); + netbios_domain_name, &netlogon_pipe->dc, &pipe_hnd); cli_shutdown(cli); diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c index 567794db88d..3d7db068d5c 100644 --- a/source3/rpc_client/cli_pipe.c +++ b/source3/rpc_client/cli_pipe.c @@ -3845,13 +3845,15 @@ NTSTATUS get_schannel_session_key(struct cli_state *cli, External interface. Open a named pipe to an SMB server and bind using schannel (bind type 68) using session_key. sign and seal. + + The *pdc will be stolen onto this new pipe ****************************************************************************/ NTSTATUS cli_rpc_pipe_open_schannel_with_key(struct cli_state *cli, const struct ndr_syntax_id *interface, enum pipe_auth_level auth_level, const char *domain, - struct netlogon_creds_CredentialState *pdc, + struct netlogon_creds_CredentialState **pdc, struct rpc_pipe_client **presult) { struct rpc_pipe_client *result; @@ -3864,7 +3866,7 @@ NTSTATUS cli_rpc_pipe_open_schannel_with_key(struct cli_state *cli, } status = rpccli_schannel_bind_data(result, domain, auth_level, - pdc->session_key, &auth); + (*pdc)->session_key, &auth); if (!NT_STATUS_IS_OK(status)) { DEBUG(0, ("rpccli_schannel_bind_data returned %s\n", nt_errstr(status))); @@ -3885,7 +3887,7 @@ NTSTATUS cli_rpc_pipe_open_schannel_with_key(struct cli_state *cli, * The credentials on a new netlogon pipe are the ones we are passed * in - reference them in */ - result->dc = talloc_reference(result, pdc); + result->dc = talloc_move(result, pdc); if (result->dc == NULL) { DEBUG(0, ("talloc reference failed\n")); TALLOC_FREE(result); @@ -3964,7 +3966,7 @@ NTSTATUS cli_rpc_pipe_open_ntlmssp_auth_schannel(struct cli_state *cli, } status = cli_rpc_pipe_open_schannel_with_key( - cli, interface, auth_level, domain, netlogon_pipe->dc, + cli, interface, auth_level, domain, &netlogon_pipe->dc, &result); /* Now we've bound using the session key we can close the netlog pipe. */ @@ -4002,7 +4004,7 @@ NTSTATUS cli_rpc_pipe_open_schannel(struct cli_state *cli, } status = cli_rpc_pipe_open_schannel_with_key( - cli, interface, auth_level, domain, netlogon_pipe->dc, + cli, interface, auth_level, domain, &netlogon_pipe->dc, &result); /* Now we've bound using the session key we can close the netlog pipe. */ diff --git a/source3/utils/net_rpc_join.c b/source3/utils/net_rpc_join.c index 58d6cdc5af9..1587793bdc0 100644 --- a/source3/utils/net_rpc_join.c +++ b/source3/utils/net_rpc_join.c @@ -102,7 +102,7 @@ NTSTATUS net_rpc_join_ok(struct net_context *c, const char *domain, ntret = cli_rpc_pipe_open_schannel_with_key( cli, &ndr_table_netlogon.syntax_id, PIPE_AUTH_LEVEL_PRIVACY, - domain, netlogon_pipe->dc, &pipe_hnd); + domain, &netlogon_pipe->dc, &pipe_hnd); if (!NT_STATUS_IS_OK(ntret)) { DEBUG(0,("net_rpc_join_ok: failed to open schannel session " diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c index f22f213eec6..e9cf05e90b7 100644 --- a/source3/winbindd/winbindd_cm.c +++ b/source3/winbindd/winbindd_cm.c @@ -2090,7 +2090,7 @@ NTSTATUS cm_connect_sam(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx, } result = cli_rpc_pipe_open_schannel_with_key (conn->cli, &ndr_table_samr.syntax_id, PIPE_AUTH_LEVEL_PRIVACY, - domain->name, p_creds, &conn->samr_pipe); + domain->name, &p_creds, &conn->samr_pipe); if (!NT_STATUS_IS_OK(result)) { DEBUG(10,("cm_connect_sam: failed to connect to SAMR pipe for " -- 2.11.4.GIT