Check subsession existence explicitly for Add/Remove 51/322051/1
authorMichal Bloch <m.bloch@samsung.com>
Wed, 2 Apr 2025 17:36:04 +0000 (19:36 +0200)
committerMichal Bloch <m.bloch@samsung.com>
Wed, 2 Apr 2025 17:51:34 +0000 (19:51 +0200)
Instead of relying on the actual function blowing up
and parsing the exception in the outermost scope.

Change-Id: Ibd9b0f587880dc5503924f0debde1ec17157f892
Signed-off-by: Michal Bloch <m.bloch@samsung.com>
src/service/src/main_context.hpp

index 6ebeb4f5b9e4be73915b3873550a0cdfb66d715f..406a14891ca2dcee8e02b830e56106fbc1e89758 100644 (file)
@@ -240,6 +240,12 @@ struct sessiond_context {
                if (check_parameters_invalid(invocation, session_uid, subsession_id))
                        return;
 
+               if (subsession_exists(session_uid, subsession_id)) {
+                       g_dbus_method_invocation_return_dbus_error(invocation,
+                               get_dbus_error_mapping(SUBSESSION_ERROR_ALREADY_EXISTS), "Subsession already exists");
+                       return;
+               }
+
                do_add_user(session_uid, subsession_id, DirBackendAddRegularDir {});
 
                g_dbus_method_invocation_return_value(invocation, nullptr);
@@ -257,6 +263,12 @@ struct sessiond_context {
                        return;
                }
 
+               if (subsession_exists(session_uid, subsession_id)) {
+                       g_dbus_method_invocation_return_dbus_error(invocation,
+                               get_dbus_error_mapping(SUBSESSION_ERROR_ALREADY_EXISTS), "Subsession already exists");
+                       return;
+               }
+
                do_add_user(session_uid, subsession_id, DirBackendAddFixedSize {size_kB});
 
                g_dbus_method_invocation_return_value(invocation, nullptr);
@@ -275,6 +287,12 @@ struct sessiond_context {
                        return;
                }
 
+               if (!subsession_exists(session_uid, subsession_id)) {
+                       g_dbus_method_invocation_return_dbus_error(invocation,
+                               get_dbus_error_mapping(SUBSESSION_ERROR_NOT_AVAILABLE), "Subsession does not exist");
+                       return;
+               }
+
                do_remove_user(session_uid, subsession_id);
 
                g_dbus_method_invocation_return_value(invocation, nullptr);