/* If the actual operation is inhibited, warn and fail */
if (inhibit_what_is_valid(inhibit_operation) &&
!ignore_inhibited &&
- manager_is_inhibited(m, inhibit_operation, /* block= */ true, NULL, false, false, 0, &offending)) {
+ manager_is_inhibited(m, inhibit_operation, /* block= */ true, NULL, false, UID_INVALID, &offending)) {
_cleanup_free_ char *comm = NULL, *u = NULL;
(void) pidref_get_comm(&offending->pid, &comm);
/* If the key handling is inhibited, don't do anything */
if (inhibit_key > 0) {
- if (manager_is_inhibited(m, inhibit_key, /* block= */ true, NULL, true, false, 0, NULL)) {
+ if (manager_is_inhibited(m, inhibit_key, /* block= */ true, NULL, true, UID_INVALID, NULL)) {
log_debug("Refusing %s operation, %s is inhibited.",
handle_action_to_string(handle),
inhibit_what_to_string(inhibit_key));
assert(m);
- idle_hint = !manager_is_inhibited(m, INHIBIT_IDLE, /* block= */ true, t, false, false, 0, NULL);
+ idle_hint = !manager_is_inhibited(m, INHIBIT_IDLE, /* block= */ true, t, false, UID_INVALID, NULL);
HASHMAP_FOREACH(s, m->sessions) {
dual_timestamp k;
if (!manager->delayed_action || manager->action_job)
return 0;
- if (manager_is_inhibited(manager, manager->delayed_action->inhibit_what, /* block= */ false, NULL, false, false, 0, &offending)) {
+ if (manager_is_inhibited(manager, manager->delayed_action->inhibit_what, /* block= */ false, NULL, false, UID_INVALID, &offending)) {
_cleanup_free_ char *comm = NULL, *u = NULL;
if (!timeout)
delayed =
m->inhibit_delay_max > 0 &&
- manager_is_inhibited(m, a->inhibit_what, /* block= */ false, NULL, false, false, 0, NULL);
+ manager_is_inhibited(m, a->inhibit_what, /* block= */ false, NULL, false, UID_INVALID, NULL);
if (delayed)
/* Shutdown is delayed, keep in mind what we
return r;
multiple_sessions = r > 0;
- blocked = manager_is_inhibited(m, a->inhibit_what, /* block= */ true, NULL, false, true, uid, &offending);
+ blocked = manager_is_inhibited(m, a->inhibit_what, /* block= */ true, NULL, false, uid, &offending);
interactive = flags & SD_LOGIND_INTERACTIVE;
if (multiple_sessions) {
return r;
multiple_sessions = r > 0;
- blocked = manager_is_inhibited(m, a->inhibit_what, /* block= */ true, NULL, false, true, uid, NULL);
+ blocked = manager_is_inhibited(m, a->inhibit_what, /* block= */ true, NULL, false, uid, NULL);
if (check_unit_state && a->target) {
_cleanup_free_ char *load_state = NULL;
bool block,
dual_timestamp *since,
bool ignore_inactive,
- bool ignore_uid,
- uid_t uid,
+ uid_t uid_to_ignore,
Inhibitor **ret_offending) {
Inhibitor *i, *offending = NULL;
if (ignore_inactive && pidref_is_active_session(m, &i->pid) <= 0)
continue;
- if (i->mode == INHIBIT_BLOCK_WEAK && ignore_uid && i->uid == uid)
+ if (i->mode == INHIBIT_BLOCK_WEAK &&
+ uid_is_valid(uid_to_ignore) &&
+ uid_to_ignore == i->uid)
continue;
- if (!inhibited ||
- i->since.monotonic < ts.monotonic)
+ if (!inhibited || i->since.monotonic < ts.monotonic)
ts = i->since;
inhibited = true;
bool inhibitor_is_orphan(Inhibitor *i);
InhibitWhat manager_inhibit_what(Manager *m, InhibitMode mode);
-bool manager_is_inhibited(Manager *m, InhibitWhat w, bool block, dual_timestamp *since, bool ignore_inactive, bool ignore_uid, uid_t uid, Inhibitor **offending);
+bool manager_is_inhibited(
+ Manager *m,
+ InhibitWhat w,
+ bool block,
+ dual_timestamp *since,
+ bool ignore_inactive,
+ uid_t uid_to_ignore,
+ Inhibitor **ret_offending);
static inline bool inhibit_what_is_valid(InhibitWhat w) {
return w > 0 && w < _INHIBIT_WHAT_MAX;