summaryrefslogtreecommitdiff
path: root/src/loginctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/loginctl.c')
-rw-r--r--src/loginctl.c59
1 files changed, 55 insertions, 4 deletions
diff --git a/src/loginctl.c b/src/loginctl.c
index 12787ce9d2..23c998cba2 100644
--- a/src/loginctl.c
+++ b/src/loginctl.c
@@ -1151,7 +1151,58 @@ finish:
}
static int activate(DBusConnection *bus, char **args, unsigned n) {
- return 0;
+ DBusMessage *m = NULL, *reply = NULL;
+ int ret = 0;
+ DBusError error;
+ unsigned i;
+
+ assert(bus);
+ assert(args);
+
+ dbus_error_init(&error);
+
+ for (i = 1; i < n; i++) {
+ m = dbus_message_new_method_call(
+ "org.freedesktop.login1",
+ "/org/freedesktop/login1",
+ "org.freedesktop.login1.Manager",
+ "ActivateSession");
+ if (!m) {
+ log_error("Could not allocate message.");
+ ret = -ENOMEM;
+ goto finish;
+ }
+
+ if (!dbus_message_append_args(m,
+ DBUS_TYPE_STRING, &args[i],
+ DBUS_TYPE_INVALID)) {
+ log_error("Could not append arguments to message.");
+ ret = -ENOMEM;
+ goto finish;
+ }
+
+ reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
+ if (!reply) {
+ log_error("Failed to issue method call: %s", bus_error_message(&error));
+ ret = -EIO;
+ goto finish;
+ }
+
+ dbus_message_unref(m);
+ dbus_message_unref(reply);
+ m = reply = NULL;
+ }
+
+finish:
+ if (m)
+ dbus_message_unref(m);
+
+ if (reply)
+ dbus_message_unref(reply);
+
+ dbus_error_free(&error);
+
+ return ret;
}
static int kill_session(DBusConnection *bus, char **args, unsigned n) {
@@ -1327,21 +1378,21 @@ static int loginctl_main(DBusConnection *bus, int argc, char *argv[], DBusError
} verbs[] = {
{ "list-sessions", LESS, 1, list_sessions },
{ "session-status", MORE, 2, show },
- { "show-session", MORE, 2, show },
+ { "show-session", MORE, 1, show },
{ "activate", EQUAL, 2, activate },
{ "lock-session", MORE, 2, activate },
{ "terminate-session", MORE, 2, activate },
{ "kill-session", MORE, 2, kill_session },
{ "list-users", EQUAL, 1, list_users },
{ "user-status", MORE, 2, show },
- { "show-user", MORE, 2, show },
+ { "show-user", MORE, 1, show },
{ "enable-linger", MORE, 2, enable_linger },
{ "disable-linger", MORE, 2, enable_linger },
{ "terminate-user", MORE, 2, enable_linger },
{ "kill-user", MORE, 2, kill_session },
{ "list-seats", EQUAL, 1, list_seats },
{ "seat-status", MORE, 2, show },
- { "show-seat", MORE, 2, show },
+ { "show-seat", MORE, 1, show },
{ "attach", MORE, 3, attach },
{ "flush-devices", EQUAL, 1, flush_devices },
{ "terminate-seat", MORE, 2, terminate_seat },