return SUBSESSION_ERROR_NONE;
}
-EXPORT_API int subsession_get_user_list(int session_uid, subsession_user_t **user_list, int *user_count)
+static int get_main_dir(char **maindir_ptr, int session_uid)
{
- return_if(session_uid_is_not_valid(session_uid, user_count_ptr_is_null(user_count)))
+ *maindir_ptr = NULL;
const long int max_buf_len = sysconf(_SC_GETPW_R_SIZE_MAX);
if (max_buf_len <= 0)
const size_t home_dir_len = strlen(pass_ptr->pw_dir);
const size_t main_dir_len = home_dir_len + sizeof subsession_subdir;
- __attribute__((cleanup(free_ptr))) char *main_dir = (char*)malloc(main_dir_len);
- if (main_dir == NULL)
+ *maindir_ptr = (char*)malloc(main_dir_len);
+ if (*maindir_ptr == NULL)
return SUBSESSION_ERROR_OUT_OF_MEMORY;
- memcpy(main_dir, pass_ptr->pw_dir, main_dir_len - 1);
- memcpy(main_dir + home_dir_len, subsession_subdir, main_dir_len - home_dir_len);
+ memcpy(*maindir_ptr, pass_ptr->pw_dir, main_dir_len - 1);
+ memcpy(*maindir_ptr + home_dir_len, subsession_subdir, main_dir_len - home_dir_len);
+
+ return 0;
+}
+
+EXPORT_API int subsession_get_user_list(int session_uid, subsession_user_t **user_list, int *user_count)
+{
+ return_if(session_uid_is_not_valid(session_uid, user_count_ptr_is_null(user_count)))
+
+ __attribute__((cleanup(free_ptr))) char *main_dir = NULL;
+ const int r = get_main_dir(&main_dir, session_uid);
+ if (r != 0)
+ return r;
DIR *const dir_ptr = opendir(main_dir);
if (dir_ptr == NULL) {