mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-27 13:57:26 +03:00
logind: reload config on SIGHUP
v2: - fix setting of kill_user_processes and *_ignore_inhibited settings
This commit is contained in:
parent
c8a806f2c0
commit
a2ed707712
@ -367,6 +367,9 @@ bool manager_shall_kill(Manager *m, const char *user) {
|
||||
if (!m->kill_user_processes)
|
||||
return false;
|
||||
|
||||
if (!m->kill_exclude_users && streq(user, "root"))
|
||||
return false;
|
||||
|
||||
if (strv_contains(m->kill_exclude_users, user))
|
||||
return false;
|
||||
|
||||
|
@ -41,6 +41,35 @@
|
||||
|
||||
static void manager_free(Manager *m);
|
||||
|
||||
static void manager_reset_config(Manager *m) {
|
||||
m->n_autovts = 6;
|
||||
m->reserve_vt = 6;
|
||||
m->remove_ipc = true;
|
||||
m->inhibit_delay_max = 5 * USEC_PER_SEC;
|
||||
m->handle_power_key = HANDLE_POWEROFF;
|
||||
m->handle_suspend_key = HANDLE_SUSPEND;
|
||||
m->handle_hibernate_key = HANDLE_HIBERNATE;
|
||||
m->handle_lid_switch = HANDLE_SUSPEND;
|
||||
m->handle_lid_switch_docked = HANDLE_IGNORE;
|
||||
m->power_key_ignore_inhibited = false;
|
||||
m->suspend_key_ignore_inhibited = false;
|
||||
m->hibernate_key_ignore_inhibited = false;
|
||||
m->lid_switch_ignore_inhibited = true;
|
||||
|
||||
m->holdoff_timeout_usec = 30 * USEC_PER_SEC;
|
||||
|
||||
m->idle_action_usec = 30 * USEC_PER_MINUTE;
|
||||
m->idle_action = HANDLE_IGNORE;
|
||||
|
||||
m->runtime_dir_size = PAGE_ALIGN((size_t) (physical_memory() / 10)); /* 10% */
|
||||
m->user_tasks_max = UINT64_C(12288);
|
||||
|
||||
m->kill_user_processes = false;
|
||||
|
||||
m->kill_only_users = strv_free(m->kill_only_users);
|
||||
m->kill_exclude_users = strv_free(m->kill_exclude_users);
|
||||
}
|
||||
|
||||
static Manager *manager_new(void) {
|
||||
Manager *m;
|
||||
int r;
|
||||
@ -52,25 +81,8 @@ static Manager *manager_new(void) {
|
||||
m->console_active_fd = -1;
|
||||
m->reserve_vt_fd = -1;
|
||||
|
||||
m->n_autovts = 6;
|
||||
m->reserve_vt = 6;
|
||||
m->remove_ipc = true;
|
||||
m->inhibit_delay_max = 5 * USEC_PER_SEC;
|
||||
m->handle_power_key = HANDLE_POWEROFF;
|
||||
m->handle_suspend_key = HANDLE_SUSPEND;
|
||||
m->handle_hibernate_key = HANDLE_HIBERNATE;
|
||||
m->handle_lid_switch = HANDLE_SUSPEND;
|
||||
m->handle_lid_switch_docked = HANDLE_IGNORE;
|
||||
m->lid_switch_ignore_inhibited = true;
|
||||
m->holdoff_timeout_usec = 30 * USEC_PER_SEC;
|
||||
|
||||
m->idle_action_usec = 30 * USEC_PER_MINUTE;
|
||||
m->idle_action = HANDLE_IGNORE;
|
||||
m->idle_action_not_before_usec = now(CLOCK_MONOTONIC);
|
||||
|
||||
m->runtime_dir_size = PAGE_ALIGN((size_t) (physical_memory() / 10)); /* 10% */
|
||||
m->user_tasks_max = UINT64_C(12288);
|
||||
|
||||
m->devices = hashmap_new(&string_hash_ops);
|
||||
m->seats = hashmap_new(&string_hash_ops);
|
||||
m->sessions = hashmap_new(&string_hash_ops);
|
||||
@ -84,10 +96,6 @@ static Manager *manager_new(void) {
|
||||
if (!m->devices || !m->seats || !m->sessions || !m->users || !m->inhibitors || !m->buttons || !m->user_units || !m->session_units)
|
||||
goto fail;
|
||||
|
||||
m->kill_exclude_users = strv_new("root", NULL);
|
||||
if (!m->kill_exclude_users)
|
||||
goto fail;
|
||||
|
||||
m->udev = udev_new();
|
||||
if (!m->udev)
|
||||
goto fail;
|
||||
@ -98,6 +106,8 @@ static Manager *manager_new(void) {
|
||||
|
||||
sd_event_set_watchdog(m->event, true);
|
||||
|
||||
manager_reset_config(m);
|
||||
|
||||
return m;
|
||||
|
||||
fail:
|
||||
@ -986,6 +996,30 @@ static int manager_dispatch_idle_action(sd_event_source *s, uint64_t t, void *us
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int manager_parse_config_file(Manager *m) {
|
||||
assert(m);
|
||||
|
||||
return config_parse_many(PKGSYSCONFDIR "/logind.conf",
|
||||
CONF_PATHS_NULSTR("systemd/logind.conf.d"),
|
||||
"Login\0",
|
||||
config_item_perf_lookup, logind_gperf_lookup,
|
||||
false, m);
|
||||
}
|
||||
|
||||
static int manager_dispatch_reload_signal(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
|
||||
Manager *m = userdata;
|
||||
int r;
|
||||
|
||||
manager_reset_config(m);
|
||||
r = manager_parse_config_file(m);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to parse config file, using defaults: %m");
|
||||
else
|
||||
log_info("Config file reloaded.");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int manager_startup(Manager *m) {
|
||||
int r;
|
||||
Seat *seat;
|
||||
@ -997,6 +1031,12 @@ static int manager_startup(Manager *m) {
|
||||
|
||||
assert(m);
|
||||
|
||||
assert_se(sigprocmask_many(SIG_SETMASK, NULL, SIGHUP, -1) >= 0);
|
||||
|
||||
r = sd_event_add_signal(m->event, NULL, SIGHUP, manager_dispatch_reload_signal, m);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to register SIGHUP handler: %m");
|
||||
|
||||
/* Connect to console */
|
||||
r = manager_connect_console(m);
|
||||
if (r < 0)
|
||||
@ -1099,16 +1139,6 @@ static int manager_run(Manager *m) {
|
||||
}
|
||||
}
|
||||
|
||||
static int manager_parse_config_file(Manager *m) {
|
||||
assert(m);
|
||||
|
||||
return config_parse_many(PKGSYSCONFDIR "/logind.conf",
|
||||
CONF_PATHS_NULSTR("systemd/logind.conf.d"),
|
||||
"Login\0",
|
||||
config_item_perf_lookup, logind_gperf_lookup,
|
||||
false, m);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
Manager *m = NULL;
|
||||
int r;
|
||||
|
Loading…
x
Reference in New Issue
Block a user