diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-10-14 00:53:51 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-10-14 00:53:51 +0200 |
commit | 6652a2b9e5f837e8a7e6b0c7b890e5d0e7d85794 (patch) | |
tree | fa79e16580390781310b13ce3dd3ff77c1313d1d /src | |
parent | b9080b03a98252ccccb332d0c892403b8b841916 (diff) |
dbus: expose shutdown helper via D-Bus
Diffstat (limited to 'src')
-rw-r--r-- | src/dbus-manager.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/dbus-manager.c b/src/dbus-manager.c index 3754a0ca8b..c700abbe22 100644 --- a/src/dbus-manager.c +++ b/src/dbus-manager.c @@ -104,6 +104,10 @@ " <method name=\"Reload\"/>\n" \ " <method name=\"Reexecute\"/>\n" \ " <method name=\"Exit\"/>\n" \ + " <method name=\"Reboot\"/>\n" \ + " <method name=\"PowerOff\"/>\n" \ + " <method name=\"Halt\"/>\n" \ + " <method name=\"KExec\"/>\n" \ " <method name=\"SetEnvironment\">\n" \ " <arg name=\"names\" type=\"as\" direction=\"in\"/>\n" \ " </method>\n" \ @@ -808,6 +812,54 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, m->exit_code = MANAGER_EXIT; + } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "Reboot")) { + + if (m->running_as != MANAGER_SYSTEM) { + dbus_set_error(&error, BUS_ERROR_NOT_SUPPORTED, "Reboot is only supported for system managers."); + return bus_send_error_reply(m, connection, message, &error, -ENOTSUP); + } + + if (!(reply = dbus_message_new_method_return(message))) + goto oom; + + m->exit_code = MANAGER_REBOOT; + + } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "PowerOff")) { + + if (m->running_as != MANAGER_SYSTEM) { + dbus_set_error(&error, BUS_ERROR_NOT_SUPPORTED, "Powering off is only supported for system managers."); + return bus_send_error_reply(m, connection, message, &error, -ENOTSUP); + } + + if (!(reply = dbus_message_new_method_return(message))) + goto oom; + + m->exit_code = MANAGER_POWEROFF; + + } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "Halt")) { + + if (m->running_as != MANAGER_SYSTEM) { + dbus_set_error(&error, BUS_ERROR_NOT_SUPPORTED, "Halting is only supported for system managers."); + return bus_send_error_reply(m, connection, message, &error, -ENOTSUP); + } + + if (!(reply = dbus_message_new_method_return(message))) + goto oom; + + m->exit_code = MANAGER_HALT; + + } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "KExec")) { + + if (m->running_as != MANAGER_SYSTEM) { + dbus_set_error(&error, BUS_ERROR_NOT_SUPPORTED, "kexec is only supported for system managers."); + return bus_send_error_reply(m, connection, message, &error, -ENOTSUP); + } + + if (!(reply = dbus_message_new_method_return(message))) + goto oom; + + m->exit_code = MANAGER_KEXEC; + } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "SetEnvironment")) { char **l = NULL, **e = NULL; |