[gvfs/wip/oholy/smb-einval-anonymous: 1/2] smb: Rework anonymous handling to avoid EINVAL




commit 9a97211540907b95e2e593488ef62cae74d10b1e
Author: Ondrej Holy <oholy redhat com>
Date:   Wed May 4 13:20:46 2022 +0200

    smb: Rework anonymous handling to avoid EINVAL
    
    After the recent samba change, the "Invalid Argument" error can be still
    returned when anonymous login is requested even after the commit 747c7f6.
    This is because `smbc_setOptionNoAutoAnonymousLogin` is called after returning
    from the `auth_callback` function (i.e. there is one redundant iteration).
    Let's rework the handling a bit and call that immediately, which bypasses
    the issue.
    
    Fixes: https://gitlab.gnome.org/GNOME/gvfs/-/issues/619

 daemon/gvfsbackendsmb.c | 19 ++++---------------
 1 file changed, 4 insertions(+), 15 deletions(-)
---
diff --git a/daemon/gvfsbackendsmb.c b/daemon/gvfsbackendsmb.c
index 776b67bc..a1e3eacd 100644
--- a/daemon/gvfsbackendsmb.c
+++ b/daemon/gvfsbackendsmb.c
@@ -80,7 +80,6 @@ struct _GVfsBackendSmb
   int mount_try;
   gboolean mount_try_again;
   gboolean mount_cancelled;
-  gboolean use_anonymous;
        
   gboolean password_in_keyring;
   GPasswordSave password_save;
@@ -215,13 +214,6 @@ auth_callback (SMBCCTX *context,
       backend->mount_try_again = TRUE;
       g_debug ("auth_callback - ccache pass\n");
     }
-  else if (backend->use_anonymous)
-    {
-      /* Try again if anonymous login fails */
-      backend->use_anonymous = FALSE;
-      backend->mount_try_again = TRUE;
-      g_debug ("auth_callback - anonymous login pass\n");
-    }
   else
     {
       gboolean in_keyring = FALSE;
@@ -304,10 +296,13 @@ auth_callback (SMBCCTX *context,
       /* Try again if this fails */
       backend->mount_try_again = TRUE;
 
+      smbc_setOptionNoAutoAnonymousLogin (backend->smb_context,
+                                          !anonymous);
+
       if (anonymous)
         {
-          backend->use_anonymous = TRUE;
           backend->password_save = FALSE;
+          g_debug ("auth_callback - anonymous enabled\n");
         }
       else
         {
@@ -535,12 +530,6 @@ do_mount (GVfsBackend *backend,
           smbc_setOptionFallbackAfterKerberos (op_backend->smb_context, 1);
         }
 
-      /* If the AskPassword reply requested anonymous login, enable the
-       * anonymous fallback and try again.
-       */
-      smbc_setOptionNoAutoAnonymousLogin (op_backend->smb_context,
-                                          !op_backend->use_anonymous);
-
       op_backend->mount_try ++;
     }
   while (op_backend->mount_try_again);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]