diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/logind-dbus.c | 6 | ||||
-rw-r--r-- | src/logind.c | 9 | ||||
-rw-r--r-- | src/logind.h | 3 | ||||
-rw-r--r-- | src/pam-module.c | 34 |
4 files changed, 14 insertions, 38 deletions
diff --git a/src/logind-dbus.c b/src/logind-dbus.c index 69e6b189aa..93525980b7 100644 --- a/src/logind-dbus.c +++ b/src/logind-dbus.c @@ -316,7 +316,8 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess if (r < 0) return -EINVAL; - if (!dbus_message_iter_next(&iter) || + if (strv_contains(controllers, "systemd") || + !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; @@ -327,7 +328,8 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess if (r < 0) goto fail; - if (!dbus_message_iter_next(&iter) || + if (strv_contains(reset_controllers, "systemd") || + !dbus_message_iter_next(&iter) || dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_BOOLEAN) { r = -EINVAL; goto fail; diff --git a/src/logind.c b/src/logind.c index 94cb6cd80c..28ba58bf54 100644 --- a/src/logind.c +++ b/src/logind.c @@ -56,7 +56,14 @@ Manager *manager_new(void) { m->cgroups = hashmap_new(string_hash_func, string_compare_func); m->fifo_fds = hashmap_new(trivial_hash_func, trivial_compare_func); - if (!m->devices || !m->seats || !m->sessions || !m->users) { + if (!m->devices || !m->seats || !m->sessions || !m->users || !m->cgroups || !m->fifo_fds) { + manager_free(m); + return NULL; + } + + m->reset_controllers = strv_new("cpu", NULL); + m->kill_exclude_users = strv_new("root", NULL); + if (!m->reset_controllers || !m->kill_exclude_users) { manager_free(m); return NULL; } diff --git a/src/logind.h b/src/logind.h index 8da409bb93..df1364fd72 100644 --- a/src/logind.h +++ b/src/logind.h @@ -36,8 +36,9 @@ * * spawn user systemd * direct client API - * add configuration file + * add configuration file man page * verify access to SetIdleHint + * add FlushDevices bus call * * udev: * drop redundant udev_device_get_is_initialized() use as soon as libudev is fixed diff --git a/src/pam-module.c b/src/pam-module.c index e1ad8c9bfa..90da898ff8 100644 --- a/src/pam-module.c +++ b/src/pam-module.c @@ -50,8 +50,6 @@ static int parse_argv(pam_handle_t *handle, bool *debug) { unsigned i; - bool reset_controller_set = false; - bool kill_exclude_users_set = false; assert(argc >= 0); assert(argc == 0 || argv); @@ -107,8 +105,6 @@ static int parse_argv(pam_handle_t *handle, *reset_controllers = l; } - reset_controller_set = true; - } else if (startswith(argv[i], "kill-only-users=")) { if (kill_only_users) { @@ -137,8 +133,6 @@ static int parse_argv(pam_handle_t *handle, *kill_exclude_users = l; } - kill_exclude_users_set = true; - } else if (startswith(argv[i], "debug=")) { if ((k = parse_boolean(argv[i] + 6)) < 0) { pam_syslog(handle, LOG_ERR, "Failed to parse debug= argument."); @@ -159,34 +153,6 @@ static int parse_argv(pam_handle_t *handle, } } - if (!reset_controller_set && reset_controllers) { - char **l; - - if (!(l = strv_new("cpu", NULL))) { - pam_syslog(handle, LOG_ERR, "Out of memory"); - return -ENOMEM; - } - - *reset_controllers = l; - } - - if (controllers) - strv_remove(*controllers, SYSTEMD_CGROUP_CONTROLLER); - - if (reset_controllers) - strv_remove(*reset_controllers, SYSTEMD_CGROUP_CONTROLLER); - - if (!kill_exclude_users_set && kill_exclude_users) { - char **l; - - if (!(l = strv_new("root", NULL))) { - pam_syslog(handle, LOG_ERR, "Out of memory"); - return -ENOMEM; - } - - *kill_exclude_users = l; - } - return 0; } |