summaryrefslogtreecommitdiff
path: root/source3/libsmb/libsmbclient.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/libsmb/libsmbclient.c')
-rw-r--r--source3/libsmb/libsmbclient.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/source3/libsmb/libsmbclient.c b/source3/libsmb/libsmbclient.c
index 657d0925b0..3e8e604ab1 100644
--- a/source3/libsmb/libsmbclient.c
+++ b/source3/libsmb/libsmbclient.c
@@ -558,6 +558,7 @@ SMBCSRV *smbc_server(SMBCCTX *context,
int tried_reverse = 0;
int port_try_first;
int port_try_next;
+ const char *username_used;
zero_ip(&ip);
ZERO_STRUCT(c);
@@ -712,16 +713,26 @@ SMBCSRV *smbc_server(SMBCCTX *context,
return NULL;
}
- if (!cli_session_setup(&c, username,
+ username_used = username;
+
+ if (!cli_session_setup(&c, username_used,
password, strlen(password),
password, strlen(password),
- workgroup) &&
- /* Try an anonymous login if it failed and this was allowed by flags. */
- ((context->flags & SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON) ||
- !cli_session_setup(&c, "", "", 1,"", 0, workgroup))) {
- cli_shutdown(&c);
- errno = EPERM;
- return NULL;
+ workgroup)) {
+
+ /* Failed. Try an anonymous login, if allowed by flags. */
+ username_used = "";
+
+ if ((context->flags & SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON) ||
+ !cli_session_setup(&c, username_used,
+ password, 1,
+ password, 0,
+ workgroup)) {
+
+ cli_shutdown(&c);
+ errno = EPERM;
+ return NULL;
+ }
}
DEBUG(4,(" session setup ok\n"));
@@ -753,7 +764,7 @@ SMBCSRV *smbc_server(SMBCCTX *context,
/* now add it to the cache (internal or external) */
/* Let the cache function set errno if it wants to */
errno = 0;
- if (context->callbacks.add_cached_srv_fn(context, srv, server, share, workgroup, username)) {
+ if (context->callbacks.add_cached_srv_fn(context, srv, server, share, workgroup, username_used)) {
int saved_errno = errno;
DEBUG(3, (" Failed to add server to cache\n"));
errno = saved_errno;