r6156: Fixes bug #2543. Properly cache anonmous username when reverting to anonymous...
authorDerrell Lipman <derrell@samba.org>
Thu, 31 Mar 2005 21:16:20 +0000 (21:16 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:56:25 +0000 (10:56 -0500)
source/libsmb/libsmbclient.c

index 657d0925b0aed32e8435ec242cd9b15298d1a79c..3e8e604ab11488380f78c07e12aa8e66e7bd970e 100644 (file)
@@ -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;