diff options
-rw-r--r-- | source3/include/proto.h | 8 | ||||
-rw-r--r-- | source3/libnet/libnet_join.c | 7 | ||||
-rw-r--r-- | source3/rpc_client/cli_pipe.c | 33 | ||||
-rw-r--r-- | 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 ee3905896a..822e2e07bc 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 40637afabd..a095cb2dfa 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 0ba94ea292..6d15771d73 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 609068e3d0..2599c28e9c 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; |