This is small project, probably code could be moved to sessiond namespace evetually.
Currently no other file uses sparate namespace (wait manager, hash, globals)
so dropping it from fs_helpers should make code a bit more consistent.
Change-Id: I5d5786f55e844abaf13e1d73358d0d980611f0fc
namespace fs = std::filesystem;
using namespace std::string_literals;
-std::string fs_helpers::get_home_dir_by_user_id(const int uid)
+std::string get_home_dir_by_user_id(const int uid)
{
auto max_buf_size = static_cast<ssize_t>(sysconf(_SC_GETPW_R_SIZE_MAX));
std::runtime_error err("Couldn't get home directory for session_uid=" + std::to_string(uid));
return std::string(pass_ptr->pw_dir);
}
-void fs_helpers::copy_ownership(std::string_view src_path, std::string_view dest_path)
+void copy_ownership(std::string_view src_path, std::string_view dest_path)
{
struct stat info;
int ret = stat(src_path.data(), &info);
change_owner_and_group(dest_path, info.st_uid, info.st_gid);
}
-std::string fs_helpers::get_smack_label(std::string_view src_path, smack_label_type type)
+std::string get_smack_label(std::string_view src_path, smack_label_type type)
{
char *label_raw = nullptr;
int ret = smack_lgetlabel(src_path.data(), &label_raw, type);
return out_str;
}
-int fs_helpers::copy_label(auto label, auto dest_path, auto type)
+int copy_label(auto label, auto dest_path, auto type)
{
if (type != SMACK_LABEL_TRANSMUTE)
return smack_lsetlabel(dest_path.data(), label.c_str(), type);
return ret;
}
-void fs_helpers::copy_smack_attributes(std::string_view src_path, std::string_view dest_path)
+void copy_smack_attributes(std::string_view src_path, std::string_view dest_path)
{
static const enum smack_label_type label_types[] = {
SMACK_LABEL_ACCESS,
}
}
-int fs_helpers::get_gid_from_name(std::string_view group_name)
+int get_gid_from_name(std::string_view group_name)
{
auto max_grp_buf_size = static_cast<ssize_t>(sysconf(_SC_GETGR_R_SIZE_MAX));
if (max_grp_buf_size <= 0)
return pass_grp_ptr->gr_gid;
}
-void fs_helpers::change_owner_and_group(std::string_view path, const int session_uid, const int group_id)
+void change_owner_and_group(std::string_view path, const int session_uid, const int group_id)
{
if (lchown(path.data(), session_uid, group_id) == -1)
throw std::system_error(errno, std::system_category(),
}
// Create `$HOME/subsession` directory if it doesn't exist
-void fs_helpers::create_main_subdirectory(const int session_uid, std::string_view main_dir)
+void create_main_subdirectory(const int session_uid, std::string_view main_dir)
{
if (fs::exists(main_dir))
return;
+ "` subdirectory");
}
-bool fs_helpers::subsession_exists(const int session_uid, const std::string_view subsession_id) try {
- std::string home_dir = fs_helpers::get_home_dir_by_user_id(session_uid);
+bool subsession_exists(const int session_uid, const std::string_view subsession_id) try {
+ std::string home_dir = 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) + "/" + subsession_id.data();
fs::path subsession_path { subsession_dir };
return false;
}
-void fs_helpers::add_user_subsession(const int session_uid, const std::string_view subsession_id)
+void add_user_subsession(const int session_uid, const std::string_view subsession_id)
{
try {
std::string home_dir = get_home_dir_by_user_id(session_uid);
}
}
-void fs_helpers::remove_user_subsession(const int session_uid, const std::string_view subsession_id)
+void remove_user_subsession(const int session_uid, const std::string_view subsession_id)
{
try {
std::string home_dir = get_home_dir_by_user_id(session_uid);
}
}
-fs::path fs_helpers::get_subsession_dir_by_uid(const int session_uid)
+fs::path get_subsession_dir_by_uid(const int session_uid)
{
std::string home_dir = get_home_dir_by_user_id(session_uid);
};
}
-std::vector<std::string> fs_helpers::get_user_list(const int session_uid) try
+std::vector<std::string> get_user_list(const int session_uid) try
{
auto const subsession_path = get_subsession_dir_by_uid(session_uid);
std::vector<std::string> subsessions = { SUBSESSION_INITIAL_SID };
namespace fs = std::filesystem;
-namespace fs_helpers
-{
- std::string get_home_dir_by_user_id(const int uid);
- int get_gid_from_name(std::string_view group_name);
- fs::path get_subsession_dir_by_uid(const int session_uid);
+std::string get_home_dir_by_user_id(const int uid);
+int get_gid_from_name(std::string_view group_name);
+fs::path get_subsession_dir_by_uid(const int session_uid);
- void create_main_subdirectory(const int session_uid, std::string_view main_dir);
- void change_owner_and_group(std::string_view path, const int session_uid, const int group_id);
- 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);
- int copy_label(auto label, auto dest_path, auto type);
- void copy_smack_attributes(std::string_view src_path, std::string_view dest_path);
- bool subsession_exists(const int session_uid, const std::string_view subsession_id);
- void add_user_subsession(const int session_uid, const std::string_view subsession_id);
- void remove_user_subsession(const int session_uid, const std::string_view subsession_id);
- std::vector<std::string> get_user_list(const int session_uid);
-
- constexpr static std::string_view main_dir_name = "subsession";
- constexpr static std::string_view main_dir_group = "system_share";
- constexpr static std::string_view main_dir_smack = "User::Home";
-}
+void create_main_subdirectory(const int session_uid, std::string_view main_dir);
+void change_owner_and_group(std::string_view path, const int session_uid, const int group_id);
+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);
+int copy_label(auto label, auto dest_path, auto type);
+void copy_smack_attributes(std::string_view src_path, std::string_view dest_path);
+bool subsession_exists(const int session_uid, const std::string_view subsession_id);
+void add_user_subsession(const int session_uid, const std::string_view subsession_id);
+void remove_user_subsession(const int session_uid, const std::string_view subsession_id);
+std::vector<std::string> get_user_list(const int session_uid);
+constexpr static std::string_view main_dir_name = "subsession";
+constexpr static std::string_view main_dir_group = "system_share";
+constexpr static std::string_view main_dir_smack = "User::Home";
vals_to_g_variant(session_uid, subsession_id), &err))
g_error_throw(err, "Failed to emit a signal: ");
- fs_helpers::add_user_subsession(session_uid, subsession_id);
+ add_user_subsession(session_uid, subsession_id);
wait_add.try_emplace(session_uid, session_uid, connection, "AddUserCompleted");
wait_add.at(session_uid).on_start(subsession_id, { });
vals_to_g_variant(session_uid, subsession_id), &err))
g_error_throw(err, "Failed to emit a signal: ");
- fs_helpers::remove_user_subsession(session_uid, subsession_id);
+ remove_user_subsession(session_uid, subsession_id);
wait_remove.try_emplace(session_uid, session_uid, connection, "RemoveUserCompleted");
wait_remove.at(session_uid).on_start(subsession_id, { });
get_dbus_error_mapping(SUBSESSION_ERROR_INVALID_PARAMETER), "Incorrect subsession_id passed");
return;
}
- if (next_subsession_id != SUBSESSION_INITIAL_SID && !fs_helpers::subsession_exists(session_uid, next_subsession_id)) {
+ if (next_subsession_id != SUBSESSION_INITIAL_SID && !subsession_exists(session_uid, next_subsession_id)) {
g_dbus_method_invocation_return_dbus_error(invocation,
get_dbus_error_mapping(SUBSESSION_ERROR_NOT_AVAILABLE), "Subsession does not exist");
return;
return;
}
- auto users = fs_helpers::get_user_list(session_uid);
+ auto users = get_user_list(session_uid);
// TODO: It would be cool to be able to use vals_to_g_variant here.
g_autoptr(GVariantBuilder) builder = g_variant_builder_new(G_VARIANT_TYPE("as"));