From 59053b667eaf82436466d8c432a99bdc5548a10a Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 18 May 2021 02:38:18 -0400 Subject: [PATCH] import gvfs-1.36.2-11.el8 --- ...-Add-support-for-certificate-prompts.patch | 164 ++++++++++++++++++ SPECS/gvfs.spec | 8 +- 2 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 SOURCES/goa-Add-support-for-certificate-prompts.patch diff --git a/SOURCES/goa-Add-support-for-certificate-prompts.patch b/SOURCES/goa-Add-support-for-certificate-prompts.patch new file mode 100644 index 0000000..fef2e61 --- /dev/null +++ b/SOURCES/goa-Add-support-for-certificate-prompts.patch @@ -0,0 +1,164 @@ +From bbc95d6716ac491489f059c68a6dd258e38aee79 Mon Sep 17 00:00:00 2001 +From: Ondrej Holy +Date: Mon, 25 Nov 2019 16:53:31 +0100 +Subject: [PATCH] goa: Add support for certificate prompts + +Since commit f5ee590e, it is not possible to access Nextcloud/ownCloud +shares with self-signed (or invalid) certificates. This is because +the mount operation is handled by GOA volume monitor and the prompt +to accept certificate is not shown. Let's update the volume monitor +to handle just passwords and show the prompt to the client. + +Fixes: https://gitlab.gnome.org/GNOME/gvfs/issues/251 +--- + monitor/goa/goavolume.c | 98 ++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 96 insertions(+), 2 deletions(-) + +diff --git a/monitor/goa/goavolume.c b/monitor/goa/goavolume.c +index c077dd94..5e9097c6 100644 +--- a/monitor/goa/goavolume.c ++++ b/monitor/goa/goavolume.c +@@ -64,6 +64,7 @@ G_DEFINE_TYPE_EXTENDED (GVfsGoaVolume, g_vfs_goa_volume, G_TYPE_OBJECT, 0, + typedef struct + { + GMountOperation *mount_operation; ++ GMountOperation *mount_operation_orig; + gchar *passwd; + } MountOp; + +@@ -72,6 +73,13 @@ mount_op_free (MountOp *data) + { + g_clear_object (&data->mount_operation); + g_free (data->passwd); ++ ++ if (data->mount_operation_orig != NULL) ++ { ++ g_signal_handlers_disconnect_by_data (data->mount_operation_orig, data); ++ g_object_unref (data->mount_operation_orig); ++ } ++ + g_slice_free (MountOp, data); + } + +@@ -97,6 +105,88 @@ account_attention_needed_cb (GObject *_object, GParamSpec *pspec, gpointer user_ + + /* ---------------------------------------------------------------------------------------------------- */ + ++GType g_vfs_goa_mount_operation_get_type (void) G_GNUC_CONST; ++ ++typedef struct ++{ ++ GMountOperation parent_instance; ++} GVfsGoaMountOperation; ++ ++typedef struct ++{ ++ GMountOperationClass parent_class; ++} GVfsGoaMountOperationClass; ++ ++static GMountOperation * ++g_vfs_goa_mount_operation_new (void) ++{ ++ return G_MOUNT_OPERATION (g_object_new (g_vfs_goa_mount_operation_get_type (), NULL)); ++} ++ ++G_DEFINE_TYPE (GVfsGoaMountOperation, g_vfs_goa_mount_operation, G_TYPE_MOUNT_OPERATION) ++ ++static void ++g_vfs_goa_mount_operation_init (GVfsGoaMountOperation *mount_operation) ++{ ++} ++ ++static void ++g_vfs_goa_mount_operation_ask_question (GMountOperation *op, ++ const char *message, ++ const char *choices[]) ++{ ++ /* This is needed to prevent G_MOUNT_OPERATION_UNHANDLED reply in idle. */ ++} ++ ++static void ++g_vfs_goa_mount_operation_class_init (GVfsGoaMountOperationClass *klass) ++{ ++ GMountOperationClass *mount_op_class; ++ ++ mount_op_class = G_MOUNT_OPERATION_CLASS (klass); ++ mount_op_class->ask_question = g_vfs_goa_mount_operation_ask_question; ++} ++ ++/* ---------------------------------------------------------------------------------------------------- */ ++ ++static void ++ask_question_reply_cb (GMountOperation *op, ++ GMountOperationResult result, ++ gpointer user_data) ++{ ++ MountOp *data = g_task_get_task_data (user_data); ++ ++ g_mount_operation_set_choice (data->mount_operation, ++ g_mount_operation_get_choice (op)); ++ g_mount_operation_reply (data->mount_operation, result); ++} ++ ++static void ++mount_operation_ask_question_cb (GMountOperation *op, ++ gchar *message, ++ GStrv choices, ++ gpointer user_data) ++{ ++ MountOp *data = g_task_get_task_data (user_data); ++ ++ if (data->mount_operation_orig != NULL) ++ { ++ g_signal_connect (data->mount_operation_orig, ++ "reply", ++ G_CALLBACK (ask_question_reply_cb), ++ user_data); ++ g_signal_emit_by_name (data->mount_operation_orig, ++ "ask-question", ++ message, ++ choices); ++ } ++ else ++ { ++ g_mount_operation_reply (data->mount_operation, ++ G_MOUNT_OPERATION_UNHANDLED); ++ } ++} ++ + static void + mount_operation_ask_password_cb (GMountOperation *op, + gchar *message, +@@ -412,7 +502,7 @@ g_vfs_goa_volume_get_uuid (GVolume *_self) + static void + g_vfs_goa_volume_mount (GVolume *_self, + GMountMountFlags flags, +- GMountOperation *mount_operation, ++ GMountOperation *mount_operation_orig, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +@@ -423,6 +513,9 @@ g_vfs_goa_volume_mount (GVolume *_self, + GoaAccount *account; + + data = g_slice_new0 (MountOp); ++ if (mount_operation_orig != NULL) ++ data->mount_operation_orig = g_object_ref (mount_operation_orig); ++ + task = g_task_new (self, cancellable, callback, user_data); + g_task_set_source_tag (task, g_vfs_goa_volume_mount); + g_task_set_task_data (task, data, (GDestroyNotify) mount_op_free); +@@ -431,8 +524,9 @@ g_vfs_goa_volume_mount (GVolume *_self, + * monitor because it is set up to emit MountOpAskPassword on + * ask-password. + */ +- data->mount_operation = g_mount_operation_new (); ++ data->mount_operation = g_vfs_goa_mount_operation_new (); + g_signal_connect (data->mount_operation, "ask-password", G_CALLBACK (mount_operation_ask_password_cb), task); ++ g_signal_connect (data->mount_operation, "ask-question", G_CALLBACK (mount_operation_ask_question_cb), task); + + account = goa_object_peek_account (self->object); + goa_account_call_ensure_credentials (account, cancellable, ensure_credentials_cb, task); +-- +2.28.0 + diff --git a/SPECS/gvfs.spec b/SPECS/gvfs.spec index 415dcd9..d80d0ce 100644 --- a/SPECS/gvfs.spec +++ b/SPECS/gvfs.spec @@ -25,7 +25,7 @@ Name: gvfs Version: 1.36.2 -Release: 10%{?dist} +Release: 11%{?dist} Summary: Backends for the gio framework in GLib License: GPLv3 and LGPLv2+ and BSD and MPLv2.0 @@ -63,6 +63,9 @@ Patch9: udisks2-Fix-crashes-caused-by-missing-source-tag.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1569868 Patch10: smb-Improve-enumeration-performance.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1889411 +Patch11: goa-Add-support-for-certificate-prompts.patch + BuildRequires: pkgconfig BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version} BuildRequires: pkgconfig(dbus-glib-1) @@ -441,6 +444,9 @@ killall -USR1 gvfsd >&/dev/null || : %{_datadir}/installed-tests %changelog +* Tue Nov 03 2020 Ondrej Holy - 1.36.2-11 +- Add support for certificates prompts for GOA mounts (rhbz#1889411) + * Wed Aug 05 2020 Ondrej Holy - 1.36.2-10 - Fix libusb(x) requirements (rhbz#1866332)