]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
home: respect user record mount flags
authorTudor Roman <tudor@tudorr.ro>
Sun, 24 May 2020 10:25:13 +0000 (13:25 +0300)
committerLennart Poettering <lennart@poettering.net>
Sun, 24 May 2020 20:48:50 +0000 (22:48 +0200)
src/home/homework-cifs.c
src/home/homework-luks.c
src/home/homework-mount.c
src/home/homework-mount.h

index 1510031a38a3dfcfaf0d263fb9970f06b8a77568..27c92e16e7281895b29b1c99a17a6e0f9bdfb0d5 100644 (file)
@@ -28,7 +28,7 @@ int home_prepare_cifs(
                 char **pw;
                 int r;
 
-                r = home_unshare_and_mount(NULL, NULL, false);
+                r = home_unshare_and_mount(NULL, NULL, false, user_record_mount_flags(h));
                 if (r < 0)
                         return r;
 
index 44face338985b4cac8c217d34ffe97eb01f7f7ea..e9b2fc0c0da00ea9ab6c0b7dda7a825a4247fafc 100644 (file)
@@ -1156,7 +1156,7 @@ int home_prepare_luks(
                 if (r < 0)
                         goto fail;
 
-                r = home_unshare_and_mount(setup->dm_node, fstype, user_record_luks_discard(h));
+                r = home_unshare_and_mount(setup->dm_node, fstype, user_record_luks_discard(h), user_record_mount_flags(h));
                 if (r < 0)
                         goto fail;
 
@@ -2079,7 +2079,7 @@ int home_create_luks(
 
         log_info("Formatting file system completed.");
 
-        r = home_unshare_and_mount(dm_node, fstype, user_record_luks_discard(h));
+        r = home_unshare_and_mount(dm_node, fstype, user_record_luks_discard(h), user_record_mount_flags(h));
         if (r < 0)
                 goto fail;
 
@@ -2284,7 +2284,7 @@ static int can_resize_fs(int fd, uint64_t old_size, uint64_t new_size) {
         return CAN_RESIZE_ONLINE;
 }
 
-static int ext4_offline_resize_fs(HomeSetup *setup, uint64_t new_size, bool discard) {
+static int ext4_offline_resize_fs(HomeSetup *setup, uint64_t new_size, bool discard, unsigned long flags) {
         _cleanup_free_ char *size_str = NULL;
         bool re_open = false, re_mount = false;
         pid_t resize_pid, fsck_pid;
@@ -2354,7 +2354,7 @@ static int ext4_offline_resize_fs(HomeSetup *setup, uint64_t new_size, bool disc
 
         /* Re-establish mounts and reopen the directory */
         if (re_mount) {
-                r = home_mount_node(setup->dm_node, "ext4", discard);
+                r = home_mount_node(setup->dm_node, "ext4", discard, flags);
                 if (r < 0)
                         return r;
 
@@ -2774,7 +2774,7 @@ int home_resize_luks(
         if (resize_type == CAN_RESIZE_ONLINE)
                 r = resize_fs(setup->root_fd, new_fs_size, NULL);
         else
-                r = ext4_offline_resize_fs(setup, new_fs_size, user_record_luks_discard(h));
+                r = ext4_offline_resize_fs(setup, new_fs_size, user_record_luks_discard(h), user_record_mount_flags(h));
         if (r < 0)
                 return log_error_errno(r, "Failed to resize file system: %m");
 
index 9e1116840de2f6a789adf92c28960f38f3b9f150..51c0a3864945190b0a8a1741b43a735f295fc880 100644 (file)
@@ -20,7 +20,7 @@ static const char *mount_options_for_fstype(const char *fstype) {
         return NULL;
 }
 
-int home_mount_node(const char *node, const char *fstype, bool discard) {
+int home_mount_node(const char *node, const char *fstype, bool discard, unsigned long flags) {
         _cleanup_free_ char *joined = NULL;
         const char *options, *discard_option;
         int r;
@@ -38,7 +38,7 @@ int home_mount_node(const char *node, const char *fstype, bool discard) {
         } else
                 options = discard_option;
 
-        r = mount_verbose(LOG_ERR, node, "/run/systemd/user-home-mount", fstype, MS_NODEV|MS_NOSUID|MS_RELATIME, strempty(options));
+        r = mount_verbose(LOG_ERR, node, "/run/systemd/user-home-mount", fstype, flags|MS_RELATIME, strempty(options));
         if (r < 0)
                 return r;
 
@@ -46,7 +46,7 @@ int home_mount_node(const char *node, const char *fstype, bool discard) {
         return 0;
 }
 
-int home_unshare_and_mount(const char *node, const char *fstype, bool discard) {
+int home_unshare_and_mount(const char *node, const char *fstype, bool discard, unsigned long flags) {
         int r;
 
         if (unshare(CLONE_NEWNS) < 0)
@@ -59,7 +59,7 @@ int home_unshare_and_mount(const char *node, const char *fstype, bool discard) {
         (void) mkdir_p("/run/systemd/user-home-mount", 0700);
 
         if (node)
-                return home_mount_node(node, fstype, discard);
+                return home_mount_node(node, fstype, discard, flags);
 
         return 0;
 }
index d926756f7bc9886f074a82e0121fe61ee3ce194c..cf7c8cfcab4bd848ed98d6c71d4115cd479c76e1 100644 (file)
@@ -3,6 +3,6 @@
 
 #include <stdbool.h>
 
-int home_mount_node(const char *node, const char *fstype, bool discard);
-int home_unshare_and_mount(const char *node, const char *fstype, bool discard);
+int home_mount_node(const char *node, const char *fstype, bool discard, unsigned long flags);
+int home_unshare_and_mount(const char *node, const char *fstype, bool discard, unsigned long flags);
 int home_move_mount(const char *user_name_and_realm, const char *target);