rpcclient: allow -U'OTHERDOMAIN\user' again
authorStefan Metzmacher <metze@samba.org>
Sun, 2 Apr 2017 22:19:40 +0000 (00:19 +0200)
committerStefan Metzmacher <metze@samba.org>
Wed, 5 Apr 2017 12:09:23 +0000 (14:09 +0200)
I guess the primary reason for forcing lp_workgroup()
was the usage of -U% together with schannel,
see source3/script/tests/test_rpcclient_samlogon.sh

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12731

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Autobuild-User(master): Stefan Metzmacher <metze@samba.org>
Autobuild-Date(master): Wed Apr  5 14:09:23 CEST 2017 on sn-devel-144

source3/rpcclient/rpcclient.c

index 9faf01b089094ad9b3d8eb60229014a53741f440..6c851653a0e56a047057db5d9e45b7077a7cf901 100644 (file)
@@ -53,6 +53,7 @@ struct messaging_context *rpcclient_msg_ctx;
 struct user_auth_info *rpcclient_auth_info;
 struct cli_state *rpcclient_cli_state;
 struct netlogon_creds_cli_context *rpcclient_netlogon_creds;
+static const char *rpcclient_netlogon_domain;
 
 /* List to hold groups of commands.
  *
@@ -764,7 +765,7 @@ static NTSTATUS do_cmd(struct cli_state *cli,
                                cli, rpcclient_msg_ctx,
                                cmd_entry->table,
                                default_transport,
-                               get_cmdline_auth_info_domain(auth_info),
+                               rpcclient_netlogon_domain,
                                &cmd_entry->rpc_pipe,
                                talloc_autofree_context(),
                                &rpcclient_netlogon_creds);
@@ -787,7 +788,7 @@ static NTSTATUS do_cmd(struct cli_state *cli,
 
                if (rpcclient_netlogon_creds == NULL && cmd_entry->use_netlogon_creds) {
                        const char *dc_name = cmd_entry->rpc_pipe->desthost;
-                       const char *domain = get_cmdline_auth_info_domain(auth_info);
+                       const char *domain = rpcclient_netlogon_domain;
                        struct cli_credentials *creds = NULL;
 
                        ntresult = pdb_get_trust_credentials(domain, NULL,
@@ -946,7 +947,6 @@ out_free:
        enum dcerpc_transport_t transport;
        uint32_t bflags = 0;
        const char *binding_string = NULL;
-       char *user, *domain, *q;
        const char *host;
        int signing_state = SMB_SIGNING_IPC_DEFAULT;
 
@@ -1141,16 +1141,11 @@ out_free:
                flags |= CLI_FULL_CONNECTION_USE_NT_HASH;
        }
 
-       user = talloc_strdup(frame, get_cmdline_auth_info_username(rpcclient_auth_info));
-       SMB_ASSERT(user != NULL);
-       domain = talloc_strdup(frame, lp_workgroup());
-       SMB_ASSERT(domain != NULL);
-       set_cmdline_auth_info_domain(rpcclient_auth_info, domain);
-
-       if ((q = strchr_m(user,'\\'))) {
-               *q = 0;
-               set_cmdline_auth_info_domain(rpcclient_auth_info, user);
-               set_cmdline_auth_info_username(rpcclient_auth_info, q+1);
+       rpcclient_netlogon_domain = get_cmdline_auth_info_domain(rpcclient_auth_info);
+       if (rpcclient_netlogon_domain == NULL ||
+           rpcclient_netlogon_domain[0] == '\0')
+       {
+               rpcclient_netlogon_domain = lp_workgroup();
        }
 
        nt_status = cli_full_connection(&cli, lp_netbios_name(), host,