]>
Commit | Line | Data |
---|---|---|
53e1b683 | 1 | /* SPDX-License-Identifier: LGPL-2.1+ */ |
83096483 LP |
2 | /*** |
3 | This file is part of systemd. | |
4 | ||
5 | Copyright 2011 Lennart Poettering | |
83096483 LP |
6 | ***/ |
7 | ||
83096483 | 8 | #include <stdio.h> |
cf0fbc49 | 9 | #include <string.h> |
83096483 | 10 | |
83096483 LP |
11 | #include "install.h" |
12 | ||
13 | static void dump_changes(UnitFileChange *c, unsigned n) { | |
14 | unsigned i; | |
15 | ||
bdf7026e | 16 | assert_se(n == 0 || c); |
83096483 LP |
17 | |
18 | for (i = 0; i < n; i++) { | |
19 | if (c[i].type == UNIT_FILE_UNLINK) | |
20 | printf("rm '%s'\n", c[i].path); | |
21 | else if (c[i].type == UNIT_FILE_SYMLINK) | |
22 | printf("ln -s '%s' '%s'\n", c[i].source, c[i].path); | |
23 | } | |
24 | } | |
25 | ||
26 | int main(int argc, char* argv[]) { | |
27 | Hashmap *h; | |
28 | UnitFileList *p; | |
29 | Iterator i; | |
30 | int r; | |
31 | const char *const files[] = { "avahi-daemon.service", NULL }; | |
32 | const char *const files2[] = { "/home/lennart/test.service", NULL }; | |
33 | UnitFileChange *changes = NULL; | |
34 | unsigned n_changes = 0; | |
0ec0deaa | 35 | UnitFileState state = 0; |
83096483 | 36 | |
596fc263 ZJS |
37 | log_set_max_level(LOG_DEBUG); |
38 | log_parse_environment(); | |
39 | ||
d5099efc | 40 | h = hashmap_new(&string_hash_ops); |
313fe66f | 41 | r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h, NULL, NULL); |
83096483 LP |
42 | assert_se(r == 0); |
43 | ||
44 | HASHMAP_FOREACH(p, h, i) { | |
0ec0deaa | 45 | UnitFileState s = _UNIT_FILE_STATE_INVALID; |
83096483 | 46 | |
0ec0deaa | 47 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(p->path), &s); |
83096483 | 48 | |
0ec0deaa LP |
49 | assert_se((r < 0 && p->state == UNIT_FILE_BAD) || |
50 | (p->state == s)); | |
83096483 LP |
51 | |
52 | fprintf(stderr, "%s (%s)\n", | |
53 | p->path, | |
54 | unit_file_state_to_string(p->state)); | |
55 | } | |
56 | ||
57 | unit_file_list_free(h); | |
58 | ||
596fc263 | 59 | log_info("/*** enable **/"); |
83096483 | 60 | |
b3796dd8 | 61 | r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); |
83096483 LP |
62 | assert_se(r >= 0); |
63 | ||
596fc263 | 64 | log_info("/*** enable2 **/"); |
83096483 | 65 | |
b3796dd8 | 66 | r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); |
83096483 LP |
67 | assert_se(r >= 0); |
68 | ||
69 | dump_changes(changes, n_changes); | |
70 | unit_file_changes_free(changes, n_changes); | |
71 | ||
0ec0deaa LP |
72 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state); |
73 | assert_se(r >= 0); | |
74 | assert_se(state == UNIT_FILE_ENABLED); | |
83096483 | 75 | |
596fc263 | 76 | log_info("/*** disable ***/"); |
83096483 LP |
77 | changes = NULL; |
78 | n_changes = 0; | |
79 | ||
b3796dd8 | 80 | r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); |
83096483 LP |
81 | assert_se(r >= 0); |
82 | ||
83 | dump_changes(changes, n_changes); | |
84 | unit_file_changes_free(changes, n_changes); | |
85 | ||
0ec0deaa LP |
86 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state); |
87 | assert_se(r >= 0); | |
88 | assert_se(state == UNIT_FILE_DISABLED); | |
83096483 | 89 | |
596fc263 | 90 | log_info("/*** mask ***/"); |
83096483 LP |
91 | changes = NULL; |
92 | n_changes = 0; | |
93 | ||
b3796dd8 | 94 | r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); |
83096483 | 95 | assert_se(r >= 0); |
596fc263 | 96 | log_info("/*** mask2 ***/"); |
b3796dd8 | 97 | r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); |
83096483 LP |
98 | assert_se(r >= 0); |
99 | ||
100 | dump_changes(changes, n_changes); | |
101 | unit_file_changes_free(changes, n_changes); | |
102 | ||
0ec0deaa LP |
103 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state); |
104 | assert_se(r >= 0); | |
105 | assert_se(state == UNIT_FILE_MASKED); | |
83096483 | 106 | |
596fc263 | 107 | log_info("/*** unmask ***/"); |
83096483 LP |
108 | changes = NULL; |
109 | n_changes = 0; | |
110 | ||
b3796dd8 | 111 | r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); |
83096483 | 112 | assert_se(r >= 0); |
596fc263 | 113 | log_info("/*** unmask2 ***/"); |
b3796dd8 | 114 | r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); |
83096483 LP |
115 | assert_se(r >= 0); |
116 | ||
117 | dump_changes(changes, n_changes); | |
118 | unit_file_changes_free(changes, n_changes); | |
119 | ||
0ec0deaa LP |
120 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state); |
121 | assert_se(r >= 0); | |
122 | assert_se(state == UNIT_FILE_DISABLED); | |
83096483 | 123 | |
596fc263 | 124 | log_info("/*** mask ***/"); |
83096483 LP |
125 | changes = NULL; |
126 | n_changes = 0; | |
127 | ||
b3796dd8 | 128 | r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); |
83096483 LP |
129 | assert_se(r >= 0); |
130 | ||
131 | dump_changes(changes, n_changes); | |
132 | unit_file_changes_free(changes, n_changes); | |
133 | ||
0ec0deaa LP |
134 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state); |
135 | assert_se(r >= 0); | |
136 | assert_se(state == UNIT_FILE_MASKED); | |
83096483 | 137 | |
596fc263 | 138 | log_info("/*** disable ***/"); |
83096483 LP |
139 | changes = NULL; |
140 | n_changes = 0; | |
141 | ||
b3796dd8 | 142 | r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); |
83096483 | 143 | assert_se(r >= 0); |
596fc263 | 144 | log_info("/*** disable2 ***/"); |
b3796dd8 | 145 | r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); |
83096483 LP |
146 | assert_se(r >= 0); |
147 | ||
148 | dump_changes(changes, n_changes); | |
149 | unit_file_changes_free(changes, n_changes); | |
150 | ||
0ec0deaa LP |
151 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state); |
152 | assert_se(r >= 0); | |
153 | assert_se(state == UNIT_FILE_MASKED); | |
83096483 | 154 | |
596fc263 | 155 | log_info("/*** umask ***/"); |
83096483 LP |
156 | changes = NULL; |
157 | n_changes = 0; | |
158 | ||
b3796dd8 | 159 | r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); |
83096483 LP |
160 | assert_se(r >= 0); |
161 | ||
162 | dump_changes(changes, n_changes); | |
163 | unit_file_changes_free(changes, n_changes); | |
164 | ||
0ec0deaa LP |
165 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state); |
166 | assert_se(r >= 0); | |
167 | assert_se(state == UNIT_FILE_DISABLED); | |
83096483 | 168 | |
596fc263 | 169 | log_info("/*** enable files2 ***/"); |
83096483 LP |
170 | changes = NULL; |
171 | n_changes = 0; | |
172 | ||
b3796dd8 | 173 | r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes); |
83096483 LP |
174 | assert_se(r >= 0); |
175 | ||
176 | dump_changes(changes, n_changes); | |
177 | unit_file_changes_free(changes, n_changes); | |
178 | ||
0ec0deaa LP |
179 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state); |
180 | assert_se(r >= 0); | |
181 | assert_se(state == UNIT_FILE_ENABLED); | |
83096483 | 182 | |
596fc263 | 183 | log_info("/*** disable files2 ***/"); |
83096483 LP |
184 | changes = NULL; |
185 | n_changes = 0; | |
186 | ||
b3796dd8 | 187 | r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes); |
83096483 LP |
188 | assert_se(r >= 0); |
189 | ||
190 | dump_changes(changes, n_changes); | |
191 | unit_file_changes_free(changes, n_changes); | |
192 | ||
0ec0deaa LP |
193 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state); |
194 | assert_se(r < 0); | |
83096483 | 195 | |
596fc263 | 196 | log_info("/*** link files2 ***/"); |
83096483 LP |
197 | changes = NULL; |
198 | n_changes = 0; | |
199 | ||
b3796dd8 | 200 | r = unit_file_link(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes); |
83096483 LP |
201 | assert_se(r >= 0); |
202 | ||
203 | dump_changes(changes, n_changes); | |
204 | unit_file_changes_free(changes, n_changes); | |
205 | ||
0ec0deaa LP |
206 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state); |
207 | assert_se(r >= 0); | |
208 | assert_se(state == UNIT_FILE_LINKED); | |
83096483 | 209 | |
596fc263 | 210 | log_info("/*** disable files2 ***/"); |
83096483 LP |
211 | changes = NULL; |
212 | n_changes = 0; | |
213 | ||
b3796dd8 | 214 | r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes); |
83096483 LP |
215 | assert_se(r >= 0); |
216 | ||
217 | dump_changes(changes, n_changes); | |
218 | unit_file_changes_free(changes, n_changes); | |
219 | ||
0ec0deaa LP |
220 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state); |
221 | assert_se(r < 0); | |
83096483 | 222 | |
596fc263 | 223 | log_info("/*** link files2 ***/"); |
83096483 LP |
224 | changes = NULL; |
225 | n_changes = 0; | |
226 | ||
b3796dd8 | 227 | r = unit_file_link(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes); |
83096483 LP |
228 | assert_se(r >= 0); |
229 | ||
230 | dump_changes(changes, n_changes); | |
231 | unit_file_changes_free(changes, n_changes); | |
232 | ||
0ec0deaa LP |
233 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state); |
234 | assert_se(r >= 0); | |
235 | assert_se(state == UNIT_FILE_LINKED); | |
83096483 | 236 | |
596fc263 | 237 | log_info("/*** reenable files2 ***/"); |
83096483 LP |
238 | changes = NULL; |
239 | n_changes = 0; | |
240 | ||
b3796dd8 | 241 | r = unit_file_reenable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes); |
83096483 LP |
242 | assert_se(r >= 0); |
243 | ||
244 | dump_changes(changes, n_changes); | |
245 | unit_file_changes_free(changes, n_changes); | |
246 | ||
0ec0deaa LP |
247 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state); |
248 | assert_se(r >= 0); | |
249 | assert_se(state == UNIT_FILE_ENABLED); | |
83096483 | 250 | |
596fc263 | 251 | log_info("/*** disable files2 ***/"); |
83096483 LP |
252 | changes = NULL; |
253 | n_changes = 0; | |
254 | ||
b3796dd8 | 255 | r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes); |
83096483 LP |
256 | assert_se(r >= 0); |
257 | ||
258 | dump_changes(changes, n_changes); | |
259 | unit_file_changes_free(changes, n_changes); | |
260 | ||
0ec0deaa LP |
261 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state); |
262 | assert_se(r < 0); | |
596fc263 | 263 | log_info("/*** preset files ***/"); |
83096483 LP |
264 | changes = NULL; |
265 | n_changes = 0; | |
266 | ||
b3796dd8 | 267 | r = unit_file_preset(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, UNIT_FILE_PRESET_FULL, &changes, &n_changes); |
83096483 LP |
268 | assert_se(r >= 0); |
269 | ||
270 | dump_changes(changes, n_changes); | |
271 | unit_file_changes_free(changes, n_changes); | |
272 | ||
0ec0deaa LP |
273 | r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files[0]), &state); |
274 | assert_se(r >= 0); | |
275 | assert_se(state == UNIT_FILE_ENABLED); | |
83096483 LP |
276 | |
277 | return 0; | |
278 | } |