]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/login/logind-inhibit.h
polkit: simplify bus_verify_polkit_async() + drop auth-by-cap dbus feature
[thirdparty/systemd.git] / src / login / logind-inhibit.h
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
05d3a176 2#pragma once
f8e2fb7b 3
89bad70f
LP
4#include "pidref.h"
5
f8e2fb7b
LP
6typedef struct Inhibitor Inhibitor;
7
f8e2fb7b 8typedef enum InhibitWhat {
be0b7a1a
LP
9 INHIBIT_SHUTDOWN = 1 << 0,
10 INHIBIT_SLEEP = 1 << 1,
11 INHIBIT_IDLE = 1 << 2,
12 INHIBIT_HANDLE_POWER_KEY = 1 << 3,
13 INHIBIT_HANDLE_SUSPEND_KEY = 1 << 4,
14 INHIBIT_HANDLE_HIBERNATE_KEY = 1 << 5,
15 INHIBIT_HANDLE_LID_SWITCH = 1 << 6,
adbb2b6a
RM
16 INHIBIT_HANDLE_REBOOT_KEY = 1 << 7,
17 _INHIBIT_WHAT_MAX = 1 << 8,
2d93c20e 18 _INHIBIT_WHAT_INVALID = -EINVAL,
f8e2fb7b
LP
19} InhibitWhat;
20
eecd1362
LP
21typedef enum InhibitMode {
22 INHIBIT_BLOCK,
23 INHIBIT_DELAY,
24 _INHIBIT_MODE_MAX,
2d93c20e 25 _INHIBIT_MODE_INVALID = -EINVAL,
eecd1362
LP
26} InhibitMode;
27
d889a206 28#include "logind.h"
d889a206 29
f8e2fb7b
LP
30struct Inhibitor {
31 Manager *manager;
32
cc377381
LP
33 sd_event_source *event_source;
34
9f18eda8 35 const char *id;
f8e2fb7b
LP
36 char *state_file;
37
38 bool started;
39
40 InhibitWhat what;
41 char *who;
42 char *why;
eecd1362 43 InhibitMode mode;
f8e2fb7b 44
89bad70f 45 PidRef pid;
f8e2fb7b
LP
46 uid_t uid;
47
c7b5eb98
LP
48 dual_timestamp since;
49
f8e2fb7b
LP
50 char *fifo_path;
51 int fifo_fd;
52};
53
81280b2a
LP
54int inhibitor_new(Inhibitor **ret, Manager *m, const char* id);
55Inhibitor* inhibitor_free(Inhibitor *i);
56
57DEFINE_TRIVIAL_CLEANUP_FUNC(Inhibitor*, inhibitor_free);
f8e2fb7b 58
f8e2fb7b
LP
59int inhibitor_load(Inhibitor *i);
60
61int inhibitor_start(Inhibitor *i);
290320ef 62void inhibitor_stop(Inhibitor *i);
f8e2fb7b
LP
63
64int inhibitor_create_fifo(Inhibitor *i);
f8e2fb7b 65
11eae36d
LP
66bool inhibitor_is_orphan(Inhibitor *i);
67
eecd1362 68InhibitWhat manager_inhibit_what(Manager *m, InhibitMode mm);
85a428c6 69bool manager_is_inhibited(Manager *m, InhibitWhat w, InhibitMode mm, dual_timestamp *since, bool ignore_inactive, bool ignore_uid, uid_t uid, Inhibitor **offending);
f8e2fb7b 70
febe8131
MY
71static inline bool inhibit_what_is_valid(InhibitWhat w) {
72 return w > 0 && w < _INHIBIT_WHAT_MAX;
73}
74
f8e2fb7b 75const char *inhibit_what_to_string(InhibitWhat k);
46ed9f4c 76int inhibit_what_from_string(const char *s);
f8e2fb7b 77
eecd1362
LP
78const char *inhibit_mode_to_string(InhibitMode k);
79InhibitMode inhibit_mode_from_string(const char *s);