TALLOC_FREE(cli_creds);
return status;
}
+ cli_credentials_set_netlogon_creds(cli_creds, ncreds);
*pcli_creds = cli_creds;
return NT_STATUS_OK;
status = cli_rpc_pipe_open_schannel_with_creds(
cli, &ndr_table_netlogon, NCACN_NP,
- cli_creds,
netlogon_creds, &netlogon_pipe);
TALLOC_FREE(netlogon_pipe);
NTSTATUS cli_rpc_pipe_open_schannel_with_creds(struct cli_state *cli,
const struct ndr_interface_table *table,
enum dcerpc_transport_t transport,
- struct cli_credentials *cli_creds,
struct netlogon_creds_cli_context *netlogon_creds,
struct rpc_pipe_client **_rpccli)
{
struct pipe_auth_data *rpcauth;
const char *target_service = table->authservices->names[0];
struct netlogon_creds_CredentialState *ncreds = NULL;
+ struct cli_credentials *cli_creds;
enum dcerpc_AuthLevel auth_level;
NTSTATUS status;
int rpc_pipe_bind_dbglvl = 0;
auth_level = netlogon_creds_cli_auth_level(netlogon_creds);
- cli_credentials_set_netlogon_creds(cli_creds, ncreds);
+ status = netlogon_creds_bind_cli_credentials(
+ netlogon_creds, rpccli, &cli_creds);
+ if (!NT_STATUS_IS_OK(status)) {
+ DBG_DEBUG("netlogon_creds_bind_cli_credentials failed: %s\n",
+ nt_errstr(status));
+ TALLOC_FREE(rpccli);
+ return status;
+ }
status = rpccli_generic_bind_data_from_creds(rpccli,
DCERPC_AUTH_TYPE_SCHANNEL,
}
status = rpc_pipe_bind(rpccli, rpcauth);
- cli_credentials_set_netlogon_creds(cli_creds, NULL);
+
+ /* No TALLOC_FREE, gensec takes references */
+ talloc_unlink(rpccli, cli_creds);
+ cli_creds = NULL;
+
if (NT_STATUS_EQUAL(status, NT_STATUS_NETWORK_ACCESS_DENIED)) {
rpc_pipe_bind_dbglvl = 1;
netlogon_creds_cli_delete(netlogon_creds, ncreds);
NTSTATUS cli_rpc_pipe_open_schannel_with_creds(struct cli_state *cli,
const struct ndr_interface_table *table,
enum dcerpc_transport_t transport,
- struct cli_credentials *cli_creds,
struct netlogon_creds_cli_context *netlogon_creds,
struct rpc_pipe_client **_rpccli);
if (netlogon_flags & NETLOGON_NEG_AUTHENTICATED_RPC) {
status = cli_rpc_pipe_open_schannel_with_creds(cli, table,
transport,
- cli_creds,
netlogon_creds,
&result);
if (!NT_STATUS_IS_OK(status)) {
nt_errstr(result)));
goto anonymous;
}
- status = cli_rpc_pipe_open_schannel_with_creds
- (conn->cli, &ndr_table_samr, NCACN_NP,
- creds, p_creds, &conn->samr_pipe);
+ status = cli_rpc_pipe_open_schannel_with_creds(
+ conn->cli, &ndr_table_samr, NCACN_NP, p_creds,
+ &conn->samr_pipe);
if (NT_STATUS_EQUAL(status, NT_STATUS_NETWORK_SESSION_EXPIRED)
&& !retry) {
status = cli_rpc_pipe_open_schannel_with_creds(conn->cli,
&ndr_table_lsarpc,
NCACN_IP_TCP,
- creds,
p_creds,
&conn->lsa_pipe_tcp);
if (!NT_STATUS_IS_OK(status)) {
nt_errstr(result)));
goto anonymous;
}
- result = cli_rpc_pipe_open_schannel_with_creds
- (conn->cli, &ndr_table_lsarpc, NCACN_NP,
- creds, p_creds, &conn->lsa_pipe);
+ result = cli_rpc_pipe_open_schannel_with_creds(
+ conn->cli, &ndr_table_lsarpc, NCACN_NP, p_creds,
+ &conn->lsa_pipe);
if (NT_STATUS_EQUAL(result, NT_STATUS_NETWORK_SESSION_EXPIRED)
&& !retry) {
result = cli_rpc_pipe_open_schannel_with_creds(
conn->cli, &ndr_table_netlogon, transport,
- creds,
conn->netlogon_creds_ctx,
&conn->netlogon_pipe);
if (!NT_STATUS_IS_OK(result)) {