libsmb: provide authinfo domain for DFS referral auth
authorDavid Disseldorp <ddiss@samba.org>
Fri, 16 Jan 2015 15:21:23 +0000 (16:21 +0100)
committerKarolin Seeger <kseeger@samba.org>
Thu, 29 Jan 2015 20:15:10 +0000 (21:15 +0100)
libsmbclient uses the smbc_init->smbc_get_auth_data_fn() provided
workgroup/domain in initial connections, but then switches to the
default smb.conf workgroup/domain when handling DFS referrals.

Bug: https://bugzilla.samba.org/show_bug.cgi?id=11059

Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
(cherry picked from commit 6c9de0cd056afc0b478c02f1bdb0e06532388037)
[ddiss@samba.org: 4.0 rebase with cli_init_creds() call]

source3/libsmb/clidfs.c

index 93c964a4d02f37ef990a0ec5d4b3242da9ca1646..750fd449dab07d28a3275def69e16555d6067e4d 100644 (file)
@@ -95,6 +95,7 @@ static NTSTATUS do_connect(TALLOC_CTX *ctx,
        char *newserver, *newshare;
        const char *username;
        const char *password;
+       const char *domain;
        NTSTATUS status;
        int flags = 0;
 
@@ -162,11 +163,15 @@ static NTSTATUS do_connect(TALLOC_CTX *ctx,
 
        username = get_cmdline_auth_info_username(auth_info);
        password = get_cmdline_auth_info_password(auth_info);
+       domain = get_cmdline_auth_info_domain(auth_info);
+       if ((domain == NULL) || (domain[0] == '\0')) {
+               domain = lp_workgroup();
+       }
 
        status = cli_session_setup(c, username,
                                   password, strlen(password),
                                   password, strlen(password),
-                                  lp_workgroup());
+                                  domain);
        if (!NT_STATUS_IS_OK(status)) {
                /* If a password was not supplied then
                 * try again with a null username. */
@@ -187,7 +192,7 @@ static NTSTATUS do_connect(TALLOC_CTX *ctx,
                d_printf("Anonymous login successful\n");
                status = cli_init_creds(c, "", lp_workgroup(), "");
        } else {
-               status = cli_init_creds(c, username, lp_workgroup(), password);
+               status = cli_init_creds(c, username, domain, password);
        }
 
        if (!NT_STATUS_IS_OK(status)) {
@@ -218,7 +223,7 @@ static NTSTATUS do_connect(TALLOC_CTX *ctx,
                                force_encrypt,
                                username,
                                password,
-                               lp_workgroup())) {
+                               domain)) {
                cli_shutdown(c);
                return do_connect(ctx, newserver,
                                newshare, auth_info, false,
@@ -240,7 +245,7 @@ static NTSTATUS do_connect(TALLOC_CTX *ctx,
                status = cli_cm_force_encryption(c,
                                        username,
                                        password,
-                                       lp_workgroup(),
+                                       domain,
                                        sharename);
                if (!NT_STATUS_IS_OK(status)) {
                        cli_shutdown(c);