Search
SailfishOS Open Build Service
>
Projects
>
nemo
:
testing:hw
:
motorola
:
moto_msm8960_jbbl
:
4.4.0.68
>
udisks2
> _service:tar_git:0011-Add-option-to-set-filesystem-group-permissions.patch
Log In
Username
Password
Cancel
Overview
Repositories
Revisions
Requests
Users
Advanced
Attributes
Meta
File _service:tar_git:0011-Add-option-to-set-filesystem-group-permissions.patch of Package udisks2
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Mike Salmela <mike.salmela@jolla.com> Date: Fri, 31 Jul 2020 11:19:27 +0300 Subject: [PATCH] Add option to set filesystem group permissions Added option set-group-permissions to the Format() method. If the take-ownership option is set, the filesystem permissions will be drwx------ by default. When also setting the set-group-permissions option true, the permission is set to drwxrwx---. --- src/udiskslinuxblock.c | 5 ++++- src/udiskslinuxfilesystem.c | 3 +++ src/udiskslinuxfilesystemhelpers.c | 13 ++++++++++--- src/udiskslinuxfilesystemhelpers.h | 1 + 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/udiskslinuxblock.c b/src/udiskslinuxblock.c index 61f904c4..5b9c6964 100644 --- a/src/udiskslinuxblock.c +++ b/src/udiskslinuxblock.c @@ -2968,6 +2968,7 @@ udisks_linux_block_handle_format (UDisksBlock *block, uid_t caller_uid; gid_t caller_gid; gboolean take_ownership = FALSE; + gboolean set_group_permissions = FALSE; GString *encrypt_passphrase = NULL; gchar *encrypt_type = NULL; gchar *erase_type = NULL; @@ -3005,6 +3006,7 @@ udisks_linux_block_handle_format (UDisksBlock *block, udisks_state_check_block (state, udisks_linux_block_object_get_device_number (UDISKS_LINUX_BLOCK_OBJECT (object))); g_variant_lookup (options, "take-ownership", "b", &take_ownership); + g_variant_lookup (options, "set-group-permissions", "b", &set_group_permissions); udisks_variant_lookup_binary (options, "encrypt.passphrase", &encrypt_passphrase); g_variant_lookup (options, "encrypt.type", "s", &encrypt_type); g_variant_lookup (options, "erase", "s", &erase_type); @@ -3469,7 +3471,8 @@ udisks_linux_block_handle_format (UDisksBlock *block, if (take_ownership && fs_info->supports_owners) { if (!take_filesystem_ownership (udisks_block_get_device (block_to_mkfs), - type, caller_uid, caller_gid, FALSE, &error)) + type, caller_uid, caller_gid, FALSE, + set_group_permissions, &error)) { g_prefix_error (&error, "Failed to take ownership of newly created filesystem: "); diff --git a/src/udiskslinuxfilesystem.c b/src/udiskslinuxfilesystem.c index 833f9b1c..60cc254c 100644 --- a/src/udiskslinuxfilesystem.c +++ b/src/udiskslinuxfilesystem.c @@ -2307,10 +2307,12 @@ handle_take_ownership (UDisksFilesystem *filesystem, UDisksBaseJob *job = NULL; GError *error = NULL; gboolean recursive = FALSE; + gboolean set_group_permissions = FALSE; uid_t caller_uid; gid_t caller_gid; g_variant_lookup (options, "recursive", "b", &recursive); + g_variant_lookup (options, "set-group-permissions", "b", &set_group_permissions); /* only allow a single call at a time */ g_mutex_lock (&UDISKS_LINUX_FILESYSTEM (filesystem)->lock); @@ -2403,6 +2405,7 @@ handle_take_ownership (UDisksFilesystem *filesystem, probed_fs_type, caller_uid, caller_gid, recursive, + set_group_permissions, &error)) { g_dbus_method_invocation_return_error (invocation, diff --git a/src/udiskslinuxfilesystemhelpers.c b/src/udiskslinuxfilesystemhelpers.c index 7c5fc037..c5d0071a 100644 --- a/src/udiskslinuxfilesystemhelpers.c +++ b/src/udiskslinuxfilesystemhelpers.c @@ -119,6 +119,7 @@ take_filesystem_ownership (const gchar *device, uid_t caller_uid, gid_t caller_gid, gboolean recursive, + gboolean set_group_permissions, GError **error) { @@ -126,6 +127,7 @@ take_filesystem_ownership (const gchar *device, GError *local_error = NULL; gboolean unmount = FALSE; gboolean success = TRUE; + mode_t chmod_mode = 0700; mountpoint = bd_fs_get_mountpoint (device, &local_error); if (mountpoint == NULL) @@ -173,11 +175,16 @@ take_filesystem_ownership (const gchar *device, if (! success) goto out; - if (chmod (mountpoint, 0700) != 0) + if (set_group_permissions) + { + chmod_mode |= 070; + } + + if (chmod (mountpoint, chmod_mode) != 0) { g_set_error (error, UDISKS_ERROR, UDISKS_ERROR_FAILED, - "Cannot chmod %s to mode 0700: %m", - mountpoint); + "Cannot chmod %s to mode %o: %m", + mountpoint, chmod_mode); success = FALSE; goto out; } diff --git a/src/udiskslinuxfilesystemhelpers.h b/src/udiskslinuxfilesystemhelpers.h index a6ed271d..98761720 100644 --- a/src/udiskslinuxfilesystemhelpers.h +++ b/src/udiskslinuxfilesystemhelpers.h @@ -36,6 +36,7 @@ gboolean take_filesystem_ownership (const gchar *device, uid_t caller_uid, gid_t caller_gid, gboolean recursive, + gboolean set_group_permissions, GError **error); G_END_DECLS -- 2.33.1