chiark / gitweb /
logind: add LockSessions() call to lock all local sessions at once
authorLennart Poettering <lennart@poettering.net>
Sun, 29 Jul 2012 14:17:06 +0000 (16:17 +0200)
committerLennart Poettering <lennart@poettering.net>
Sun, 29 Jul 2012 14:17:06 +0000 (16:17 +0200)
src/login/logind-dbus.c

index a2ead86..86ca654 100644 (file)
@@ -98,6 +98,7 @@
         "  <method name=\"UnlockSession\">\n"                           \
         "   <arg name=\"id\" type=\"s\" direction=\"in\"/>\n"           \
         "  </method>\n"                                                 \
+        "  <method name=\"LockSessions\"/>\n"                           \
         "  <method name=\"KillSession\">\n"                             \
         "   <arg name=\"id\" type=\"s\" direction=\"in\"/>\n"           \
         "   <arg name=\"who\" type=\"s\" direction=\"in\"/>\n"          \
@@ -1745,6 +1746,18 @@ static DBusHandlerResult manager_message_handler(
                 if (!reply)
                         goto oom;
 
+        } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "LockSessions")) {
+                Session *session;
+                Iterator i;
+
+                HASHMAP_FOREACH(session, m->sessions, i)
+                        if (session_send_lock(session, true) < 0)
+                                goto oom;
+
+                reply = dbus_message_new_method_return(message);
+                if (!reply)
+                        goto oom;
+
         } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "KillSession")) {
                 const char *swho;
                 int32_t signo;