From 8c7e79042d819304ea38408d0d90313eef7a3869 Mon Sep 17 00:00:00 2001 From: Ondrej Holy Date: Wed, 4 May 2022 13:20:46 +0200 Subject: [PATCH] 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); -- 2.36.0