+ "` subdirectory");
}
+bool fs_helpers::subsession_exists(const int session_uid, const int subsession_id) try {
+ std::string home_dir = fs_helpers::get_home_dir_by_user_id(session_uid);
+ std::string main_dir = std::move(home_dir) + "/" + main_dir_name.data();
+ std::string subsession_dir = std::move(main_dir) + "/" + std::to_string(subsession_id);
+ fs::path subsession_path { subsession_dir };
+ return fs::exists(subsession_path);
+}
+catch (std::exception const &ex) {
+ std::cerr << "Exception " << ex.what() << std::endl
+ << "while executing subsession_exists function [session_uid=" << session_uid
+ << " subsession_id=" << subsession_id << "]" << std::endl;
+ return false;
+}
+
void fs_helpers::add_user_subsession(const int session_uid, const int subsession_id)
{
try {
void copy_ownership(std::string_view src_path, std::string_view dest_path);
std::string get_smack_label(std::string_view src_path, smack_label_type type);
void copy_smack_attributes(std::string_view src_path, std::string_view dest_path);
+ bool subsession_exists(const int session_uid, const int subsession_id);
void add_user_subsession(const int session_uid, const int subsession_id);
void remove_user_subsession(const int session_uid, const int subsession_id);
std::vector<int> get_user_list(const int session_uid);
return;
}
+ if (!fs_helpers::subsession_exists(session_uid, next_subsession_id)) {
+ g_dbus_method_invocation_return_dbus_error(invocation, "org.freedesktop.DBus.Error.FileNotFound", "Invalid UID or subsession passed");
+ return;
+ }
+
switch_id += 1;
int prev_subsession_id = INITIAL_SUB_SESSION_ID;