diff options
author | Ondrej Holy <oholy@redhat.com> | 2022-05-04 13:20:46 +0200 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2022-05-05 08:18:56 +0000 |
commit | 8c7e79042d819304ea38408d0d90313eef7a3869 (patch) | |
tree | 3204d1d04a2d84ebe19fa693208519c52c6126d8 /daemon/gvfsbackendsmb.c | |
parent | 0d1da12484861a103baba97587cb9d8f7ac952ae (diff) | |
download | gvfs-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
Diffstat (limited to 'daemon/gvfsbackendsmb.c')
-rw-r--r-- | daemon/gvfsbackendsmb.c | 19 |
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); |