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