summaryrefslogtreecommitdiff
path: root/smb-Rework-anonymous-handling-to-avoid-EINVAL.patch
diff options
context:
space:
mode:
Diffstat (limited to 'smb-Rework-anonymous-handling-to-avoid-EINVAL.patch')
-rw-r--r--smb-Rework-anonymous-handling-to-avoid-EINVAL.patch74
1 files changed, 74 insertions, 0 deletions
diff --git a/smb-Rework-anonymous-handling-to-avoid-EINVAL.patch b/smb-Rework-anonymous-handling-to-avoid-EINVAL.patch
new file mode 100644
index 0000000..233983c
--- /dev/null
+++ b/smb-Rework-anonymous-handling-to-avoid-EINVAL.patch
@@ -0,0 +1,74 @@
+From 8c7e79042d819304ea38408d0d90313eef7a3869 Mon Sep 17 00:00:00 2001
+From: Ondrej Holy <oholy@redhat.com>
+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
+