Rework anonymous handling of SMB backend to avoid EINVAL

Resolves: #2068976
This commit is contained in:
Ondrej Holy 2022-05-05 12:06:42 +02:00
parent f898263047
commit 6aa57c641e
2 changed files with 81 additions and 1 deletions

View File

@ -22,13 +22,16 @@
Name: gvfs
Version: 1.50.1
Release: 1%{?dist}
Release: 2%{?dist}
Summary: Backends for the gio framework in GLib
License: GPLv3 and LGPLv2+ and BSD and MPLv2.0
URL: https://wiki.gnome.org/Projects/gvfs
Source0: https://download.gnome.org/sources/gvfs/1.50/gvfs-%{version}.tar.xz
# https://bugzilla.redhat.com/show_bug.cgi?id=2068976
Patch0: smb-Rework-anonymous-handling-to-avoid-EINVAL.patch
BuildRequires: meson
BuildRequires: gcc
BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version}
@ -421,6 +424,9 @@ killall -USR1 gvfsd >&/dev/null || :
%{_datadir}/installed-tests
%changelog
* Thu May 05 2022 Ondrej Holy <oholy@redhat.com> - 1.50.1-2
- Rework anonymous handling of SMB backend to avoid EINVAL (#2068976)
* Tue Apr 26 2022 Ondrej Holy <oholy@redhat.com> - 1.50.1-1
- Update to 1.50.1 (#2078857)

View File

@ -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