Create `apps_rw/*` subdirectories and files with [subsession_uid]:users UID:GID 57/279257/1
authorAdam Michalski <a.michalski2@partner.samsung.com>
Thu, 4 Aug 2022 13:34:51 +0000 (15:34 +0200)
committerAdam Michalski <a.michalski2@partner.samsung.com>
Thu, 4 Aug 2022 13:34:51 +0000 (15:34 +0200)
Change-Id: I53045101838b12b983e3cb46055614dccf3ccc6f

sessiond/src/fs_helpers.cpp

index 614f3b112d908517587227b5998789d9d0e4665a..51b93b2a0d9f1c636a097d8391aaf699508bc47b 100644 (file)
@@ -209,8 +209,8 @@ void fs_helpers::add_user_subsession(const int session_uid, const std::string_vi
 
                fs::create_directory(tmp_subsession_dir);
 
-               int gid = get_gid_from_name(main_dir_group);
-               change_owner_and_group(tmp_subsession_dir, session_uid, gid);
+               int main_dir_gid = get_gid_from_name(main_dir_group);
+               change_owner_and_group(tmp_subsession_dir, session_uid, main_dir_gid);
 
                std::string apps_rw_dir = tmp_subsession_dir + "/apps_rw";
                fs::path apps_rw_path { apps_rw_dir };
@@ -224,7 +224,10 @@ void fs_helpers::add_user_subsession(const int session_uid, const std::string_vi
                        | fs::copy_options::copy_symlinks
                );
 
-               // Copy ownership and SMACK attributes for `apps_rw/*` subdirectories & files
+               // Copy SMACK attributes for `apps_rw/*` subdirectories & files
+               // but set [user]:[group] to `session_uid`:users
+               int users_gid = get_gid_from_name("users");
+
                for (auto const& entry : fs::recursive_directory_iterator(source_dir)) {
                        std::string s_path = entry.path();
 
@@ -232,11 +235,12 @@ void fs_helpers::add_user_subsession(const int session_uid, const std::string_vi
                        tmp_path.erase(0, source_dir_len);
                        std::string d_path = apps_rw_dir + std::move(tmp_path);
 
-                       copy_ownership(s_path, d_path);
+                       change_owner_and_group(d_path, session_uid, users_gid);
                        copy_smack_attributes(s_path, d_path);
                }
+
                // Last but not least - the `apps_rw` directory itself
-               change_owner_and_group(apps_rw_dir, session_uid, gid);
+               change_owner_and_group(apps_rw_dir, session_uid, main_dir_gid);
                copy_smack_attributes(source_dir, apps_rw_dir);
 
                // Copy + rename so that the replacement is atomic