From e6eebfd9c344bd16873728258f7c29bb63b255d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Thu, 24 Nov 2022 05:54:07 +0100 Subject: [PATCH] gportalsupport: Force use /usr/bin/snapctl to get snap connection status Do not search in path for snapctl to avoid it to be potentially overridden by changing the PATH env variable. Still allow testing by using an ifdef to check if we're building for the test files or not. --- gio/gportalsupport.c | 12 ++++++++++-- gio/tests/meson.build | 3 +++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/gio/gportalsupport.c b/gio/gportalsupport.c index d6aaab4fd..2dd329489 100644 --- a/gio/gportalsupport.c +++ b/gio/gportalsupport.c @@ -29,21 +29,29 @@ static gboolean use_portal; static gboolean network_available; static gboolean dconf_access; +#ifdef G_PORTAL_SUPPORT_TEST +static const char *snapctl = "snapctl"; +#else +static const char *snapctl = "/usr/bin/snapctl"; +#endif + static gboolean snap_plug_is_connected (const gchar *plug_name) { - const gchar *argv[] = { "snapctl", "is-connected", plug_name, NULL }; gint wait_status; + const gchar *argv[] = { snapctl, "is-connected", plug_name, NULL }; /* Bail out if our process is privileged - we don't want to pass those - * privileges to snapctl. It could be overridden using PATH and this would + * privileges to snapctl. It could be overridden and this would * allow arbitrary code execution. */ if (GLIB_PRIVATE_CALL (g_check_setuid) ()) return FALSE; if (!g_spawn_sync (NULL, (gchar **) argv, NULL, +#ifdef G_PORTAL_SUPPORT_TEST G_SPAWN_SEARCH_PATH | +#endif G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL, NULL, NULL, NULL, NULL, &wait_status, diff --git a/gio/tests/meson.build b/gio/tests/meson.build index 43c5820cc..1fc5258aa 100644 --- a/gio/tests/meson.build +++ b/gio/tests/meson.build @@ -229,6 +229,7 @@ if host_machine.system() != 'windows' 'live-g-file' : {}, 'portal-support-none' : { 'extra_sources': ['../gportalsupport.c', '../gsandbox.c'], + 'c_args': ['-DG_PORTAL_SUPPORT_TEST'], 'suite': ['portal-support'], }, 'portal-support-env-var' : { @@ -237,10 +238,12 @@ if host_machine.system() != 'windows' }, 'portal-support-snap' : { 'extra_sources': ['../gportalsupport.c', '../gsandbox.c', 'portal-support-utils.c'], + 'c_args': ['-DG_PORTAL_SUPPORT_TEST'], 'suite': ['portal-support'], }, 'portal-support-snap-classic' : { 'extra_sources': ['../gportalsupport.c', '../gsandbox.c', 'portal-support-utils.c'], + 'c_args': ['-DG_PORTAL_SUPPORT_TEST'], 'suite': ['portal-support'], }, 'resolver-parsing' : {'dependencies' : [network_libs]},