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 };
| 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();
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