From b8fc15be950072846d23e3836d4d0289c10156f2 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sun, 20 Jul 2008 16:33:26 +0200 Subject: [PATCH] Refactoring: Make get_schannel_session_key return NTSTATUS (This used to be commit a0793cc853d3bd43df2fc49df193a5fead6b01ab) --- source3/include/proto.h | 8 ++++---- source3/libnet/libnet_join.c | 7 +++---- source3/rpc_client/cli_pipe.c | 33 ++++++++++++++++++--------------- source3/utils/net_rpc_join.c | 5 +++-- 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/source3/include/proto.h b/source3/include/proto.h index ee3905896ad..822e2e07bc5 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -7118,10 +7118,10 @@ NTSTATUS cli_rpc_pipe_open_spnego_ntlmssp(struct cli_state *cli, const char *username, const char *password, struct rpc_pipe_client **presult); -struct rpc_pipe_client *get_schannel_session_key(struct cli_state *cli, - const char *domain, - uint32 *pneg_flags, - NTSTATUS *perr); +NTSTATUS get_schannel_session_key(struct cli_state *cli, + const char *domain, + uint32 *pneg_flags, + struct rpc_pipe_client **presult); struct rpc_pipe_client *cli_rpc_pipe_open_schannel_with_key(struct cli_state *cli, int pipe_idx, enum pipe_auth_level auth_level, diff --git a/source3/libnet/libnet_join.c b/source3/libnet/libnet_join.c index 40637afabdf..a095cb2dfab 100644 --- a/source3/libnet/libnet_join.c +++ b/source3/libnet/libnet_join.c @@ -1024,10 +1024,9 @@ NTSTATUS libnet_join_ok(const char *netbios_domain_name, return status; } - netlogon_pipe = get_schannel_session_key(cli, - netbios_domain_name, - &neg_flags, &status); - if (!netlogon_pipe) { + status = get_schannel_session_key(cli, netbios_domain_name, + &neg_flags, &netlogon_pipe); + if (!NT_STATUS_IS_OK(status)) { if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_NETWORK_RESPONSE)) { cli_shutdown(cli); return NT_STATUS_OK; diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c index 0ba94ea2927..6d15771d738 100644 --- a/source3/rpc_client/cli_pipe.c +++ b/source3/rpc_client/cli_pipe.c @@ -3203,27 +3203,29 @@ static NTSTATUS get_schannel_session_key_common(struct rpc_pipe_client *netlogon ****************************************************************************/ -struct rpc_pipe_client *get_schannel_session_key(struct cli_state *cli, - const char *domain, - uint32 *pneg_flags, - NTSTATUS *perr) +NTSTATUS get_schannel_session_key(struct cli_state *cli, + const char *domain, + uint32 *pneg_flags, + struct rpc_pipe_client **presult) { struct rpc_pipe_client *netlogon_pipe = NULL; + NTSTATUS status; - *perr = cli_rpc_pipe_open_noauth(cli, &ndr_table_netlogon.syntax_id, - &netlogon_pipe); - if (!NT_STATUS_IS_OK(*perr)) { - return NULL; + status = cli_rpc_pipe_open_noauth(cli, &ndr_table_netlogon.syntax_id, + &netlogon_pipe); + if (!NT_STATUS_IS_OK(status)) { + return status; } - *perr = get_schannel_session_key_common(netlogon_pipe, cli, domain, - pneg_flags); - if (!NT_STATUS_IS_OK(*perr)) { + status = get_schannel_session_key_common(netlogon_pipe, cli, domain, + pneg_flags); + if (!NT_STATUS_IS_OK(status)) { TALLOC_FREE(netlogon_pipe); - return NULL; + return status; } - return netlogon_pipe; + *presult = netlogon_pipe; + return NT_STATUS_OK; } /**************************************************************************** @@ -3370,8 +3372,9 @@ struct rpc_pipe_client *cli_rpc_pipe_open_schannel(struct cli_state *cli, struct rpc_pipe_client *netlogon_pipe = NULL; struct rpc_pipe_client *result = NULL; - netlogon_pipe = get_schannel_session_key(cli, domain, &neg_flags, perr); - if (!netlogon_pipe) { + *perr = get_schannel_session_key(cli, domain, &neg_flags, + &netlogon_pipe); + if (!NT_STATUS_IS_OK(*perr)) { DEBUG(0,("cli_rpc_pipe_open_schannel: failed to get schannel session " "key from server %s for domain %s.\n", cli->desthost, domain )); diff --git a/source3/utils/net_rpc_join.c b/source3/utils/net_rpc_join.c index 609068e3d02..2599c28e9c8 100644 --- a/source3/utils/net_rpc_join.c +++ b/source3/utils/net_rpc_join.c @@ -73,12 +73,13 @@ NTSTATUS net_rpc_join_ok(struct net_context *c, const char *domain, } /* Setup the creds as though we're going to do schannel... */ - netlogon_pipe = get_schannel_session_key(cli, domain, &neg_flags, &ntret); + ntret = get_schannel_session_key(cli, domain, &neg_flags, + &netlogon_pipe); /* We return NT_STATUS_INVALID_NETWORK_RESPONSE if the server is refusing to negotiate schannel, but the creds were set up ok. That'll have to do. */ - if (!netlogon_pipe) { + if (!NT_STATUS_IS_OK(ntret)) { if (NT_STATUS_EQUAL(ntret, NT_STATUS_INVALID_NETWORK_RESPONSE)) { cli_shutdown(cli); return NT_STATUS_OK; -- 2.11.4.GIT