portal: Factor out flatpak_bwrap_is_unprivileged()

We can use this for other features that rely on having a non-setuid
version of bubblewrap.

Signed-off-by: Simon McVittie <smcv@collabora.com>
This commit is contained in:
Simon McVittie
2022-12-15 13:46:39 +00:00
committed by Simon McVittie
parent 60e2cceb8c
commit e69afb1986
3 changed files with 15 additions and 14 deletions

View File

@@ -129,6 +129,7 @@ gboolean flatpak_extension_matches_reason (const char *extension_id,
gboolean default_value);
const char * flatpak_get_bwrap (void);
gboolean flatpak_bwrap_is_unprivileged (void);
char **flatpak_strv_sort_by_length (const char * const *strv);
char **flatpak_strv_merge (char **strv1,

View File

@@ -739,6 +739,19 @@ flatpak_get_bwrap (void)
return HELPER;
}
gboolean
flatpak_bwrap_is_unprivileged (void)
{
const char *path = g_find_program_in_path (flatpak_get_bwrap ());
struct stat st;
/* Various features are supported only if bwrap exists and is not setuid */
return
path != NULL &&
stat (path, &st) == 0 &&
(st.st_mode & S_ISUID) == 0;
}
gboolean
flatpak_get_allowed_exports (const char *source_path,
const char *app_id,

View File

@@ -2856,19 +2856,6 @@ name_owner_changed (GDBusConnection *connection,
#define DBUS_INTERFACE_DBUS DBUS_NAME_DBUS
#define DBUS_PATH_DBUS "/org/freedesktop/DBus"
static gboolean
supports_expose_pids (void)
{
const char *path = g_find_program_in_path (flatpak_get_bwrap ());
struct stat st;
/* This is supported only if bwrap exists and is not setuid */
return
path != NULL &&
stat (path, &st) == 0 &&
(st.st_mode & S_ISUID) == 0;
}
static void
on_bus_acquired (GDBusConnection *connection,
const gchar *name,
@@ -3070,7 +3057,7 @@ main (int argc,
flatpak_connection_track_name_owners (session_bus);
if (supports_expose_pids ())
if (flatpak_bwrap_is_unprivileged ())
supports |= FLATPAK_SPAWN_SUPPORT_FLAGS_EXPOSE_PIDS;
flags = G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT;