s3:cli_netlogon: add rpccli_{create,setup}_netlogon_creds_with_creds() helper functions
authorStefan Metzmacher <metze@samba.org>
Wed, 17 Dec 2014 08:40:49 +0000 (08:40 +0000)
committerStefan Metzmacher <metze@samba.org>
Fri, 19 Dec 2014 12:15:13 +0000 (13:15 +0100)
This simplifies the callers, then can just pass in a cli_credentials structure.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source3/rpc_client/cli_netlogon.c
source3/rpc_client/cli_netlogon.h

index a5ea02cfa8429975a0669d14ba8344696b98bc2a..b08c10fb7830d7003f3c6bb13ec97f5155fcb1ec 100644 (file)
@@ -124,6 +124,32 @@ NTSTATUS rpccli_create_netlogon_creds(const char *server_computer,
        return NT_STATUS_OK;
 }
 
+NTSTATUS rpccli_create_netlogon_creds_with_creds(struct cli_credentials *creds,
+                                                const char *server_computer,
+                                                struct messaging_context *msg_ctx,
+                                                TALLOC_CTX *mem_ctx,
+                                                struct netlogon_creds_cli_context **netlogon_creds)
+{
+       enum netr_SchannelType sec_chan_type;
+       const char *server_netbios_domain;
+       const char *client_account;
+
+       sec_chan_type = cli_credentials_get_secure_channel_type(creds);
+       if (sec_chan_type == SEC_CHAN_NULL) {
+               return NT_STATUS_INVALID_PARAMETER_MIX;
+       }
+
+       client_account = cli_credentials_get_username(creds);
+       server_netbios_domain = cli_credentials_get_domain(creds);
+
+       return rpccli_create_netlogon_creds(server_computer,
+                                           server_netbios_domain,
+                                           client_account,
+                                           sec_chan_type,
+                                           msg_ctx, mem_ctx,
+                                           netlogon_creds);
+}
+
 NTSTATUS rpccli_setup_netlogon_creds(struct cli_state *cli,
                                     enum dcerpc_transport_t transport,
                                     struct netlogon_creds_cli_context *netlogon_creds,
@@ -195,6 +221,34 @@ NTSTATUS rpccli_setup_netlogon_creds(struct cli_state *cli,
        return NT_STATUS_OK;
 }
 
+NTSTATUS rpccli_setup_netlogon_creds_with_creds(struct cli_state *cli,
+                                               enum dcerpc_transport_t transport,
+                                               struct netlogon_creds_cli_context *netlogon_creds,
+                                               bool force_reauth,
+                                               struct cli_credentials *creds)
+{
+       struct samr_Password *current_nt_hash = NULL;
+       struct samr_Password *previous_nt_hash = NULL;
+       NTSTATUS status;
+
+       current_nt_hash = cli_credentials_get_nt_hash(creds, talloc_tos());
+       if (current_nt_hash == NULL) {
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       status = rpccli_setup_netlogon_creds(cli, transport,
+                                            netlogon_creds,
+                                            force_reauth,
+                                            *current_nt_hash,
+                                            previous_nt_hash);
+       TALLOC_FREE(current_nt_hash);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
+       return NT_STATUS_OK;
+}
+
 static NTSTATUS map_validation_to_info3(TALLOC_CTX *mem_ctx,
                                        uint16_t validation_level,
                                        union netr_Validation *validation,
index cc4033e0804d5af724f3a3eb0a53141e4b931662..b04f3a2a96588b1153a3b0ebe357761f1edd9bf0 100644 (file)
@@ -25,6 +25,7 @@
 
 struct cli_state;
 struct messaging_context;
+struct cli_credentials;
 struct netlogon_creds_cli_context;
 struct dcerpc_binding_handle;
 #include "librpc/rpc/rpc_common.h"
@@ -39,12 +40,22 @@ NTSTATUS rpccli_create_netlogon_creds(const char *server_computer,
                                      struct messaging_context *msg_ctx,
                                      TALLOC_CTX *mem_ctx,
                                      struct netlogon_creds_cli_context **netlogon_creds);
+NTSTATUS rpccli_create_netlogon_creds_with_creds(struct cli_credentials *creds,
+                                                const char *server_computer,
+                                                struct messaging_context *msg_ctx,
+                                                TALLOC_CTX *mem_ctx,
+                                                struct netlogon_creds_cli_context **netlogon_creds);
 NTSTATUS rpccli_setup_netlogon_creds(struct cli_state *cli,
                                     enum dcerpc_transport_t transport,
                                     struct netlogon_creds_cli_context *netlogon_creds,
                                     bool force_reauth,
                                     struct samr_Password current_nt_hash,
                                     const struct samr_Password *previous_nt_hash);
+NTSTATUS rpccli_setup_netlogon_creds_with_creds(struct cli_state *cli,
+                                               enum dcerpc_transport_t transport,
+                                               struct netlogon_creds_cli_context *netlogon_creds,
+                                               bool force_reauth,
+                                               struct cli_credentials *creds);
 NTSTATUS rpccli_netlogon_password_logon(struct netlogon_creds_cli_context *creds,
                                        struct dcerpc_binding_handle *binding_handle,
                                        TALLOC_CTX *mem_ctx,