]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/install.h
Merge pull request #4372 from evverx/fix-synced-cgroup-hierarchy-perms
[thirdparty/systemd.git] / src / shared / install.h
CommitLineData
c2f1db8f 1#pragma once
83096483
LP
2
3/***
4 This file is part of systemd.
5
6 Copyright 2011 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
83096483
LP
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 16 Lesser General Public License for more details.
83096483 17
5430f7f2 18 You should have received a copy of the GNU Lesser General Public License
83096483
LP
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
cab6235f
LP
22typedef enum UnitFileScope UnitFileScope;
23typedef enum UnitFileState UnitFileState;
24typedef enum UnitFilePresetMode UnitFilePresetMode;
25typedef enum UnitFileChangeType UnitFileChangeType;
0ec0deaa 26typedef enum UnitFileType UnitFileType;
cab6235f
LP
27typedef struct UnitFileChange UnitFileChange;
28typedef struct UnitFileList UnitFileList;
29typedef struct UnitFileInstallInfo UnitFileInstallInfo;
30
a8fbdf54
TA
31#include <stdbool.h>
32
83096483 33#include "hashmap.h"
a8fbdf54 34#include "macro.h"
a8ffe6fb 35#include "path-lookup.h"
0ec0deaa
LP
36#include "strv.h"
37#include "unit-name.h"
83096483 38
cab6235f 39enum UnitFileScope {
83096483
LP
40 UNIT_FILE_SYSTEM,
41 UNIT_FILE_GLOBAL,
42 UNIT_FILE_USER,
43 _UNIT_FILE_SCOPE_MAX,
44 _UNIT_FILE_SCOPE_INVALID = -1
cab6235f 45};
83096483 46
cab6235f 47enum UnitFileState {
83096483
LP
48 UNIT_FILE_ENABLED,
49 UNIT_FILE_ENABLED_RUNTIME,
50 UNIT_FILE_LINKED,
51 UNIT_FILE_LINKED_RUNTIME,
52 UNIT_FILE_MASKED,
53 UNIT_FILE_MASKED_RUNTIME,
54 UNIT_FILE_STATIC,
55 UNIT_FILE_DISABLED,
aedd4012 56 UNIT_FILE_INDIRECT,
f4139308 57 UNIT_FILE_GENERATED,
e4fca67f 58 UNIT_FILE_TRANSIENT,
0ec0deaa 59 UNIT_FILE_BAD,
83096483
LP
60 _UNIT_FILE_STATE_MAX,
61 _UNIT_FILE_STATE_INVALID = -1
cab6235f 62};
83096483 63
cab6235f 64enum UnitFilePresetMode {
d309c1c3
LP
65 UNIT_FILE_PRESET_FULL,
66 UNIT_FILE_PRESET_ENABLE_ONLY,
67 UNIT_FILE_PRESET_DISABLE_ONLY,
86bbe5bf 68 _UNIT_FILE_PRESET_MAX,
d309c1c3 69 _UNIT_FILE_PRESET_INVALID = -1
cab6235f 70};
d309c1c3 71
cab6235f 72enum UnitFileChangeType {
83096483
LP
73 UNIT_FILE_SYMLINK,
74 UNIT_FILE_UNLINK,
9a0a413a 75 UNIT_FILE_IS_MASKED,
893275df 76 UNIT_FILE_IS_DANGLING,
83096483 77 _UNIT_FILE_CHANGE_TYPE_MAX,
1fa03360 78 _UNIT_FILE_CHANGE_INVALID = INT_MIN
cab6235f 79};
83096483 80
af3d8113
ZJS
81/* type can either one of the UnitFileChangeTypes listed above, or a negative error.
82 * If source is specified, it should be the contents of the path symlink.
83 * In case of an error, source should be the existing symlink contents or NULL
84 */
cab6235f 85struct UnitFileChange {
af3d8113 86 int type; /* UnitFileChangeType or bust */
83096483
LP
87 char *path;
88 char *source;
cab6235f 89};
83096483 90
795ff6d5
ZJS
91static inline bool unit_file_changes_have_modification(const UnitFileChange* changes, unsigned n_changes) {
92 unsigned i;
93 for (i = 0; i < n_changes; i++)
94 if (IN_SET(changes[i].type, UNIT_FILE_SYMLINK, UNIT_FILE_UNLINK))
95 return true;
96 return false;
97}
98
cab6235f 99struct UnitFileList {
83096483
LP
100 char *path;
101 UnitFileState state;
cab6235f 102};
83096483 103
0ec0deaa
LP
104enum UnitFileType {
105 UNIT_FILE_TYPE_REGULAR,
106 UNIT_FILE_TYPE_SYMLINK,
107 UNIT_FILE_TYPE_MASKED,
108 _UNIT_FILE_TYPE_MAX,
109 _UNIT_FILE_TYPE_INVALID = -1,
110};
111
cab6235f 112struct UnitFileInstallInfo {
7584d236
ZJS
113 char *name;
114 char *path;
115
116 char **aliases;
117 char **wanted_by;
118 char **required_by;
aedd4012 119 char **also;
d54c4993
LP
120
121 char *default_instance;
19539807 122 char *symlink_target;
0ec0deaa
LP
123
124 UnitFileType type;
19539807 125 bool auxiliary;
cab6235f 126};
7584d236 127
0ec0deaa
LP
128static inline bool UNIT_FILE_INSTALL_INFO_HAS_RULES(UnitFileInstallInfo *i) {
129 assert(i);
130
131 return !strv_isempty(i->aliases) ||
132 !strv_isempty(i->wanted_by) ||
133 !strv_isempty(i->required_by);
134}
135
136static inline bool UNIT_FILE_INSTALL_INFO_HAS_ALSO(UnitFileInstallInfo *i) {
137 assert(i);
138
139 return !strv_isempty(i->also);
140}
141
8a993b61 142bool unit_type_may_alias(UnitType type) _const_;
ce99c68a 143bool unit_type_may_template(UnitType type) _const_;
8a993b61 144
596fc263
ZJS
145int unit_file_enable(
146 UnitFileScope scope,
147 bool runtime,
148 const char *root_dir,
149 char **files,
150 bool force,
151 UnitFileChange **changes,
152 unsigned *n_changes);
153int unit_file_disable(
154 UnitFileScope scope,
155 bool runtime,
156 const char *root_dir,
157 char **files,
158 UnitFileChange **changes,
159 unsigned *n_changes);
160int unit_file_reenable(
161 UnitFileScope scope,
162 bool runtime,
163 const char *root_dir,
164 char **files,
165 bool force,
166 UnitFileChange **changes,
167 unsigned *n_changes);
168int unit_file_preset(
169 UnitFileScope scope,
170 bool runtime,
171 const char *root_dir,
172 char **files,
173 UnitFilePresetMode mode,
174 bool force,
175 UnitFileChange **changes,
176 unsigned *n_changes);
177int unit_file_preset_all(
178 UnitFileScope scope,
179 bool runtime,
180 const char *root_dir,
181 UnitFilePresetMode mode,
182 bool force,
183 UnitFileChange **changes,
184 unsigned *n_changes);
185int unit_file_mask(
186 UnitFileScope scope,
187 bool runtime,
188 const char *root_dir,
189 char **files,
190 bool force,
191 UnitFileChange **changes,
192 unsigned *n_changes);
193int unit_file_unmask(
194 UnitFileScope scope,
195 bool runtime,
196 const char *root_dir,
197 char **files,
198 UnitFileChange **changes,
199 unsigned *n_changes);
200int unit_file_link(
201 UnitFileScope scope,
202 bool runtime,
203 const char *root_dir,
204 char **files,
205 bool force,
206 UnitFileChange **changes,
207 unsigned *n_changes);
208int unit_file_revert(
209 UnitFileScope scope,
210 const char *root_dir,
211 char **files,
212 UnitFileChange **changes,
213 unsigned *n_changes);
214int unit_file_set_default(
215 UnitFileScope scope,
216 const char *root_dir,
217 const char *file,
218 bool force,
219 UnitFileChange **changes,
220 unsigned *n_changes);
221int unit_file_get_default(
222 UnitFileScope scope,
223 const char *root_dir,
224 char **name);
225int unit_file_add_dependency(
226 UnitFileScope scope,
227 bool runtime,
228 const char *root_dir,
229 char **files,
230 const char *target,
231 UnitDependency dep,
232 bool force,
233 UnitFileChange **changes,
234 unsigned *n_changes);
83096483 235
0ec0deaa 236int unit_file_get_state(UnitFileScope scope, const char *root_dir, const char *filename, UnitFileState *ret);
e735decc 237int unit_file_exists(UnitFileScope scope, const LookupPaths *paths, const char *name);
83096483 238
313fe66f 239int unit_file_get_list(UnitFileScope scope, const char *root_dir, Hashmap *h, char **states, char **patterns);
0ec0deaa 240Hashmap* unit_file_list_free(Hashmap *h);
83096483 241
57ab2eab 242int unit_file_changes_add(UnitFileChange **changes, unsigned *n_changes, UnitFileChangeType type, const char *path, const char *source);
83096483 243void unit_file_changes_free(UnitFileChange *changes, unsigned n_changes);
af3d8113 244void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, unsigned n_changes, bool quiet);
83096483 245
c2a8d7b0 246int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char *name);
83096483 247
44a6b1b6
ZJS
248const char *unit_file_state_to_string(UnitFileState s) _const_;
249UnitFileState unit_file_state_from_string(const char *s) _pure_;
1fa03360 250/* from_string conversion is unreliable because of the overlap between -EPERM and -1 for error. */
83096483 251
44a6b1b6
ZJS
252const char *unit_file_change_type_to_string(UnitFileChangeType s) _const_;
253UnitFileChangeType unit_file_change_type_from_string(const char *s) _pure_;
d309c1c3
LP
254
255const char *unit_file_preset_mode_to_string(UnitFilePresetMode m) _const_;
256UnitFilePresetMode unit_file_preset_mode_from_string(const char *s) _pure_;