mirror of
https://github.com/systemd/systemd.git
synced 2024-11-06 08:26:52 +03:00
logind: introduce ActivateSessionOnSeat()
This commit is contained in:
parent
acdfc041cc
commit
84c3361e12
@ -82,6 +82,10 @@
|
|||||||
" <method name=\"ActivateSession\">\n" \
|
" <method name=\"ActivateSession\">\n" \
|
||||||
" <arg name=\"id\" type=\"s\" direction=\"in\"/>\n" \
|
" <arg name=\"id\" type=\"s\" direction=\"in\"/>\n" \
|
||||||
" </method>\n" \
|
" </method>\n" \
|
||||||
|
" <method name=\"ActivateSessionOnSeat\">\n" \
|
||||||
|
" <arg name=\"id\" type=\"s\" direction=\"in\"/>\n" \
|
||||||
|
" <arg name=\"seat\" type=\"s\" direction=\"in\"/>\n" \
|
||||||
|
" </method>\n" \
|
||||||
" <method name=\"LockSession\">\n" \
|
" <method name=\"LockSession\">\n" \
|
||||||
" <arg name=\"id\" type=\"s\" direction=\"in\"/>\n" \
|
" <arg name=\"id\" type=\"s\" direction=\"in\"/>\n" \
|
||||||
" </method>\n" \
|
" </method>\n" \
|
||||||
@ -1043,6 +1047,41 @@ static DBusHandlerResult manager_message_handler(
|
|||||||
if (!reply)
|
if (!reply)
|
||||||
goto oom;
|
goto oom;
|
||||||
|
|
||||||
|
} else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "ActivateSessionOnSeat")) {
|
||||||
|
const char *session_name, *seat_name;
|
||||||
|
Session *session;
|
||||||
|
Seat *seat;
|
||||||
|
|
||||||
|
/* Same as ActivateSession() but refuses to work if
|
||||||
|
* the seat doesn't match */
|
||||||
|
|
||||||
|
if (!dbus_message_get_args(
|
||||||
|
message,
|
||||||
|
&error,
|
||||||
|
DBUS_TYPE_STRING, &session_name,
|
||||||
|
DBUS_TYPE_STRING, &seat_name,
|
||||||
|
DBUS_TYPE_INVALID))
|
||||||
|
return bus_send_error_reply(connection, message, &error, -EINVAL);
|
||||||
|
|
||||||
|
session = hashmap_get(m->sessions, session_name);
|
||||||
|
if (!session)
|
||||||
|
return bus_send_error_reply(connection, message, &error, -ENOENT);
|
||||||
|
|
||||||
|
seat = hashmap_get(m->seats, seat_name);
|
||||||
|
if (!seat)
|
||||||
|
return bus_send_error_reply(connection, message, &error, -ENOENT);
|
||||||
|
|
||||||
|
if (session->seat != seat)
|
||||||
|
return bus_send_error_reply(connection, message, &error, -EINVAL);
|
||||||
|
|
||||||
|
r = session_activate(session);
|
||||||
|
if (r < 0)
|
||||||
|
return bus_send_error_reply(connection, message, NULL, r);
|
||||||
|
|
||||||
|
reply = dbus_message_new_method_return(message);
|
||||||
|
if (!reply)
|
||||||
|
goto oom;
|
||||||
|
|
||||||
} else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "LockSession") ||
|
} else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "LockSession") ||
|
||||||
dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "UnlockSession")) {
|
dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "UnlockSession")) {
|
||||||
const char *name;
|
const char *name;
|
||||||
|
@ -72,6 +72,10 @@
|
|||||||
send_interface="org.freedesktop.login1.Manager"
|
send_interface="org.freedesktop.login1.Manager"
|
||||||
send_member="ActivateSession"/>
|
send_member="ActivateSession"/>
|
||||||
|
|
||||||
|
<allow send_destination="org.freedesktop.login1"
|
||||||
|
send_interface="org.freedesktop.login1.Manager"
|
||||||
|
send_member="ActivateSessionOnSeat"/>
|
||||||
|
|
||||||
<allow send_destination="org.freedesktop.login1"
|
<allow send_destination="org.freedesktop.login1"
|
||||||
send_interface="org.freedesktop.login1.Seat"
|
send_interface="org.freedesktop.login1.Seat"
|
||||||
send_member="ActivateSession"/>
|
send_member="ActivateSession"/>
|
||||||
|
Loading…
Reference in New Issue
Block a user