summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Holy <oholy@redhat.com>2022-05-04 13:20:46 +0200
committerOndrej Holy <oholy@redhat.com>2022-05-05 08:18:56 +0000
commit8c7e79042d819304ea38408d0d90313eef7a3869 (patch)
tree3204d1d04a2d84ebe19fa693208519c52c6126d8
parent0d1da12484861a103baba97587cb9d8f7ac952ae (diff)
downloadgvfs-8c7e79042d819304ea38408d0d90313eef7a3869.tar.gz
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
-rw-r--r--daemon/gvfsbackendsmb.c19
1 files 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);