Bug Summary

File:build-scan/../src/shared/conf-parser.c
Warning:line 1081, column 49
Potential leak of memory pointed to by 'a'

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name conf-parser.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=all -relaxed-aliasing -menable-no-infs -menable-no-nans -menable-unsafe-fp-math -fno-signed-zeros -mreassociate -freciprocal-math -fdenormal-fp-math=preserve-sign,preserve-sign -ffp-contract=fast -fno-rounding-math -ffast-math -ffinite-math-only -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/12.0.0 -include config.h -I src/shared/libsystemd-shared-239.a.p -I src/shared -I ../src/shared -I src/basic -I ../src/basic -I src/systemd -I ../src/systemd -I src/journal -I ../src/journal -I src/journal-remote -I ../src/journal-remote -I src/nspawn -I ../src/nspawn -I src/resolve -I ../src/resolve -I src/timesync -I ../src/timesync -I ../src/time-wait-sync -I src/login -I ../src/login -I src/udev -I ../src/udev -I src/libudev -I ../src/libudev -I src/core -I ../src/core -I ../src/libsystemd/sd-bus -I ../src/libsystemd/sd-device -I ../src/libsystemd/sd-hwdb -I ../src/libsystemd/sd-id128 -I ../src/libsystemd/sd-netlink -I ../src/libsystemd/sd-network -I src/libsystemd-network -I ../src/libsystemd-network -I . -I .. -I /usr/include/blkid -D _FILE_OFFSET_BITS=64 -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/12.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wwrite-strings -Wno-unused-parameter -Wno-missing-field-initializers -Wno-unused-result -Wno-format-signedness -Wno-error=nonnull -std=gnu99 -fconst-strings -fdebug-compilation-dir /home/mrc0mmand/repos/@redhat-plumbers/systemd-rhel8/build-scan -ferror-limit 19 -fvisibility default -stack-protector 2 -fgnuc-version=4.2.1 -fcolor-diagnostics -analyzer-output=html -faddrsig -o /tmp/scan-build-2021-07-16-221226-1465241-1 -x c ../src/shared/conf-parser.c
1/* SPDX-License-Identifier: LGPL-2.1+ */
2
3#include <errno(*__errno_location ()).h>
4#include <limits.h>
5#include <stdint.h>
6#include <stdio.h>
7#include <stdlib.h>
8#include <string.h>
9#include <sys/types.h>
10
11#include "alloc-util.h"
12#include "conf-files.h"
13#include "conf-parser.h"
14#include "def.h"
15#include "extract-word.h"
16#include "fd-util.h"
17#include "fileio.h"
18#include "fs-util.h"
19#include "log.h"
20#include "macro.h"
21#include "parse-util.h"
22#include "path-util.h"
23#include "process-util.h"
24#include "signal-util.h"
25#include "socket-util.h"
26#include "string-util.h"
27#include "strv.h"
28#include "syslog-util.h"
29#include "time-util.h"
30#include "utf8.h"
31#include "rlimit-util.h"
32
33int config_item_table_lookup(
34 const void *table,
35 const char *section,
36 const char *lvalue,
37 ConfigParserCallback *func,
38 int *ltype,
39 void **data,
40 void *userdata) {
41
42 const ConfigTableItem *t;
43
44 assert(table)do { if ((__builtin_expect(!!(!(table)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("table"), "../src/shared/conf-parser.c",
44, __PRETTY_FUNCTION__); } while (0)
;
45 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 45, __PRETTY_FUNCTION__); } while (0)
;
46 assert(func)do { if ((__builtin_expect(!!(!(func)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("func"), "../src/shared/conf-parser.c", 46
, __PRETTY_FUNCTION__); } while (0)
;
47 assert(ltype)do { if ((__builtin_expect(!!(!(ltype)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("ltype"), "../src/shared/conf-parser.c",
47, __PRETTY_FUNCTION__); } while (0)
;
48 assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 48
, __PRETTY_FUNCTION__); } while (0)
;
49
50 for (t = table; t->lvalue; t++) {
51
52 if (!streq(lvalue, t->lvalue)(strcmp((lvalue),(t->lvalue)) == 0))
53 continue;
54
55 if (!streq_ptr(section, t->section))
56 continue;
57
58 *func = t->parse;
59 *ltype = t->ltype;
60 *data = t->data;
61 return 1;
62 }
63
64 return 0;
65}
66
67int config_item_perf_lookup(
68 const void *table,
69 const char *section,
70 const char *lvalue,
71 ConfigParserCallback *func,
72 int *ltype,
73 void **data,
74 void *userdata) {
75
76 ConfigPerfItemLookup lookup = (ConfigPerfItemLookup) table;
77 const ConfigPerfItem *p;
78
79 assert(table)do { if ((__builtin_expect(!!(!(table)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("table"), "../src/shared/conf-parser.c",
79, __PRETTY_FUNCTION__); } while (0)
;
80 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 80, __PRETTY_FUNCTION__); } while (0)
;
81 assert(func)do { if ((__builtin_expect(!!(!(func)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("func"), "../src/shared/conf-parser.c", 81
, __PRETTY_FUNCTION__); } while (0)
;
82 assert(ltype)do { if ((__builtin_expect(!!(!(ltype)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("ltype"), "../src/shared/conf-parser.c",
82, __PRETTY_FUNCTION__); } while (0)
;
83 assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 83
, __PRETTY_FUNCTION__); } while (0)
;
84
85 if (!section)
86 p = lookup(lvalue, strlen(lvalue));
87 else {
88 char *key;
89
90 key = strjoin(section, ".", lvalue)strjoin_real((section), ".", lvalue, ((void*)0));
91 if (!key)
92 return -ENOMEM12;
93
94 p = lookup(key, strlen(key));
95 free(key);
96 }
97
98 if (!p)
99 return 0;
100
101 *func = p->parse;
102 *ltype = p->ltype;
103 *data = (uint8_t*) userdata + p->offset;
104 return 1;
105}
106
107/* Run the user supplied parser for an assignment */
108static int next_assignment(
109 const char *unit,
110 const char *filename,
111 unsigned line,
112 ConfigItemLookup lookup,
113 const void *table,
114 const char *section,
115 unsigned section_line,
116 const char *lvalue,
117 const char *rvalue,
118 ConfigParseFlags flags,
119 void *userdata) {
120
121 ConfigParserCallback func = NULL((void*)0);
122 int ltype = 0;
123 void *data = NULL((void*)0);
124 int r;
125
126 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 126, __PRETTY_FUNCTION__); } while (0)
;
127 assert(line > 0)do { if ((__builtin_expect(!!(!(line > 0)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("line > 0"), "../src/shared/conf-parser.c"
, 127, __PRETTY_FUNCTION__); } while (0)
;
128 assert(lookup)do { if ((__builtin_expect(!!(!(lookup)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lookup"), "../src/shared/conf-parser.c"
, 128, __PRETTY_FUNCTION__); } while (0)
;
129 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 129, __PRETTY_FUNCTION__); } while (0)
;
130 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 130, __PRETTY_FUNCTION__); } while (0)
;
131
132 r = lookup(table, section, lvalue, &func, &ltype, &data, userdata);
133 if (r < 0)
134 return r;
135
136 if (r > 0) {
137 if (func)
138 return func(unit, filename, line, section, section_line,
139 lvalue, ltype, rvalue, data, userdata);
140
141 return 0;
142 }
143
144 /* Warn about unknown non-extension fields. */
145 if (!(flags & CONFIG_PARSE_RELAXED) && !startswith(lvalue, "X-"))
146 log_syntax(unit, LOG_WARNING, filename, line, 0, "Unknown lvalue '%s' in section '%s'", lvalue, section)({ int _level = (4), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 146, __func__
, "Unknown lvalue '%s' in section '%s'", lvalue, section) : -
abs(_e); })
;
147
148 return 0;
149}
150
151/* Parse a single logical line */
152static int parse_line(
153 const char* unit,
154 const char *filename,
155 unsigned line,
156 const char *sections,
157 ConfigItemLookup lookup,
158 const void *table,
159 ConfigParseFlags flags,
160 char **section,
161 unsigned *section_line,
162 bool_Bool *section_ignored,
163 char *l,
164 void *userdata) {
165
166 char *e, *include;
167
168 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 168, __PRETTY_FUNCTION__); } while (0)
;
169 assert(line > 0)do { if ((__builtin_expect(!!(!(line > 0)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("line > 0"), "../src/shared/conf-parser.c"
, 169, __PRETTY_FUNCTION__); } while (0)
;
170 assert(lookup)do { if ((__builtin_expect(!!(!(lookup)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lookup"), "../src/shared/conf-parser.c"
, 170, __PRETTY_FUNCTION__); } while (0)
;
171 assert(l)do { if ((__builtin_expect(!!(!(l)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("l"), "../src/shared/conf-parser.c", 171
, __PRETTY_FUNCTION__); } while (0)
;
172
173 l = strstrip(l);
174 if (!*l)
175 return 0;
176
177 if (strchr(COMMENTS"#;" "\n", *l))
178 return 0;
179
180 include = first_word(l, ".include");
181 if (include) {
182 _cleanup_free___attribute__((cleanup(freep))) char *fn = NULL((void*)0);
183
184 /* .includes are a bad idea, we only support them here
185 * for historical reasons. They create cyclic include
186 * problems and make it difficult to detect
187 * configuration file changes with an easy
188 * stat(). Better approaches, such as .d/ drop-in
189 * snippets exist.
190 *
191 * Support for them should be eventually removed. */
192
193 if (!(flags & CONFIG_PARSE_ALLOW_INCLUDE)) {
194 log_syntax(unit, LOG_ERR, filename, line, 0, ".include not allowed here. Ignoring.")({ int _level = (3), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 194, __func__
, ".include not allowed here. Ignoring.") : -abs(_e); })
;
195 return 0;
196 }
197
198 log_syntax(unit, LOG_WARNING, filename, line, 0,({ int _level = (4), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 200, __func__
, ".include directives are deprecated, and support for them will be removed in a future version of systemd. "
"Please use drop-in files instead.") : -abs(_e); })
199 ".include directives are deprecated, and support for them will be removed in a future version of systemd. "({ int _level = (4), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 200, __func__
, ".include directives are deprecated, and support for them will be removed in a future version of systemd. "
"Please use drop-in files instead.") : -abs(_e); })
200 "Please use drop-in files instead.")({ int _level = (4), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 200, __func__
, ".include directives are deprecated, and support for them will be removed in a future version of systemd. "
"Please use drop-in files instead.") : -abs(_e); })
;
201
202 fn = file_in_same_dir(filename, strstrip(include));
203 if (!fn)
204 return -ENOMEM12;
205
206 return config_parse(unit, fn, NULL((void*)0), sections, lookup, table, flags, userdata);
207 }
208
209 if (!utf8_is_valid(l))
210 return log_syntax_invalid_utf8(unit, LOG_WARNING, filename, line, l)({ int _level = (4); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_invalid_utf8_internal
(unit, _level, filename, line, "../src/shared/conf-parser.c",
210, __func__, l) : -22; })
;
211
212 if (*l == '[') {
213 size_t k;
214 char *n;
215
216 k = strlen(l);
217 assert(k > 0)do { if ((__builtin_expect(!!(!(k > 0)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("k > 0"), "../src/shared/conf-parser.c"
, 217, __PRETTY_FUNCTION__); } while (0)
;
218
219 if (l[k-1] != ']') {
220 log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid section header '%s'", l)({ int _level = (3), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 220, __func__
, "Invalid section header '%s'", l) : -abs(_e); })
;
221 return -EBADMSG74;
222 }
223
224 n = strndup(l+1, k-2);
225 if (!n)
226 return -ENOMEM12;
227
228 if (sections && !nulstr_contains(sections, n)) {
229
230 if (!(flags & CONFIG_PARSE_RELAXED) && !startswith(n, "X-"))
231 log_syntax(unit, LOG_WARNING, filename, line, 0, "Unknown section '%s'. Ignoring.", n)({ int _level = (4), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 231, __func__
, "Unknown section '%s'. Ignoring.", n) : -abs(_e); })
;
232
233 free(n);
234 *section = mfree(*section);
235 *section_line = 0;
236 *section_ignored = true1;
237 } else {
238 free_and_replace(*section, n)({ free(*section); (*section) = (n); (n) = ((void*)0); 0; });
239 *section_line = line;
240 *section_ignored = false0;
241 }
242
243 return 0;
244 }
245
246 if (sections && !*section) {
247
248 if (!(flags & CONFIG_PARSE_RELAXED) && !*section_ignored)
249 log_syntax(unit, LOG_WARNING, filename, line, 0, "Assignment outside of section. Ignoring.")({ int _level = (4), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 249, __func__
, "Assignment outside of section. Ignoring.") : -abs(_e); })
;
250
251 return 0;
252 }
253
254 e = strchr(l, '=');
255 if (!e) {
256 log_syntax(unit, LOG_WARNING, filename, line, 0, "Missing '='.")({ int _level = (4), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 256, __func__
, "Missing '='.") : -abs(_e); })
;
257 return -EINVAL22;
258 }
259
260 *e = 0;
261 e++;
262
263 return next_assignment(unit,
264 filename,
265 line,
266 lookup,
267 table,
268 *section,
269 *section_line,
270 strstrip(l),
271 strstrip(e),
272 flags,
273 userdata);
274}
275
276/* Go through the file and parse each line */
277int config_parse(const char *unit,
278 const char *filename,
279 FILE *f,
280 const char *sections,
281 ConfigItemLookup lookup,
282 const void *table,
283 ConfigParseFlags flags,
284 void *userdata) {
285
286 _cleanup_free___attribute__((cleanup(freep))) char *section = NULL((void*)0), *continuation = NULL((void*)0);
287 _cleanup_fclose___attribute__((cleanup(fclosep))) FILE *ours = NULL((void*)0);
288 unsigned line = 0, section_line = 0;
289 bool_Bool section_ignored = false0;
290 int r;
291
292 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 292, __PRETTY_FUNCTION__); } while (0)
;
293 assert(lookup)do { if ((__builtin_expect(!!(!(lookup)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lookup"), "../src/shared/conf-parser.c"
, 293, __PRETTY_FUNCTION__); } while (0)
;
294
295 if (!f) {
296 f = ours = fopen(filename, "re");
297 if (!f) {
298 /* Only log on request, except for ENOENT,
299 * since we return 0 to the caller. */
300 if ((flags & CONFIG_PARSE_WARN) || errno(*__errno_location ()) == ENOENT2)
301 log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_ERR, errno,({ int _level = (((*__errno_location ()) == 2 ? 7 : 3)), _e =
(((*__errno_location ()))), _realm = (LOG_REALM_SYSTEMD); (log_get_max_level_realm
(_realm) >= ((_level) & 0x07)) ? log_internal_realm(((
_realm) << 10 | (_level)), _e, "../src/shared/conf-parser.c"
, 302, __func__, "Failed to open configuration file '%s': %m"
, filename) : -abs(_e); })
302 "Failed to open configuration file '%s': %m", filename)({ int _level = (((*__errno_location ()) == 2 ? 7 : 3)), _e =
(((*__errno_location ()))), _realm = (LOG_REALM_SYSTEMD); (log_get_max_level_realm
(_realm) >= ((_level) & 0x07)) ? log_internal_realm(((
_realm) << 10 | (_level)), _e, "../src/shared/conf-parser.c"
, 302, __func__, "Failed to open configuration file '%s': %m"
, filename) : -abs(_e); })
;
303 return errno(*__errno_location ()) == ENOENT2 ? 0 : -errno(*__errno_location ());
304 }
305 }
306
307 fd_warn_permissions(filename, fileno(f));
308
309 for (;;) {
310 _cleanup_free___attribute__((cleanup(freep))) char *buf = NULL((void*)0);
311 bool_Bool escaped = false0;
312 char *l, *p, *e;
313
314 r = read_line(f, LONG_LINE_MAX(1U*1024U*1024U), &buf);
315 if (r == 0)
316 break;
317 if (r == -ENOBUFS105) {
318 if (flags & CONFIG_PARSE_WARN)
319 log_error_errno(r, "%s:%u: Line too long", filename, line)({ int _level = ((3)), _e = ((r)), _realm = (LOG_REALM_SYSTEMD
); (log_get_max_level_realm(_realm) >= ((_level) & 0x07
)) ? log_internal_realm(((_realm) << 10 | (_level)), _e
, "../src/shared/conf-parser.c", 319, __func__, "%s:%u: Line too long"
, filename, line) : -abs(_e); })
;
320
321 return r;
322 }
323 if (r < 0) {
324 if (CONFIG_PARSE_WARN)
325 log_error_errno(r, "%s:%u: Error while reading configuration file: %m", filename, line)({ int _level = ((3)), _e = ((r)), _realm = (LOG_REALM_SYSTEMD
); (log_get_max_level_realm(_realm) >= ((_level) & 0x07
)) ? log_internal_realm(((_realm) << 10 | (_level)), _e
, "../src/shared/conf-parser.c", 325, __func__, "%s:%u: Error while reading configuration file: %m"
, filename, line) : -abs(_e); })
;
326
327 return r;
328 }
329
330 l = buf;
331 if (!(flags & CONFIG_PARSE_REFUSE_BOM)) {
332 char *q;
333
334 q = startswith(buf, UTF8_BYTE_ORDER_MARK"\xef\xbb\xbf");
335 if (q) {
336 l = q;
337 flags |= CONFIG_PARSE_REFUSE_BOM;
338 }
339 }
340
341 if (continuation) {
342 if (strlen(continuation) + strlen(l) > LONG_LINE_MAX(1U*1024U*1024U)) {
343 if (flags & CONFIG_PARSE_WARN)
344 log_error("%s:%u: Continuation line too long", filename, line)({ int _level = (((3))), _e = ((0)), _realm = (LOG_REALM_SYSTEMD
); (log_get_max_level_realm(_realm) >= ((_level) & 0x07
)) ? log_internal_realm(((_realm) << 10 | (_level)), _e
, "../src/shared/conf-parser.c", 344, __func__, "%s:%u: Continuation line too long"
, filename, line) : -abs(_e); })
;
345 return -ENOBUFS105;
346 }
347
348 if (!strextend(&continuation, l, NULL)strextend_with_separator(&continuation, ((void*)0), l, ((
void*)0))
) {
349 if (flags & CONFIG_PARSE_WARN)
350 log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 350, __func__)
;
351 return -ENOMEM12;
352 }
353
354 p = continuation;
355 } else
356 p = l;
357
358 for (e = p; *e; e++) {
359 if (escaped)
360 escaped = false0;
361 else if (*e == '\\')
362 escaped = true1;
363 }
364
365 if (escaped) {
366 *(e-1) = ' ';
367
368 if (!continuation) {
369 continuation = strdup(l);
370 if (!continuation) {
371 if (flags & CONFIG_PARSE_WARN)
372 log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 372, __func__)
;
373 return -ENOMEM12;
374 }
375 }
376
377 continue;
378 }
379
380 r = parse_line(unit,
381 filename,
382 ++line,
383 sections,
384 lookup,
385 table,
386 flags,
387 &section,
388 &section_line,
389 &section_ignored,
390 p,
391 userdata);
392 if (r < 0) {
393 if (flags & CONFIG_PARSE_WARN)
394 log_warning_errno(r, "%s:%u: Failed to parse file: %m", filename, line)({ int _level = ((4)), _e = ((r)), _realm = (LOG_REALM_SYSTEMD
); (log_get_max_level_realm(_realm) >= ((_level) & 0x07
)) ? log_internal_realm(((_realm) << 10 | (_level)), _e
, "../src/shared/conf-parser.c", 394, __func__, "%s:%u: Failed to parse file: %m"
, filename, line) : -abs(_e); })
;
395 return r;
396 }
397
398 continuation = mfree(continuation);
399 }
400
401 if (continuation) {
402 r = parse_line(unit,
403 filename,
404 ++line,
405 sections,
406 lookup,
407 table,
408 flags,
409 &section,
410 &section_line,
411 &section_ignored,
412 continuation,
413 userdata);
414 if (r < 0) {
415 if (flags & CONFIG_PARSE_WARN)
416 log_warning_errno(r, "%s:%u: Failed to parse file: %m", filename, line)({ int _level = ((4)), _e = ((r)), _realm = (LOG_REALM_SYSTEMD
); (log_get_max_level_realm(_realm) >= ((_level) & 0x07
)) ? log_internal_realm(((_realm) << 10 | (_level)), _e
, "../src/shared/conf-parser.c", 416, __func__, "%s:%u: Failed to parse file: %m"
, filename, line) : -abs(_e); })
;
417 return r;
418 }
419 }
420
421 return 0;
422}
423
424static int config_parse_many_files(
425 const char *conf_file,
426 char **files,
427 const char *sections,
428 ConfigItemLookup lookup,
429 const void *table,
430 ConfigParseFlags flags,
431 void *userdata) {
432
433 char **fn;
434 int r;
435
436 if (conf_file) {
437 r = config_parse(NULL((void*)0), conf_file, NULL((void*)0), sections, lookup, table, flags, userdata);
438 if (r < 0)
439 return r;
440 }
441
442 STRV_FOREACH(fn, files)for ((fn) = (files); (fn) && *(fn); (fn)++) {
443 r = config_parse(NULL((void*)0), *fn, NULL((void*)0), sections, lookup, table, flags, userdata);
444 if (r < 0)
445 return r;
446 }
447
448 return 0;
449}
450
451/* Parse each config file in the directories specified as nulstr. */
452int config_parse_many_nulstr(
453 const char *conf_file,
454 const char *conf_file_dirs,
455 const char *sections,
456 ConfigItemLookup lookup,
457 const void *table,
458 ConfigParseFlags flags,
459 void *userdata) {
460
461 _cleanup_strv_free___attribute__((cleanup(strv_freep))) char **files = NULL((void*)0);
462 int r;
463
464 r = conf_files_list_nulstr(&files, ".conf", NULL((void*)0), 0, conf_file_dirs);
465 if (r < 0)
466 return r;
467
468 return config_parse_many_files(conf_file, files, sections, lookup, table, flags, userdata);
469}
470
471/* Parse each config file in the directories specified as strv. */
472int config_parse_many(
473 const char *conf_file,
474 const char* const* conf_file_dirs,
475 const char *dropin_dirname,
476 const char *sections,
477 ConfigItemLookup lookup,
478 const void *table,
479 ConfigParseFlags flags,
480 void *userdata) {
481
482 _cleanup_strv_free___attribute__((cleanup(strv_freep))) char **dropin_dirs = NULL((void*)0);
483 _cleanup_strv_free___attribute__((cleanup(strv_freep))) char **files = NULL((void*)0);
484 const char *suffix;
485 int r;
486
487 suffix = strjoina("/", dropin_dirname)({ const char *_appendees_[] = { "/", dropin_dirname }; char *
_d_, *_p_; size_t _len_ = 0; size_t _i_; for (_i_ = 0; _i_ <
__extension__ (__builtin_choose_expr( !__builtin_types_compatible_p
(typeof(_appendees_), typeof(&*(_appendees_))), sizeof(_appendees_
)/sizeof((_appendees_)[0]), ((void)0))) && _appendees_
[_i_]; _i_++) _len_ += strlen(_appendees_[_i_]); _p_ = _d_ = __builtin_alloca
(_len_ + 1); for (_i_ = 0; _i_ < __extension__ (__builtin_choose_expr
( !__builtin_types_compatible_p(typeof(_appendees_), typeof(&
*(_appendees_))), sizeof(_appendees_)/sizeof((_appendees_)[0]
), ((void)0))) && _appendees_[_i_]; _i_++) _p_ = stpcpy
(_p_, _appendees_[_i_]); *_p_ = 0; _d_; })
;
488 r = strv_extend_strv_concat(&dropin_dirs, (char**) conf_file_dirs, suffix);
489 if (r < 0)
490 return r;
491
492 r = conf_files_list_strv(&files, ".conf", NULL((void*)0), 0, (const char* const*) dropin_dirs);
493 if (r < 0)
494 return r;
495
496 return config_parse_many_files(conf_file, files, sections, lookup, table, flags, userdata);
497}
498
499#define DEFINE_PARSER(type, vartype, conv_func)int config_parse_type(const char *unit, const char *filename,
unsigned line, const char *section, unsigned section_line, const
char *lvalue, int ltype, const char *rvalue, void *data, void
*userdata) { vartype *i = data; int r; do { if ((__builtin_expect
(!!(!(filename)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("filename"), "../src/shared/conf-parser.c", 499, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(lvalue)),0)))
log_assert_failed_realm(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 499, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(rvalue)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("rvalue"), "../src/shared/conf-parser.c", 499, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 499
, __PRETTY_FUNCTION__); } while (0); r = conv_func(rvalue, i)
; if (r < 0) ({ int _level = (3), _e = (r); (log_get_max_level_realm
(LOG_REALM_SYSTEMD) >= ((_level) & 0x07)) ? log_syntax_internal
(unit, _level, filename, line, _e, "../src/shared/conf-parser.c"
, 499, __func__, "Failed to parse " "type" " value" ", ignoring: %s"
, rvalue) : -abs(_e); }); return 0; }
\
500 DEFINE_CONFIG_PARSE_PTR(config_parse_##type, conv_func, vartype, "Failed to parse " #type " value")int config_parse_##type(const char *unit, const char *filename
, unsigned line, const char *section, unsigned section_line, const
char *lvalue, int ltype, const char *rvalue, void *data, void
*userdata) { vartype *i = data; int r; do { if ((__builtin_expect
(!!(!(filename)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("filename"), "../src/shared/conf-parser.c", 500, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(lvalue)),0)))
log_assert_failed_realm(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 500, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(rvalue)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("rvalue"), "../src/shared/conf-parser.c", 500, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 500
, __PRETTY_FUNCTION__); } while (0); r = conv_func(rvalue, i)
; if (r < 0) ({ int _level = (3), _e = (r); (log_get_max_level_realm
(LOG_REALM_SYSTEMD) >= ((_level) & 0x07)) ? log_syntax_internal
(unit, _level, filename, line, _e, "../src/shared/conf-parser.c"
, 500, __func__, "Failed to parse " #type " value" ", ignoring: %s"
, rvalue) : -abs(_e); }); return 0; }
501
502DEFINE_PARSER(int, int, safe_atoi)int config_parse_int(const char *unit, const char *filename, unsigned
line, const char *section, unsigned section_line, const char
*lvalue, int ltype, const char *rvalue, void *data, void *userdata
) { int *i = data; int r; do { if ((__builtin_expect(!!(!(filename
)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD, ("filename"
), "../src/shared/conf-parser.c", 502, __PRETTY_FUNCTION__); }
while (0); do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 502, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(rvalue)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("rvalue"), "../src/shared/conf-parser.c", 502, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 502
, __PRETTY_FUNCTION__); } while (0); r = safe_atoi(rvalue, i)
; if (r < 0) ({ int _level = (3), _e = (r); (log_get_max_level_realm
(LOG_REALM_SYSTEMD) >= ((_level) & 0x07)) ? log_syntax_internal
(unit, _level, filename, line, _e, "../src/shared/conf-parser.c"
, 502, __func__, "Failed to parse " "int" " value" ", ignoring: %s"
, rvalue) : -abs(_e); }); return 0; }
;
503DEFINE_PARSER(long, long, safe_atoli)int config_parse_long(const char *unit, const char *filename,
unsigned line, const char *section, unsigned section_line, const
char *lvalue, int ltype, const char *rvalue, void *data, void
*userdata) { long *i = data; int r; do { if ((__builtin_expect
(!!(!(filename)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("filename"), "../src/shared/conf-parser.c", 503, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(lvalue)),0)))
log_assert_failed_realm(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 503, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(rvalue)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("rvalue"), "../src/shared/conf-parser.c", 503, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 503
, __PRETTY_FUNCTION__); } while (0); r = safe_atoli(rvalue, i
); if (r < 0) ({ int _level = (3), _e = (r); (log_get_max_level_realm
(LOG_REALM_SYSTEMD) >= ((_level) & 0x07)) ? log_syntax_internal
(unit, _level, filename, line, _e, "../src/shared/conf-parser.c"
, 503, __func__, "Failed to parse " "long" " value" ", ignoring: %s"
, rvalue) : -abs(_e); }); return 0; }
;
504DEFINE_PARSER(uint8, uint8_t, safe_atou8)int config_parse_uint8(const char *unit, const char *filename
, unsigned line, const char *section, unsigned section_line, const
char *lvalue, int ltype, const char *rvalue, void *data, void
*userdata) { uint8_t *i = data; int r; do { if ((__builtin_expect
(!!(!(filename)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("filename"), "../src/shared/conf-parser.c", 504, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(lvalue)),0)))
log_assert_failed_realm(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 504, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(rvalue)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("rvalue"), "../src/shared/conf-parser.c", 504, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 504
, __PRETTY_FUNCTION__); } while (0); r = safe_atou8(rvalue, i
); if (r < 0) ({ int _level = (3), _e = (r); (log_get_max_level_realm
(LOG_REALM_SYSTEMD) >= ((_level) & 0x07)) ? log_syntax_internal
(unit, _level, filename, line, _e, "../src/shared/conf-parser.c"
, 504, __func__, "Failed to parse " "uint8" " value" ", ignoring: %s"
, rvalue) : -abs(_e); }); return 0; }
;
505DEFINE_PARSER(uint16, uint16_t, safe_atou16)int config_parse_uint16(const char *unit, const char *filename
, unsigned line, const char *section, unsigned section_line, const
char *lvalue, int ltype, const char *rvalue, void *data, void
*userdata) { uint16_t *i = data; int r; do { if ((__builtin_expect
(!!(!(filename)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("filename"), "../src/shared/conf-parser.c", 505, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(lvalue)),0)))
log_assert_failed_realm(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 505, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(rvalue)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("rvalue"), "../src/shared/conf-parser.c", 505, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 505
, __PRETTY_FUNCTION__); } while (0); r = safe_atou16(rvalue, i
); if (r < 0) ({ int _level = (3), _e = (r); (log_get_max_level_realm
(LOG_REALM_SYSTEMD) >= ((_level) & 0x07)) ? log_syntax_internal
(unit, _level, filename, line, _e, "../src/shared/conf-parser.c"
, 505, __func__, "Failed to parse " "uint16" " value" ", ignoring: %s"
, rvalue) : -abs(_e); }); return 0; }
;
506DEFINE_PARSER(uint32, uint32_t, safe_atou32)int config_parse_uint32(const char *unit, const char *filename
, unsigned line, const char *section, unsigned section_line, const
char *lvalue, int ltype, const char *rvalue, void *data, void
*userdata) { uint32_t *i = data; int r; do { if ((__builtin_expect
(!!(!(filename)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("filename"), "../src/shared/conf-parser.c", 506, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(lvalue)),0)))
log_assert_failed_realm(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 506, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(rvalue)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("rvalue"), "../src/shared/conf-parser.c", 506, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 506
, __PRETTY_FUNCTION__); } while (0); r = safe_atou32(rvalue, i
); if (r < 0) ({ int _level = (3), _e = (r); (log_get_max_level_realm
(LOG_REALM_SYSTEMD) >= ((_level) & 0x07)) ? log_syntax_internal
(unit, _level, filename, line, _e, "../src/shared/conf-parser.c"
, 506, __func__, "Failed to parse " "uint32" " value" ", ignoring: %s"
, rvalue) : -abs(_e); }); return 0; }
;
507DEFINE_PARSER(uint64, uint64_t, safe_atou64)int config_parse_uint64(const char *unit, const char *filename
, unsigned line, const char *section, unsigned section_line, const
char *lvalue, int ltype, const char *rvalue, void *data, void
*userdata) { uint64_t *i = data; int r; do { if ((__builtin_expect
(!!(!(filename)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("filename"), "../src/shared/conf-parser.c", 507, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(lvalue)),0)))
log_assert_failed_realm(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 507, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(rvalue)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("rvalue"), "../src/shared/conf-parser.c", 507, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 507
, __PRETTY_FUNCTION__); } while (0); r = safe_atou64(rvalue, i
); if (r < 0) ({ int _level = (3), _e = (r); (log_get_max_level_realm
(LOG_REALM_SYSTEMD) >= ((_level) & 0x07)) ? log_syntax_internal
(unit, _level, filename, line, _e, "../src/shared/conf-parser.c"
, 507, __func__, "Failed to parse " "uint64" " value" ", ignoring: %s"
, rvalue) : -abs(_e); }); return 0; }
;
508DEFINE_PARSER(unsigned, unsigned, safe_atou)int config_parse_unsigned(const char *unit, const char *filename
, unsigned line, const char *section, unsigned section_line, const
char *lvalue, int ltype, const char *rvalue, void *data, void
*userdata) { unsigned *i = data; int r; do { if ((__builtin_expect
(!!(!(filename)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("filename"), "../src/shared/conf-parser.c", 508, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(lvalue)),0)))
log_assert_failed_realm(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 508, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(rvalue)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("rvalue"), "../src/shared/conf-parser.c", 508, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 508
, __PRETTY_FUNCTION__); } while (0); r = safe_atou(rvalue, i)
; if (r < 0) ({ int _level = (3), _e = (r); (log_get_max_level_realm
(LOG_REALM_SYSTEMD) >= ((_level) & 0x07)) ? log_syntax_internal
(unit, _level, filename, line, _e, "../src/shared/conf-parser.c"
, 508, __func__, "Failed to parse " "unsigned" " value" ", ignoring: %s"
, rvalue) : -abs(_e); }); return 0; }
;
509DEFINE_PARSER(double, double, safe_atod)int config_parse_double(const char *unit, const char *filename
, unsigned line, const char *section, unsigned section_line, const
char *lvalue, int ltype, const char *rvalue, void *data, void
*userdata) { double *i = data; int r; do { if ((__builtin_expect
(!!(!(filename)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("filename"), "../src/shared/conf-parser.c", 509, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(lvalue)),0)))
log_assert_failed_realm(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 509, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(rvalue)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("rvalue"), "../src/shared/conf-parser.c", 509, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 509
, __PRETTY_FUNCTION__); } while (0); r = safe_atod(rvalue, i)
; if (r < 0) ({ int _level = (3), _e = (r); (log_get_max_level_realm
(LOG_REALM_SYSTEMD) >= ((_level) & 0x07)) ? log_syntax_internal
(unit, _level, filename, line, _e, "../src/shared/conf-parser.c"
, 509, __func__, "Failed to parse " "double" " value" ", ignoring: %s"
, rvalue) : -abs(_e); }); return 0; }
;
510DEFINE_PARSER(nsec, nsec_t, parse_nsec)int config_parse_nsec(const char *unit, const char *filename,
unsigned line, const char *section, unsigned section_line, const
char *lvalue, int ltype, const char *rvalue, void *data, void
*userdata) { nsec_t *i = data; int r; do { if ((__builtin_expect
(!!(!(filename)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("filename"), "../src/shared/conf-parser.c", 510, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(lvalue)),0)))
log_assert_failed_realm(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 510, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(rvalue)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("rvalue"), "../src/shared/conf-parser.c", 510, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 510
, __PRETTY_FUNCTION__); } while (0); r = parse_nsec(rvalue, i
); if (r < 0) ({ int _level = (3), _e = (r); (log_get_max_level_realm
(LOG_REALM_SYSTEMD) >= ((_level) & 0x07)) ? log_syntax_internal
(unit, _level, filename, line, _e, "../src/shared/conf-parser.c"
, 510, __func__, "Failed to parse " "nsec" " value" ", ignoring: %s"
, rvalue) : -abs(_e); }); return 0; }
;
511DEFINE_PARSER(sec, usec_t, parse_sec)int config_parse_sec(const char *unit, const char *filename, unsigned
line, const char *section, unsigned section_line, const char
*lvalue, int ltype, const char *rvalue, void *data, void *userdata
) { usec_t *i = data; int r; do { if ((__builtin_expect(!!(!(
filename)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD, ("filename"
), "../src/shared/conf-parser.c", 511, __PRETTY_FUNCTION__); }
while (0); do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 511, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(rvalue)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("rvalue"), "../src/shared/conf-parser.c", 511, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 511
, __PRETTY_FUNCTION__); } while (0); r = parse_sec(rvalue, i)
; if (r < 0) ({ int _level = (3), _e = (r); (log_get_max_level_realm
(LOG_REALM_SYSTEMD) >= ((_level) & 0x07)) ? log_syntax_internal
(unit, _level, filename, line, _e, "../src/shared/conf-parser.c"
, 511, __func__, "Failed to parse " "sec" " value" ", ignoring: %s"
, rvalue) : -abs(_e); }); return 0; }
;
512DEFINE_PARSER(sec_def_infinity, usec_t, parse_sec_def_infinity)int config_parse_sec_def_infinity(const char *unit, const char
*filename, unsigned line, const char *section, unsigned section_line
, const char *lvalue, int ltype, const char *rvalue, void *data
, void *userdata) { usec_t *i = data; int r; do { if ((__builtin_expect
(!!(!(filename)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("filename"), "../src/shared/conf-parser.c", 512, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(lvalue)),0)))
log_assert_failed_realm(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 512, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(rvalue)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("rvalue"), "../src/shared/conf-parser.c", 512, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 512
, __PRETTY_FUNCTION__); } while (0); r = parse_sec_def_infinity
(rvalue, i); if (r < 0) ({ int _level = (3), _e = (r); (log_get_max_level_realm
(LOG_REALM_SYSTEMD) >= ((_level) & 0x07)) ? log_syntax_internal
(unit, _level, filename, line, _e, "../src/shared/conf-parser.c"
, 512, __func__, "Failed to parse " "sec_def_infinity" " value"
", ignoring: %s", rvalue) : -abs(_e); }); return 0; }
;
513DEFINE_PARSER(mode, mode_t, parse_mode)int config_parse_mode(const char *unit, const char *filename,
unsigned line, const char *section, unsigned section_line, const
char *lvalue, int ltype, const char *rvalue, void *data, void
*userdata) { mode_t *i = data; int r; do { if ((__builtin_expect
(!!(!(filename)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("filename"), "../src/shared/conf-parser.c", 513, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(lvalue)),0)))
log_assert_failed_realm(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 513, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(rvalue)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("rvalue"), "../src/shared/conf-parser.c", 513, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 513
, __PRETTY_FUNCTION__); } while (0); r = parse_mode(rvalue, i
); if (r < 0) ({ int _level = (3), _e = (r); (log_get_max_level_realm
(LOG_REALM_SYSTEMD) >= ((_level) & 0x07)) ? log_syntax_internal
(unit, _level, filename, line, _e, "../src/shared/conf-parser.c"
, 513, __func__, "Failed to parse " "mode" " value" ", ignoring: %s"
, rvalue) : -abs(_e); }); return 0; }
;
514
515int config_parse_iec_size(const char* unit,
516 const char *filename,
517 unsigned line,
518 const char *section,
519 unsigned section_line,
520 const char *lvalue,
521 int ltype,
522 const char *rvalue,
523 void *data,
524 void *userdata) {
525
526 size_t *sz = data;
527 uint64_t v;
528 int r;
529
530 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 530, __PRETTY_FUNCTION__); } while (0)
;
531 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 531, __PRETTY_FUNCTION__); } while (0)
;
532 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 532, __PRETTY_FUNCTION__); } while (0)
;
533 assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 533
, __PRETTY_FUNCTION__); } while (0)
;
534
535 r = parse_size(rvalue, 1024, &v);
536 if (r < 0 || (uint64_t) (size_t) v != v) {
537 log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse size value, ignoring: %s", rvalue)({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 537, __func__
, "Failed to parse size value, ignoring: %s", rvalue) : -abs(
_e); })
;
538 return 0;
539 }
540
541 *sz = (size_t) v;
542 return 0;
543}
544
545int config_parse_si_size(
546 const char* unit,
547 const char *filename,
548 unsigned line,
549 const char *section,
550 unsigned section_line,
551 const char *lvalue,
552 int ltype,
553 const char *rvalue,
554 void *data,
555 void *userdata) {
556
557 size_t *sz = data;
558 uint64_t v;
559 int r;
560
561 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 561, __PRETTY_FUNCTION__); } while (0)
;
562 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 562, __PRETTY_FUNCTION__); } while (0)
;
563 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 563, __PRETTY_FUNCTION__); } while (0)
;
564 assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 564
, __PRETTY_FUNCTION__); } while (0)
;
565
566 r = parse_size(rvalue, 1000, &v);
567 if (r < 0 || (uint64_t) (size_t) v != v) {
568 log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse size value, ignoring: %s", rvalue)({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 568, __func__
, "Failed to parse size value, ignoring: %s", rvalue) : -abs(
_e); })
;
569 return 0;
570 }
571
572 *sz = (size_t) v;
573 return 0;
574}
575
576int config_parse_iec_uint64(
577 const char* unit,
578 const char *filename,
579 unsigned line,
580 const char *section,
581 unsigned section_line,
582 const char *lvalue,
583 int ltype,
584 const char *rvalue,
585 void *data,
586 void *userdata) {
587
588 uint64_t *bytes = data;
589 int r;
590
591 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 591, __PRETTY_FUNCTION__); } while (0)
;
592 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 592, __PRETTY_FUNCTION__); } while (0)
;
593 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 593, __PRETTY_FUNCTION__); } while (0)
;
594 assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 594
, __PRETTY_FUNCTION__); } while (0)
;
595
596 r = parse_size(rvalue, 1024, bytes);
597 if (r < 0)
598 log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse size value, ignoring: %s", rvalue)({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 598, __func__
, "Failed to parse size value, ignoring: %s", rvalue) : -abs(
_e); })
;
599
600 return 0;
601}
602
603int config_parse_bool(const char* unit,
604 const char *filename,
605 unsigned line,
606 const char *section,
607 unsigned section_line,
608 const char *lvalue,
609 int ltype,
610 const char *rvalue,
611 void *data,
612 void *userdata) {
613
614 int k;
615 bool_Bool *b = data;
616 bool_Bool fatal = ltype;
617
618 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 618, __PRETTY_FUNCTION__); } while (0)
;
619 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 619, __PRETTY_FUNCTION__); } while (0)
;
620 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 620, __PRETTY_FUNCTION__); } while (0)
;
621 assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 621
, __PRETTY_FUNCTION__); } while (0)
;
622
623 k = parse_boolean(rvalue);
624 if (k < 0) {
625 log_syntax(unit, LOG_ERR, filename, line, k,({ int _level = (3), _e = (k); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 627, __func__
, "Failed to parse boolean value%s: %s", fatal ? "" : ", ignoring"
, rvalue) : -abs(_e); })
626 "Failed to parse boolean value%s: %s",({ int _level = (3), _e = (k); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 627, __func__
, "Failed to parse boolean value%s: %s", fatal ? "" : ", ignoring"
, rvalue) : -abs(_e); })
627 fatal ? "" : ", ignoring", rvalue)({ int _level = (3), _e = (k); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 627, __func__
, "Failed to parse boolean value%s: %s", fatal ? "" : ", ignoring"
, rvalue) : -abs(_e); })
;
628 return fatal ? -ENOEXEC8 : 0;
629 }
630
631 *b = k;
632 return 0;
633}
634
635int config_parse_tristate(
636 const char* unit,
637 const char *filename,
638 unsigned line,
639 const char *section,
640 unsigned section_line,
641 const char *lvalue,
642 int ltype,
643 const char *rvalue,
644 void *data,
645 void *userdata) {
646
647 int k, *t = data;
648
649 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 649, __PRETTY_FUNCTION__); } while (0)
;
650 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 650, __PRETTY_FUNCTION__); } while (0)
;
651 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 651, __PRETTY_FUNCTION__); } while (0)
;
652 assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 652
, __PRETTY_FUNCTION__); } while (0)
;
653
654 /* A tristate is pretty much a boolean, except that it can
655 * also take the special value -1, indicating "uninitialized",
656 * much like NULL is for a pointer type. */
657
658 k = parse_boolean(rvalue);
659 if (k < 0) {
660 log_syntax(unit, LOG_ERR, filename, line, k, "Failed to parse boolean value, ignoring: %s", rvalue)({ int _level = (3), _e = (k); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 660, __func__
, "Failed to parse boolean value, ignoring: %s", rvalue) : -abs
(_e); })
;
661 return 0;
662 }
663
664 *t = !!k;
665 return 0;
666}
667
668int config_parse_string(
669 const char *unit,
670 const char *filename,
671 unsigned line,
672 const char *section,
673 unsigned section_line,
674 const char *lvalue,
675 int ltype,
676 const char *rvalue,
677 void *data,
678 void *userdata) {
679
680 char **s = data;
681
682 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 682, __PRETTY_FUNCTION__); } while (0)
;
683 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 683, __PRETTY_FUNCTION__); } while (0)
;
684 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 684, __PRETTY_FUNCTION__); } while (0)
;
685 assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 685
, __PRETTY_FUNCTION__); } while (0)
;
686
687 if (free_and_strdup(s, empty_to_null(rvalue)) < 0)
688 return log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 688, __func__)
;
689
690 return 0;
691}
692
693int config_parse_path(
694 const char *unit,
695 const char *filename,
696 unsigned line,
697 const char *section,
698 unsigned section_line,
699 const char *lvalue,
700 int ltype,
701 const char *rvalue,
702 void *data,
703 void *userdata) {
704
705 _cleanup_free___attribute__((cleanup(freep))) char *n = NULL((void*)0);
706 bool_Bool fatal = ltype;
707 char **s = data;
708 int r;
709
710 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 710, __PRETTY_FUNCTION__); } while (0)
;
711 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 711, __PRETTY_FUNCTION__); } while (0)
;
712 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 712, __PRETTY_FUNCTION__); } while (0)
;
713 assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 713
, __PRETTY_FUNCTION__); } while (0)
;
714
715 if (isempty(rvalue))
716 goto finalize;
717
718 n = strdup(rvalue);
719 if (!n)
720 return log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 720, __func__)
;
721
722 r = path_simplify_and_warn(n, PATH_CHECK_ABSOLUTE | (fatal ? PATH_CHECK_FATAL : 0), unit, filename, line, lvalue);
723 if (r < 0)
724 return fatal ? -ENOEXEC8 : 0;
725
726finalize:
727 return free_and_replace(*s, n)({ free(*s); (*s) = (n); (n) = ((void*)0); 0; });
728}
729
730int config_parse_strv(
731 const char *unit,
732 const char *filename,
733 unsigned line,
734 const char *section,
735 unsigned section_line,
736 const char *lvalue,
737 int ltype,
738 const char *rvalue,
739 void *data,
740 void *userdata) {
741
742 char ***sv = data;
743 int r;
744
745 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 745, __PRETTY_FUNCTION__); } while (0)
;
746 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 746, __PRETTY_FUNCTION__); } while (0)
;
747 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 747, __PRETTY_FUNCTION__); } while (0)
;
748 assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 748
, __PRETTY_FUNCTION__); } while (0)
;
749
750 if (isempty(rvalue)) {
751 *sv = strv_free(*sv);
752 return 0;
753 }
754
755 for (;;) {
756 char *word = NULL((void*)0);
757
758 r = extract_first_word(&rvalue, &word, NULL((void*)0), EXTRACT_QUOTES|EXTRACT_RETAIN_ESCAPE);
759 if (r == 0)
760 break;
761 if (r == -ENOMEM12)
762 return log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 762, __func__)
;
763 if (r < 0) {
764 log_syntax(unit, LOG_ERR, filename, line, r, "Invalid syntax, ignoring: %s", rvalue)({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 764, __func__
, "Invalid syntax, ignoring: %s", rvalue) : -abs(_e); })
;
765 break;
766 }
767
768 r = strv_consume(sv, word);
769 if (r < 0)
770 return log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 770, __func__)
;
771 }
772
773 return 0;
774}
775
776int config_parse_warn_compat(
777 const char *unit,
778 const char *filename,
779 unsigned line,
780 const char *section,
781 unsigned section_line,
782 const char *lvalue,
783 int ltype,
784 const char *rvalue,
785 void *data,
786 void *userdata) {
787
788 Disabled reason = ltype;
789
790 switch(reason) {
791
792 case DISABLED_CONFIGURATION:
793 log_syntax(unit, LOG_DEBUG, filename, line, 0,({ int _level = (7), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 794, __func__
, "Support for option %s= has been disabled at compile time and it is ignored"
, lvalue) : -abs(_e); })
794 "Support for option %s= has been disabled at compile time and it is ignored", lvalue)({ int _level = (7), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 794, __func__
, "Support for option %s= has been disabled at compile time and it is ignored"
, lvalue) : -abs(_e); })
;
795 break;
796
797 case DISABLED_LEGACY:
798 log_syntax(unit, LOG_INFO, filename, line, 0,({ int _level = (6), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 799, __func__
, "Support for option %s= has been removed and it is ignored"
, lvalue) : -abs(_e); })
799 "Support for option %s= has been removed and it is ignored", lvalue)({ int _level = (6), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 799, __func__
, "Support for option %s= has been removed and it is ignored"
, lvalue) : -abs(_e); })
;
800 break;
801
802 case DISABLED_EXPERIMENTAL:
803 log_syntax(unit, LOG_INFO, filename, line, 0,({ int _level = (6), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 804, __func__
, "Support for option %s= has not yet been enabled and it is ignored"
, lvalue) : -abs(_e); })
804 "Support for option %s= has not yet been enabled and it is ignored", lvalue)({ int _level = (6), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 804, __func__
, "Support for option %s= has not yet been enabled and it is ignored"
, lvalue) : -abs(_e); })
;
805 break;
806 }
807
808 return 0;
809}
810
811int config_parse_log_facility(
812 const char *unit,
813 const char *filename,
814 unsigned line,
815 const char *section,
816 unsigned section_line,
817 const char *lvalue,
818 int ltype,
819 const char *rvalue,
820 void *data,
821 void *userdata) {
822
823 int *o = data, x;
824
825 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 825, __PRETTY_FUNCTION__); } while (0)
;
826 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 826, __PRETTY_FUNCTION__); } while (0)
;
827 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 827, __PRETTY_FUNCTION__); } while (0)
;
828 assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 828
, __PRETTY_FUNCTION__); } while (0)
;
829
830 x = log_facility_unshifted_from_string(rvalue);
831 if (x < 0) {
832 log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse log facility, ignoring: %s", rvalue)({ int _level = (3), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 832, __func__
, "Failed to parse log facility, ignoring: %s", rvalue) : -abs
(_e); })
;
833 return 0;
834 }
835
836 *o = (x << 3) | LOG_PRI(*o)((*o) & 0x07);
837
838 return 0;
839}
840
841int config_parse_log_level(
842 const char *unit,
843 const char *filename,
844 unsigned line,
845 const char *section,
846 unsigned section_line,
847 const char *lvalue,
848 int ltype,
849 const char *rvalue,
850 void *data,
851 void *userdata) {
852
853 int *o = data, x;
854
855 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 855, __PRETTY_FUNCTION__); } while (0)
;
856 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 856, __PRETTY_FUNCTION__); } while (0)
;
857 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 857, __PRETTY_FUNCTION__); } while (0)
;
858 assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 858
, __PRETTY_FUNCTION__); } while (0)
;
859
860 x = log_level_from_string(rvalue);
861 if (x < 0) {
862 log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse log level, ignoring: %s", rvalue)({ int _level = (3), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 862, __func__
, "Failed to parse log level, ignoring: %s", rvalue) : -abs(_e
); })
;
863 return 0;
864 }
865
866 if (*o < 0) /* if it wasn't initialized so far, assume zero facility */
867 *o = x;
868 else
869 *o = (*o & LOG_FACMASK0x03f8) | x;
870
871 return 0;
872}
873
874int config_parse_signal(
875 const char *unit,
876 const char *filename,
877 unsigned line,
878 const char *section,
879 unsigned section_line,
880 const char *lvalue,
881 int ltype,
882 const char *rvalue,
883 void *data,
884 void *userdata) {
885
886 int *sig = data, r;
887
888 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 888, __PRETTY_FUNCTION__); } while (0)
;
889 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 889, __PRETTY_FUNCTION__); } while (0)
;
890 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 890, __PRETTY_FUNCTION__); } while (0)
;
891 assert(sig)do { if ((__builtin_expect(!!(!(sig)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("sig"), "../src/shared/conf-parser.c", 891
, __PRETTY_FUNCTION__); } while (0)
;
892
893 r = signal_from_string(rvalue);
894 if (r <= 0) {
895 log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse signal name, ignoring: %s", rvalue)({ int _level = (3), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 895, __func__
, "Failed to parse signal name, ignoring: %s", rvalue) : -abs
(_e); })
;
896 return 0;
897 }
898
899 *sig = r;
900 return 0;
901}
902
903int config_parse_personality(
904 const char *unit,
905 const char *filename,
906 unsigned line,
907 const char *section,
908 unsigned section_line,
909 const char *lvalue,
910 int ltype,
911 const char *rvalue,
912 void *data,
913 void *userdata) {
914
915 unsigned long *personality = data, p;
916
917 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 917, __PRETTY_FUNCTION__); } while (0)
;
918 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 918, __PRETTY_FUNCTION__); } while (0)
;
919 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 919, __PRETTY_FUNCTION__); } while (0)
;
920 assert(personality)do { if ((__builtin_expect(!!(!(personality)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("personality"), "../src/shared/conf-parser.c"
, 920, __PRETTY_FUNCTION__); } while (0)
;
921
922 if (isempty(rvalue))
923 p = PERSONALITY_INVALID0xffffffffLU;
924 else {
925 p = personality_from_string(rvalue);
926 if (p == PERSONALITY_INVALID0xffffffffLU) {
927 log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse personality, ignoring: %s", rvalue)({ int _level = (3), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 927, __func__
, "Failed to parse personality, ignoring: %s", rvalue) : -abs
(_e); })
;
928 return 0;
929 }
930 }
931
932 *personality = p;
933 return 0;
934}
935
936int config_parse_ifname(
937 const char *unit,
938 const char *filename,
939 unsigned line,
940 const char *section,
941 unsigned section_line,
942 const char *lvalue,
943 int ltype,
944 const char *rvalue,
945 void *data,
946 void *userdata) {
947
948 char **s = data;
949 int r;
950
951 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 951, __PRETTY_FUNCTION__); } while (0)
;
952 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 952, __PRETTY_FUNCTION__); } while (0)
;
953 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 953, __PRETTY_FUNCTION__); } while (0)
;
954 assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 954
, __PRETTY_FUNCTION__); } while (0)
;
955
956 if (isempty(rvalue)) {
957 *s = mfree(*s);
958 return 0;
959 }
960
961 if (!ifname_valid(rvalue)) {
962 log_syntax(unit, LOG_ERR, filename, line, 0, "Interface name is not valid or too long, ignoring assignment: %s", rvalue)({ int _level = (3), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 962, __func__
, "Interface name is not valid or too long, ignoring assignment: %s"
, rvalue) : -abs(_e); })
;
963 return 0;
964 }
965
966 r = free_and_strdup(s, rvalue);
967 if (r < 0)
968 return log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 968, __func__)
;
969
970 return 0;
971}
972
973int config_parse_ip_port(
974 const char *unit,
975 const char *filename,
976 unsigned line,
977 const char *section,
978 unsigned section_line,
979 const char *lvalue,
980 int ltype,
981 const char *rvalue,
982 void *data,
983 void *userdata) {
984
985 uint16_t *s = data;
986 uint16_t port;
987 int r;
988
989 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 989, __PRETTY_FUNCTION__); } while (0)
;
990 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 990, __PRETTY_FUNCTION__); } while (0)
;
991 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 991, __PRETTY_FUNCTION__); } while (0)
;
992 assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/shared/conf-parser.c", 992
, __PRETTY_FUNCTION__); } while (0)
;
993
994 if (isempty(rvalue)) {
995 *s = 0;
996 return 0;
997 }
998
999 r = parse_ip_port(rvalue, &port);
1000 if (r < 0) {
1001 log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse port '%s'.", rvalue)({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 1001, __func__
, "Failed to parse port '%s'.", rvalue) : -abs(_e); })
;
1002 return 0;
1003 }
1004
1005 *s = port;
1006
1007 return 0;
1008}
1009
1010int config_parse_join_controllers(
1011 const char *unit,
1012 const char *filename,
1013 unsigned line,
1014 const char *section,
1015 unsigned section_line,
1016 const char *lvalue,
1017 int ltype,
1018 const char *rvalue,
1019 void *data,
1020 void *userdata) {
1021
1022 char ****ret = data;
1023 const char *whole_rvalue = rvalue;
1024 unsigned n = 0;
1025 _cleanup_(strv_free_freep)__attribute__((cleanup(strv_free_freep))) char ***controllers = NULL((void*)0);
1026
1027 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 1027, __PRETTY_FUNCTION__); } while (0)
;
1
Assuming 'filename' is non-null
2
Taking false branch
3
Loop condition is false. Exiting loop
1028 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 1028, __PRETTY_FUNCTION__); } while (0)
;
4
Assuming 'lvalue' is non-null
5
Taking false branch
6
Loop condition is false. Exiting loop
1029 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 1029, __PRETTY_FUNCTION__); } while (0)
;
7
Assuming 'rvalue' is non-null
8
Taking false branch
9
Loop condition is false. Exiting loop
1030 assert(ret)do { if ((__builtin_expect(!!(!(ret)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("ret"), "../src/shared/conf-parser.c", 1030
, __PRETTY_FUNCTION__); } while (0)
;
10
Assuming 'ret' is non-null
11
Taking false branch
12
Loop condition is false. Exiting loop
1031
1032 for (;;) {
13
Loop condition is true. Entering loop body
25
Loop condition is true. Entering loop body
44
Loop condition is true. Entering loop body
1033 _cleanup_free___attribute__((cleanup(freep))) char *word = NULL((void*)0);
1034 char **l;
1035 int r;
1036
1037 r = extract_first_word(&rvalue, &word, NULL((void*)0), EXTRACT_QUOTES);
1038 if (r < 0) {
14
Assuming 'r' is >= 0
15
Taking false branch
26
Assuming 'r' is >= 0
27
Taking false branch
45
Assuming 'r' is >= 0
46
Taking false branch
1039 log_syntax(unit, LOG_ERR, filename, line, r, "Invalid value for %s: %s", lvalue, whole_rvalue)({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 1039, __func__
, "Invalid value for %s: %s", lvalue, whole_rvalue) : -abs(_e
); })
;
1040 return r;
1041 }
1042 if (r == 0)
16
Assuming 'r' is not equal to 0
17
Taking false branch
28
Assuming 'r' is not equal to 0
29
Taking false branch
47
Assuming 'r' is not equal to 0
48
Taking false branch
1043 break;
1044
1045 l = strv_split(word, ",");
1046 if (!l)
18
Assuming 'l' is non-null
19
Taking false branch
30
Assuming 'l' is non-null
31
Taking false branch
49
Assuming 'l' is non-null
50
Taking false branch
1047 return log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 1047, __func__)
;
1048 strv_uniq(l);
1049
1050 if (strv_length(l) <= 1) {
20
Assuming the condition is false
21
Taking false branch
32
Assuming the condition is false
33
Taking false branch
51
Assuming the condition is false
52
Taking false branch
1051 strv_free(l);
1052 continue;
1053 }
1054
1055 if (!controllers
21.1
'controllers' is null
33.1
'controllers' is non-null
52.1
'controllers' is non-null
) {
22
Taking true branch
34
Taking false branch
53
Taking false branch
1056 controllers = new(char**, 2)((char***) malloc_multiply(sizeof(char**), (2)));
1057 if (!controllers) {
23
Assuming 'controllers' is non-null
24
Taking false branch
1058 strv_free(l);
1059 return log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 1059, __func__)
;
1060 }
1061
1062 controllers[0] = l;
1063 controllers[1] = NULL((void*)0);
1064
1065 n = 1;
1066 } else {
1067 char ***a;
1068 char ***t;
1069
1070 t = new0(char**, n+2)((char***) calloc((n+2), sizeof(char**)));
35
Memory is allocated
1071 if (!t) {
36
Assuming 't' is non-null
37
Taking false branch
54
Assuming 't' is non-null
55
Taking false branch
1072 strv_free(l);
1073 return log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 1073, __func__)
;
1074 }
1075
1076 n = 0;
1077
1078 for (a = controllers; *a; a++)
38
Loop condition is true. Entering loop body
43
Loop condition is false. Execution continues on line 1099
56
Loop condition is true. Entering loop body
1079 if (strv_overlap(*a, l)) {
39
Assuming the condition is true
40
Taking true branch
57
Assuming the condition is true
58
Taking true branch
1080 if (strv_extend_strv(&l, *a, false0) < 0) {
41
Assuming the condition is false
42
Taking false branch
59
Assuming the condition is true
60
Taking true branch
1081 strv_free(l);
61
Potential leak of memory pointed to by 'a'
1082 strv_free_free(t);
1083 return log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 1083, __func__)
;
1084 }
1085
1086 } else {
1087 char **c;
1088
1089 c = strv_copy(*a);
1090 if (!c) {
1091 strv_free(l);
1092 strv_free_free(t);
1093 return log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 1093, __func__)
;
1094 }
1095
1096 t[n++] = c;
1097 }
1098
1099 t[n++] = strv_uniq(l);
1100
1101 strv_free_free(controllers);
1102 controllers = t;
1103 }
1104 }
1105 if (!isempty(rvalue))
1106 log_syntax(unit, LOG_ERR, filename, line, 0, "Trailing garbage, ignoring.")({ int _level = (3), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 1106, __func__
, "Trailing garbage, ignoring.") : -abs(_e); })
;
1107
1108 /* As a special case, return a single empty strv, to override the default */
1109 if (!controllers) {
1110 controllers = new(char**, 2)((char***) malloc_multiply(sizeof(char**), (2)));
1111 if (!controllers)
1112 return log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 1112, __func__)
;
1113 controllers[0] = strv_new(NULL((void*)0), NULL((void*)0));
1114 if (!controllers[0])
1115 return log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 1115, __func__)
;
1116 controllers[1] = NULL((void*)0);
1117 }
1118
1119 strv_free_free(*ret);
1120 *ret = TAKE_PTR(controllers)({ typeof(controllers) _ptr_ = (controllers); (controllers) =
((void*)0); _ptr_; })
;
1121
1122 return 0;
1123}
1124
1125int config_parse_mtu(
1126 const char *unit,
1127 const char *filename,
1128 unsigned line,
1129 const char *section,
1130 unsigned section_line,
1131 const char *lvalue,
1132 int ltype,
1133 const char *rvalue,
1134 void *data,
1135 void *userdata) {
1136
1137 uint32_t *mtu = data;
1138 int r;
1139
1140 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 1140, __PRETTY_FUNCTION__); } while (0)
;
1141 assert(mtu)do { if ((__builtin_expect(!!(!(mtu)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("mtu"), "../src/shared/conf-parser.c", 1141
, __PRETTY_FUNCTION__); } while (0)
;
1142
1143 r = parse_mtu(ltype, rvalue, mtu);
1144 if (r == -ERANGE34) {
1145 log_syntax(unit, LOG_ERR, filename, line, r,({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 1148, __func__
, "Maximum transfer unit (MTU) value out of range. Permitted range is %"
"u" "…%" "u" ", ignoring: %s", (uint32_t) (ltype == 10 ? 1280
: 68), (uint32_t) (4294967295U), rvalue) : -abs(_e); })
1146 "Maximum transfer unit (MTU) value out of range. Permitted range is %" PRIu32 "…%" PRIu32 ", ignoring: %s",({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 1148, __func__
, "Maximum transfer unit (MTU) value out of range. Permitted range is %"
"u" "…%" "u" ", ignoring: %s", (uint32_t) (ltype == 10 ? 1280
: 68), (uint32_t) (4294967295U), rvalue) : -abs(_e); })
1147 (uint32_t) (ltype == AF_INET6 ? IPV6_MIN_MTU : IPV4_MIN_MTU), (uint32_t) UINT32_MAX,({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 1148, __func__
, "Maximum transfer unit (MTU) value out of range. Permitted range is %"
"u" "…%" "u" ", ignoring: %s", (uint32_t) (ltype == 10 ? 1280
: 68), (uint32_t) (4294967295U), rvalue) : -abs(_e); })
1148 rvalue)({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 1148, __func__
, "Maximum transfer unit (MTU) value out of range. Permitted range is %"
"u" "…%" "u" ", ignoring: %s", (uint32_t) (ltype == 10 ? 1280
: 68), (uint32_t) (4294967295U), rvalue) : -abs(_e); })
;
1149 return 0;
1150 }
1151 if (r < 0) {
1152 log_syntax(unit, LOG_ERR, filename, line, r,({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 1153, __func__
, "Failed to parse MTU value '%s', ignoring: %m", rvalue) : -
abs(_e); })
1153 "Failed to parse MTU value '%s', ignoring: %m", rvalue)({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 1153, __func__
, "Failed to parse MTU value '%s', ignoring: %m", rvalue) : -
abs(_e); })
;
1154 return 0;
1155 }
1156
1157 return 0;
1158}
1159
1160int config_parse_rlimit(
1161 const char *unit,
1162 const char *filename,
1163 unsigned line,
1164 const char *section,
1165 unsigned section_line,
1166 const char *lvalue,
1167 int ltype,
1168 const char *rvalue,
1169 void *data,
1170 void *userdata) {
1171
1172 struct rlimit **rl = data, d = {};
1173 int r;
1174
1175 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 1175, __PRETTY_FUNCTION__); } while (0)
;
1176 assert(rl)do { if ((__builtin_expect(!!(!(rl)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rl"), "../src/shared/conf-parser.c", 1176
, __PRETTY_FUNCTION__); } while (0)
;
1177
1178 r = rlimit_parse(ltype, rvalue, &d);
1179 if (r == -EILSEQ84) {
1180 log_syntax(unit, LOG_WARNING, filename, line, r, "Soft resource limit chosen higher than hard limit, ignoring: %s", rvalue)({ int _level = (4), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 1180, __func__
, "Soft resource limit chosen higher than hard limit, ignoring: %s"
, rvalue) : -abs(_e); })
;
1181 return 0;
1182 }
1183 if (r < 0) {
1184 log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse resource value, ignoring: %s", rvalue)({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 1184, __func__
, "Failed to parse resource value, ignoring: %s", rvalue) : -
abs(_e); })
;
1185 return 0;
1186 }
1187
1188 if (rl[ltype])
1189 *rl[ltype] = d;
1190 else {
1191 rl[ltype] = newdup(struct rlimit, &d, 1)((struct rlimit*) memdup_multiply(&d, sizeof(struct rlimit
), (1)))
;
1192 if (!rl[ltype])
1193 return log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/shared/conf-parser.c"
, 1193, __func__)
;
1194 }
1195
1196 return 0;
1197}
1198
1199int config_parse_permille(const char* unit,
1200 const char *filename,
1201 unsigned line,
1202 const char *section,
1203 unsigned section_line,
1204 const char *lvalue,
1205 int ltype,
1206 const char *rvalue,
1207 void *data,
1208 void *userdata) {
1209
1210 unsigned *permille = data;
1211 int r;
1212
1213 assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("filename"), "../src/shared/conf-parser.c"
, 1213, __PRETTY_FUNCTION__); } while (0)
;
1214 assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("lvalue"), "../src/shared/conf-parser.c"
, 1214, __PRETTY_FUNCTION__); } while (0)
;
1215 assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("rvalue"), "../src/shared/conf-parser.c"
, 1215, __PRETTY_FUNCTION__); } while (0)
;
1216 assert(permille)do { if ((__builtin_expect(!!(!(permille)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("permille"), "../src/shared/conf-parser.c"
, 1216, __PRETTY_FUNCTION__); } while (0)
;
1217
1218 r = parse_permille(rvalue);
1219 if (r < 0) {
1220 log_syntax(unit, LOG_ERR, filename, line, r,({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 1221, __func__
, "Failed to parse permille value, ignoring: %s", rvalue) : -
abs(_e); })
1221 "Failed to parse permille value, ignoring: %s", rvalue)({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD
) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level
, filename, line, _e, "../src/shared/conf-parser.c", 1221, __func__
, "Failed to parse permille value, ignoring: %s", rvalue) : -
abs(_e); })
;
1222 return 0;
1223 }
1224
1225 *permille = (unsigned) r;
1226
1227 return 0;
1228}