-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <fcntl.h>
#include <sys/ioctl.h>
#include "parse-util.h"
#include "path-util.h"
#include "process-util.h"
+#include "stdio-util.h"
#include "strv.h"
#include "terminal-util.h"
#include "udev-util.h"
m->user_stop_delay = 10 * USEC_PER_SEC;
m->handle_power_key = HANDLE_POWEROFF;
+ m->handle_power_key_long_press = HANDLE_IGNORE;
+ m->handle_reboot_key = HANDLE_REBOOT;
+ m->handle_reboot_key_long_press = HANDLE_POWEROFF;
m->handle_suspend_key = HANDLE_SUSPEND;
+ m->handle_suspend_key_long_press = HANDLE_HIBERNATE;
m->handle_hibernate_key = HANDLE_HIBERNATE;
+ m->handle_hibernate_key_long_press = HANDLE_IGNORE;
+
m->handle_lid_switch = HANDLE_SUSPEND;
m->handle_lid_switch_ep = _HANDLE_ACTION_INVALID;
m->handle_lid_switch_docked = HANDLE_IGNORE;
- m->handle_reboot_key = HANDLE_REBOOT;
+
m->power_key_ignore_inhibited = false;
m->suspend_key_ignore_inhibited = false;
m->hibernate_key_ignore_inhibited = false;
m->kill_only_users = strv_free(m->kill_only_users);
m->kill_exclude_users = strv_free(m->kill_exclude_users);
+
+ m->stop_idle_session_usec = USEC_INFINITY;
}
int manager_parse_config_file(Manager *m) {
assert(m);
assert(name);
- r = userdb_by_name(name, USERDB_AVOID_SHADOW, &ur);
+ r = userdb_by_name(name, USERDB_SUPPRESS_SHADOW, &ur);
if (r < 0)
return r;
assert(m);
assert(uid_is_valid(uid));
- r = userdb_by_uid(uid, USERDB_AVOID_SHADOW, &ur);
+ r = userdb_by_uid(uid, USERDB_SUPPRESS_SHADOW, &ur);
if (r < 0)
return r;
assert(m);
- if (device_for_action(d, DEVICE_ACTION_REMOVE) ||
+ if (device_for_action(d, SD_DEVICE_REMOVE) ||
sd_device_has_current_tag(d, "seat") <= 0) {
const char *syspath;
if (r < 0)
return r;
- if (device_for_action(d, DEVICE_ACTION_REMOVE) ||
+ if (device_for_action(d, SD_DEVICE_REMOVE) ||
sd_device_has_current_tag(d, "power-switch") <= 0) {
b = hashmap_get(m->buttons, sysname);
void *data,
void *userdata) {
- unsigned *n = data;
+ unsigned *n = ASSERT_PTR(data);
unsigned o;
int r;
assert(filename);
assert(lvalue);
assert(rvalue);
- assert(data);
r = safe_atou(rvalue, &o);
if (r < 0) {
static int vt_is_busy(unsigned vtnr) {
struct vt_stat vt_stat;
int r;
- _cleanup_close_ int fd;
+ _cleanup_close_ int fd = -1;
assert(vtnr >= 1);
return -EBUSY;
}
- snprintf(name, sizeof(name), "autovt@tty%u.service", vtnr);
+ xsprintf(name, "autovt@tty%u.service", vtnr);
r = sd_bus_call_method(
m->bus,
"org.freedesktop.systemd1",
if (m->handle_power_key != HANDLE_IGNORE)
return false;
+ if (m->handle_power_key_long_press != HANDLE_IGNORE)
+ return false;
if (m->handle_suspend_key != HANDLE_IGNORE)
return false;
+ if (m->handle_suspend_key_long_press != HANDLE_IGNORE)
+ return false;
if (m->handle_hibernate_key != HANDLE_IGNORE)
return false;
+ if (m->handle_hibernate_key_long_press != HANDLE_IGNORE)
+ return false;
+ if (m->handle_reboot_key != HANDLE_IGNORE)
+ return false;
+ if (m->handle_reboot_key_long_press != HANDLE_IGNORE)
+ return false;
if (m->handle_lid_switch != HANDLE_IGNORE)
return false;
if (!IN_SET(m->handle_lid_switch_ep, _HANDLE_ACTION_INVALID, HANDLE_IGNORE))
return false;
if (m->handle_lid_switch_docked != HANDLE_IGNORE)
return false;
- if (m->handle_reboot_key != HANDLE_IGNORE)
- return false;
return true;
}
int manager_read_utmp(Manager *m) {
#if ENABLE_UTMP
int r;
- _cleanup_(utxent_cleanup) bool utmpx = false;
+ _unused_ _cleanup_(utxent_cleanup) bool utmpx = false;
assert(m);
errno = 0;
u = getutxent();
if (!u) {
- if (errno != 0)
+ if (errno == ENOENT)
+ log_debug_errno(errno, _PATH_UTMPX " does not exist, ignoring.");
+ else if (errno != 0)
log_warning_errno(errno, "Failed to read " _PATH_UTMPX ", ignoring: %m");
return 0;
}
#if ENABLE_UTMP
static int manager_dispatch_utmp(sd_event_source *s, const struct inotify_event *event, void *userdata) {
- Manager *m = userdata;
-
- assert(m);
+ Manager *m = ASSERT_PTR(userdata);
/* If there's indication the file itself might have been removed or became otherwise unavailable, then let's
* reestablish the watch on whatever there's now. */