X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogin%2Flogind-dbus.c;h=4a84b860f10479fb053e3bdd6b0ac71350bea17c;hb=602c0e740f8290cc9c4f13f2eb4b23fbbd7a8d2b;hp=230dd2b4b5e9ac2f329a0de281cb30f1d439a214;hpb=e2acb67baaa1d63685dcaf80becf10291f13d086;p=elogind.git diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 230dd2b4b..4a84b860f 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -31,6 +31,7 @@ #include "path-util.h" #include "polkit.h" #include "special.h" +#include "sleep-config.h" #include "systemd/sd-id128.h" #include "systemd/sd-messages.h" #include "fileio-label.h" @@ -66,7 +67,7 @@ " \n" \ " \n" \ " \n" \ - " \n" \ + " \n" \ " \n" \ " \n" \ " \n" \ @@ -487,8 +488,7 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess if (r < 0) return -EINVAL; - if (strv_contains(controllers, "systemd") || - !dbus_message_iter_next(&iter) || + if (!dbus_message_iter_next(&iter) || dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY || dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_STRING) { r = -EINVAL; @@ -499,8 +499,7 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess if (r < 0) goto fail; - if (strv_contains(reset_controllers, "systemd") || - !dbus_message_iter_next(&iter) || + if (!dbus_message_iter_next(&iter) || dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_BOOLEAN) { r = -EINVAL; goto fail; @@ -508,7 +507,7 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess dbus_message_iter_get_basic(&iter, &kill_processes); - r = cg_pid_get_cgroup(leader, NULL, &cgroup); + r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, leader, &cgroup); if (r < 0) goto fail; @@ -611,11 +610,11 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess session->type = t; session->class = c; session->remote = remote; - session->controllers = controllers; - session->reset_controllers = reset_controllers; session->kill_processes = kill_processes; session->vtnr = vtnr; + session->controllers = cg_shorten_controllers(controllers); + session->reset_controllers = cg_shorten_controllers(reset_controllers); controllers = reset_controllers = NULL; if (!isempty(tty)) { @@ -924,7 +923,7 @@ finish: static int attach_device(Manager *m, const char *seat, const char *sysfs) { struct udev_device *d; - char _cleanup_free_ *rule = NULL, *file = NULL; + _cleanup_free_ char *rule = NULL, *file = NULL; const char *id_for_seat; int r; @@ -973,7 +972,7 @@ finish: } static int flush_devices(Manager *m) { - DIR _cleanup_closedir_ *d; + _cleanup_closedir_ DIR *d; assert(m); @@ -1133,13 +1132,12 @@ static int bus_manager_can_shutdown_or_sleep( const char *action, const char *action_multiple_sessions, const char *action_ignore_inhibit, - const char *sleep_type, - const char *sleep_disk_type, + const char *sleep_verb, DBusError *error, DBusMessage **_reply) { bool multiple_sessions, challenge, blocked, b; - const char *result; + const char *result = NULL; _cleanup_dbus_message_unref_ DBusMessage *reply = NULL; int r; unsigned long ul; @@ -1155,22 +1153,10 @@ static int bus_manager_can_shutdown_or_sleep( assert(error); assert(_reply); - if (sleep_type) { - r = can_sleep(sleep_type); - if (r < 0) - return r; - - if (r == 0) { - result = "na"; - goto finish; - } - } - - if (sleep_disk_type) { - r = can_sleep_disk(sleep_disk_type); + if (sleep_verb) { + r = can_sleep(sleep_verb); if (r < 0) return r; - if (r == 0) { result = "na"; goto finish; @@ -1315,8 +1301,7 @@ static int bus_manager_do_shutdown_or_sleep( const char *action, const char *action_multiple_sessions, const char *action_ignore_inhibit, - const char *sleep_type, - const char *sleep_disk_type, + const char *sleep_verb, DBusError *error, DBusMessage **_reply) { @@ -1349,17 +1334,8 @@ static int bus_manager_do_shutdown_or_sleep( DBUS_TYPE_INVALID)) return -EINVAL; - if (sleep_type) { - r = can_sleep(sleep_type); - if (r < 0) - return r; - - if (r == 0) - return -ENOTSUP; - } - - if (sleep_disk_type) { - r = can_sleep_disk(sleep_disk_type); + if (sleep_verb) { + r = can_sleep(sleep_verb); if (r < 0) return r; @@ -2162,7 +2138,7 @@ static DBusHandlerResult manager_message_handler( "org.freedesktop.login1.power-off", "org.freedesktop.login1.power-off-multiple-sessions", "org.freedesktop.login1.power-off-ignore-inhibit", - NULL, NULL, + NULL, &error, &reply); if (r < 0) return bus_send_error_reply(connection, message, &error, r); @@ -2174,7 +2150,7 @@ static DBusHandlerResult manager_message_handler( "org.freedesktop.login1.reboot", "org.freedesktop.login1.reboot-multiple-sessions", "org.freedesktop.login1.reboot-ignore-inhibit", - NULL, NULL, + NULL, &error, &reply); if (r < 0) return bus_send_error_reply(connection, message, &error, r); @@ -2187,7 +2163,7 @@ static DBusHandlerResult manager_message_handler( "org.freedesktop.login1.suspend", "org.freedesktop.login1.suspend-multiple-sessions", "org.freedesktop.login1.suspend-ignore-inhibit", - "mem", NULL, + "suspend", &error, &reply); if (r < 0) return bus_send_error_reply(connection, message, &error, r); @@ -2199,7 +2175,7 @@ static DBusHandlerResult manager_message_handler( "org.freedesktop.login1.hibernate", "org.freedesktop.login1.hibernate-multiple-sessions", "org.freedesktop.login1.hibernate-ignore-inhibit", - "disk", NULL, + "hibernate", &error, &reply); if (r < 0) return bus_send_error_reply(connection, message, &error, r); @@ -2212,7 +2188,7 @@ static DBusHandlerResult manager_message_handler( "org.freedesktop.login1.hibernate", "org.freedesktop.login1.hibernate-multiple-sessions", "org.freedesktop.login1.hibernate-ignore-inhibit", - "disk", "suspend", + "hybrid-sleep", &error, &reply); if (r < 0) return bus_send_error_reply(connection, message, &error, r); @@ -2225,7 +2201,7 @@ static DBusHandlerResult manager_message_handler( "org.freedesktop.login1.power-off", "org.freedesktop.login1.power-off-multiple-sessions", "org.freedesktop.login1.power-off-ignore-inhibit", - NULL, NULL, + NULL, &error, &reply); if (r < 0) return bus_send_error_reply(connection, message, &error, r); @@ -2236,7 +2212,7 @@ static DBusHandlerResult manager_message_handler( "org.freedesktop.login1.reboot", "org.freedesktop.login1.reboot-multiple-sessions", "org.freedesktop.login1.reboot-ignore-inhibit", - NULL, NULL, + NULL, &error, &reply); if (r < 0) return bus_send_error_reply(connection, message, &error, r); @@ -2248,7 +2224,7 @@ static DBusHandlerResult manager_message_handler( "org.freedesktop.login1.suspend", "org.freedesktop.login1.suspend-multiple-sessions", "org.freedesktop.login1.suspend-ignore-inhibit", - "mem", NULL, + "suspend", &error, &reply); if (r < 0) return bus_send_error_reply(connection, message, &error, r); @@ -2260,7 +2236,7 @@ static DBusHandlerResult manager_message_handler( "org.freedesktop.login1.hibernate", "org.freedesktop.login1.hibernate-multiple-sessions", "org.freedesktop.login1.hibernate-ignore-inhibit", - "disk", NULL, + "hibernate", &error, &reply); if (r < 0) return bus_send_error_reply(connection, message, &error, r); @@ -2272,7 +2248,7 @@ static DBusHandlerResult manager_message_handler( "org.freedesktop.login1.hibernate", "org.freedesktop.login1.hibernate-multiple-sessions", "org.freedesktop.login1.hibernate-ignore-inhibit", - "disk", "suspend", + "hybrid-sleep", &error, &reply); if (r < 0) return bus_send_error_reply(connection, message, &error, r); @@ -2402,7 +2378,6 @@ DBusHandlerResult bus_message_filter( log_error("Failed to parse JobRemoved message: %s", bus_error_message(&error)); else if (m->action_job && streq(m->action_job, path)) { - log_info("Operation finished."); /* Tell people that they now may take a lock again */ @@ -2443,7 +2418,7 @@ int manager_dispatch_delayed(Manager *manager) { assert(manager); - if (!manager->action_unit || manager->action_job) + if (manager->action_what == 0 || manager->action_job) return 0; /* Continue delay? */ @@ -2459,7 +2434,7 @@ int manager_dispatch_delayed(Manager *manager) { dbus_error_init(&error); r = execute_shutdown_or_sleep(manager, manager->action_what, manager->action_unit, &error); if (r < 0) { - log_warning("Failed to send delayed message: %s", bus_error_message_or_strerror(&error, -r)); + log_warning("Failed to send delayed message: %s", bus_error(&error, r)); dbus_error_free(&error); manager->action_unit = NULL;