mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 01:20:42 -05:00
backends: Make uniform checks on remote desktop input dbus methods
They all checked that the remote session service talked with the
correct peer, and some of them did check that there is an associated
screencast session.
Add a new check for the session being started (as it's state is
decoupled with screencast session availability) and move all checks
to a function that is called from all input-oriented DBus methods.
Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1254
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1258
(cherry picked from commit c8837a8de5
)
This commit is contained in:
parent
fadfca2e16
commit
3daf912449
@ -253,6 +253,37 @@ check_permission (MetaRemoteDesktopSession *session,
|
|||||||
g_dbus_method_invocation_get_sender (invocation)) == 0;
|
g_dbus_method_invocation_get_sender (invocation)) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_remote_desktop_session_check_can_notify (MetaRemoteDesktopSession *session,
|
||||||
|
GDBusMethodInvocation *invocation)
|
||||||
|
{
|
||||||
|
if (!session->started)
|
||||||
|
{
|
||||||
|
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
||||||
|
G_DBUS_ERROR_FAILED,
|
||||||
|
"Session not started");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!check_permission (session, invocation))
|
||||||
|
{
|
||||||
|
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
||||||
|
G_DBUS_ERROR_ACCESS_DENIED,
|
||||||
|
"Permission denied");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!session->screen_cast_session)
|
||||||
|
{
|
||||||
|
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
||||||
|
G_DBUS_ERROR_FAILED,
|
||||||
|
"No screen cast active");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
handle_start (MetaDBusRemoteDesktopSession *skeleton,
|
handle_start (MetaDBusRemoteDesktopSession *skeleton,
|
||||||
GDBusMethodInvocation *invocation)
|
GDBusMethodInvocation *invocation)
|
||||||
@ -332,13 +363,8 @@ handle_notify_keyboard_keycode (MetaDBusRemoteDesktopSession *skeleton,
|
|||||||
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
|
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
|
||||||
ClutterKeyState state;
|
ClutterKeyState state;
|
||||||
|
|
||||||
if (!check_permission (session, invocation))
|
if (!meta_remote_desktop_session_check_can_notify (session, invocation))
|
||||||
{
|
return TRUE;
|
||||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
|
||||||
G_DBUS_ERROR_ACCESS_DENIED,
|
|
||||||
"Permission denied");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pressed)
|
if (pressed)
|
||||||
state = CLUTTER_KEY_STATE_PRESSED;
|
state = CLUTTER_KEY_STATE_PRESSED;
|
||||||
@ -364,13 +390,8 @@ handle_notify_keyboard_keysym (MetaDBusRemoteDesktopSession *skeleton,
|
|||||||
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
|
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
|
||||||
ClutterKeyState state;
|
ClutterKeyState state;
|
||||||
|
|
||||||
if (!check_permission (session, invocation))
|
if (!meta_remote_desktop_session_check_can_notify (session, invocation))
|
||||||
{
|
return TRUE;
|
||||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
|
||||||
G_DBUS_ERROR_ACCESS_DENIED,
|
|
||||||
"Permission denied");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pressed)
|
if (pressed)
|
||||||
state = CLUTTER_KEY_STATE_PRESSED;
|
state = CLUTTER_KEY_STATE_PRESSED;
|
||||||
@ -418,13 +439,8 @@ handle_notify_pointer_button (MetaDBusRemoteDesktopSession *skeleton,
|
|||||||
uint32_t button;
|
uint32_t button;
|
||||||
ClutterButtonState state;
|
ClutterButtonState state;
|
||||||
|
|
||||||
if (!check_permission (session, invocation))
|
if (!meta_remote_desktop_session_check_can_notify (session, invocation))
|
||||||
{
|
return TRUE;
|
||||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
|
||||||
G_DBUS_ERROR_ACCESS_DENIED,
|
|
||||||
"Permission denied");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
button = translate_to_clutter_button (button_code);
|
button = translate_to_clutter_button (button_code);
|
||||||
|
|
||||||
@ -454,13 +470,8 @@ handle_notify_pointer_axis (MetaDBusRemoteDesktopSession *skeleton,
|
|||||||
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
|
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
|
||||||
ClutterScrollFinishFlags finish_flags = CLUTTER_SCROLL_FINISHED_NONE;
|
ClutterScrollFinishFlags finish_flags = CLUTTER_SCROLL_FINISHED_NONE;
|
||||||
|
|
||||||
if (!check_permission (session, invocation))
|
if (!meta_remote_desktop_session_check_can_notify (session, invocation))
|
||||||
{
|
return TRUE;
|
||||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
|
||||||
G_DBUS_ERROR_ACCESS_DENIED,
|
|
||||||
"Permission denied");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flags & META_REMOTE_DESKTOP_NOTIFY_AXIS_FLAGS_FINISH)
|
if (flags & META_REMOTE_DESKTOP_NOTIFY_AXIS_FLAGS_FINISH)
|
||||||
{
|
{
|
||||||
@ -507,13 +518,8 @@ handle_notify_pointer_axis_discrete (MetaDBusRemoteDesktopSession *skeleton,
|
|||||||
ClutterScrollDirection direction;
|
ClutterScrollDirection direction;
|
||||||
int step_count;
|
int step_count;
|
||||||
|
|
||||||
if (!check_permission (session, invocation))
|
if (!meta_remote_desktop_session_check_can_notify (session, invocation))
|
||||||
{
|
return TRUE;
|
||||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
|
||||||
G_DBUS_ERROR_ACCESS_DENIED,
|
|
||||||
"Permission denied");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (axis > 1)
|
if (axis > 1)
|
||||||
{
|
{
|
||||||
@ -558,13 +564,8 @@ handle_notify_pointer_motion_relative (MetaDBusRemoteDesktopSession *skeleton,
|
|||||||
{
|
{
|
||||||
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
|
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
|
||||||
|
|
||||||
if (!check_permission (session, invocation))
|
if (!meta_remote_desktop_session_check_can_notify (session, invocation))
|
||||||
{
|
return TRUE;
|
||||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
|
||||||
G_DBUS_ERROR_ACCESS_DENIED,
|
|
||||||
"Permission denied");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
clutter_virtual_input_device_notify_relative_motion (session->virtual_pointer,
|
clutter_virtual_input_device_notify_relative_motion (session->virtual_pointer,
|
||||||
CLUTTER_CURRENT_TIME,
|
CLUTTER_CURRENT_TIME,
|
||||||
@ -587,21 +588,8 @@ handle_notify_pointer_motion_absolute (MetaDBusRemoteDesktopSession *skeleton,
|
|||||||
MetaScreenCastStream *stream;
|
MetaScreenCastStream *stream;
|
||||||
double abs_x, abs_y;
|
double abs_x, abs_y;
|
||||||
|
|
||||||
if (!check_permission (session, invocation))
|
if (!meta_remote_desktop_session_check_can_notify (session, invocation))
|
||||||
{
|
return TRUE;
|
||||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
|
||||||
G_DBUS_ERROR_ACCESS_DENIED,
|
|
||||||
"Permission denied");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!session->screen_cast_session)
|
|
||||||
{
|
|
||||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
|
||||||
G_DBUS_ERROR_FAILED,
|
|
||||||
"No screen cast active");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
stream = meta_screen_cast_session_get_stream (session->screen_cast_session,
|
stream = meta_screen_cast_session_get_stream (session->screen_cast_session,
|
||||||
stream_path);
|
stream_path);
|
||||||
@ -637,21 +625,8 @@ handle_notify_touch_down (MetaDBusRemoteDesktopSession *skeleton,
|
|||||||
MetaScreenCastStream *stream;
|
MetaScreenCastStream *stream;
|
||||||
double abs_x, abs_y;
|
double abs_x, abs_y;
|
||||||
|
|
||||||
if (!check_permission (session, invocation))
|
if (!meta_remote_desktop_session_check_can_notify (session, invocation))
|
||||||
{
|
return TRUE;
|
||||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
|
||||||
G_DBUS_ERROR_ACCESS_DENIED,
|
|
||||||
"Permission denied");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!session->screen_cast_session)
|
|
||||||
{
|
|
||||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
|
||||||
G_DBUS_ERROR_FAILED,
|
|
||||||
"No screen cast active");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
stream = meta_screen_cast_session_get_stream (session->screen_cast_session,
|
stream = meta_screen_cast_session_get_stream (session->screen_cast_session,
|
||||||
stream_path);
|
stream_path);
|
||||||
@ -688,21 +663,8 @@ handle_notify_touch_motion (MetaDBusRemoteDesktopSession *skeleton,
|
|||||||
MetaScreenCastStream *stream;
|
MetaScreenCastStream *stream;
|
||||||
double abs_x, abs_y;
|
double abs_x, abs_y;
|
||||||
|
|
||||||
if (!check_permission (session, invocation))
|
if (!meta_remote_desktop_session_check_can_notify (session, invocation))
|
||||||
{
|
return TRUE;
|
||||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
|
||||||
G_DBUS_ERROR_ACCESS_DENIED,
|
|
||||||
"Permission denied");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!session->screen_cast_session)
|
|
||||||
{
|
|
||||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
|
||||||
G_DBUS_ERROR_FAILED,
|
|
||||||
"No screen cast active");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
stream = meta_screen_cast_session_get_stream (session->screen_cast_session,
|
stream = meta_screen_cast_session_get_stream (session->screen_cast_session,
|
||||||
stream_path);
|
stream_path);
|
||||||
@ -734,13 +696,8 @@ handle_notify_touch_up (MetaDBusRemoteDesktopSession *skeleton,
|
|||||||
{
|
{
|
||||||
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
|
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
|
||||||
|
|
||||||
if (!check_permission (session, invocation))
|
if (!meta_remote_desktop_session_check_can_notify (session, invocation))
|
||||||
{
|
return TRUE;
|
||||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
|
||||||
G_DBUS_ERROR_ACCESS_DENIED,
|
|
||||||
"Permission denied");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
clutter_virtual_input_device_notify_touch_up (session->virtual_touchscreen,
|
clutter_virtual_input_device_notify_touch_up (session->virtual_touchscreen,
|
||||||
CLUTTER_CURRENT_TIME,
|
CLUTTER_CURRENT_TIME,
|
||||||
|
Loading…
Reference in New Issue
Block a user