mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-22 22:03:43 +03:00
Merge pull request #12903 from keszybz/condition-quoting
Condition quoting
This commit is contained in:
commit
539bcc831b
@ -1136,10 +1136,11 @@
|
||||
|
||||
<para><varname>ConditionKernelVersion=</varname> may be used to check whether the kernel version (as
|
||||
reported by <command>uname -r</command>) matches a certain expression (or if prefixed with the
|
||||
exclamation mark does not match it). The argument must be a single string. If the string starts with
|
||||
one of <literal><</literal>, <literal><=</literal>, <literal>=</literal>,
|
||||
<literal>!=</literal>, <literal>>=</literal>, <literal>></literal> a relative version
|
||||
comparison is done, otherwise the specified string is matched with shell-style globs.</para>
|
||||
exclamation mark does not match it). The argument must be a list of (potentially quoted) expressions.
|
||||
For each of the expressions, if it starts with one of <literal><</literal>,
|
||||
<literal><=</literal>, <literal>=</literal>, <literal>!=</literal>, <literal>>=</literal>,
|
||||
<literal>></literal> a relative version comparison is done, otherwise the specified string is
|
||||
matched with shell-style globs.</para>
|
||||
|
||||
<para>Note that using the kernel version string is an unreliable way to determine which features are supported
|
||||
by a kernel, because of the widespread practice of backporting drivers, features, and fixes from newer upstream
|
||||
|
@ -100,7 +100,7 @@ int capability_set_from_string(const char *s, uint64_t *set) {
|
||||
_cleanup_free_ char *word = NULL;
|
||||
int r;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == -ENOMEM)
|
||||
return r;
|
||||
if (r <= 0)
|
||||
|
@ -688,7 +688,7 @@ char **replace_env_argv(char **argv, char **env) {
|
||||
if (e) {
|
||||
int r;
|
||||
|
||||
r = strv_split_extract(&m, e, WHITESPACE, EXTRACT_RELAX|EXTRACT_QUOTES);
|
||||
r = strv_split_extract(&m, e, WHITESPACE, EXTRACT_RELAX|EXTRACT_UNQUOTE);
|
||||
if (r < 0) {
|
||||
ret[k] = NULL;
|
||||
strv_free(ret);
|
||||
|
@ -135,7 +135,7 @@ int extract_first_word(const char **p, char **ret, const char *separators, Extra
|
||||
for (;; (*p)++, c = **p) {
|
||||
if (c == 0)
|
||||
goto finish_force_terminate;
|
||||
else if (IN_SET(c, '\'', '"') && (flags & EXTRACT_QUOTES)) {
|
||||
else if (IN_SET(c, '\'', '"') && (flags & EXTRACT_UNQUOTE)) {
|
||||
quote = c;
|
||||
break;
|
||||
} else if (c == '\\' && !(flags & EXTRACT_RETAIN_ESCAPE)) {
|
||||
|
@ -7,7 +7,7 @@ typedef enum ExtractFlags {
|
||||
EXTRACT_RELAX = 1 << 0,
|
||||
EXTRACT_CUNESCAPE = 1 << 1,
|
||||
EXTRACT_CUNESCAPE_RELAX = 1 << 2,
|
||||
EXTRACT_QUOTES = 1 << 3,
|
||||
EXTRACT_UNQUOTE = 1 << 3,
|
||||
EXTRACT_DONT_COALESCE_SEPARATORS = 1 << 4,
|
||||
EXTRACT_RETAIN_ESCAPE = 1 << 5,
|
||||
} ExtractFlags;
|
||||
|
@ -47,7 +47,7 @@ static int proc_cmdline_extract_first(const char **p, char **ret_word, ProcCmdli
|
||||
_cleanup_free_ char *word = NULL;
|
||||
const char *c;
|
||||
|
||||
r = extract_first_word(&q, &word, NULL, EXTRACT_QUOTES|EXTRACT_RELAX);
|
||||
r = extract_first_word(&q, &word, NULL, EXTRACT_UNQUOTE|EXTRACT_RELAX);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0)
|
||||
|
@ -374,7 +374,7 @@ static int device_add_udev_wants(Unit *u, sd_device *dev) {
|
||||
for (;;) {
|
||||
_cleanup_free_ char *word = NULL, *k = NULL;
|
||||
|
||||
r = extract_first_word(&wants, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&wants, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
break;
|
||||
if (r == -ENOMEM)
|
||||
@ -626,7 +626,7 @@ static int device_process_new(Manager *m, sd_device *dev) {
|
||||
for (;;) {
|
||||
_cleanup_free_ char *word = NULL;
|
||||
|
||||
r = extract_first_word(&alias, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&alias, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
break;
|
||||
if (r == -ENOMEM)
|
||||
|
@ -334,7 +334,7 @@ int config_parse_unit_path_strv_printf(
|
||||
for (p = rvalue;;) {
|
||||
_cleanup_free_ char *word = NULL, *k = NULL;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
return 0;
|
||||
if (r == -ENOMEM)
|
||||
@ -638,7 +638,7 @@ int config_parse_exec(
|
||||
|
||||
semicolon = false;
|
||||
|
||||
r = extract_first_word_and_warn(&p, &firstword, NULL, EXTRACT_QUOTES|EXTRACT_CUNESCAPE, unit, filename, line, rvalue);
|
||||
r = extract_first_word_and_warn(&p, &firstword, NULL, EXTRACT_UNQUOTE|EXTRACT_CUNESCAPE, unit, filename, line, rvalue);
|
||||
if (r <= 0)
|
||||
return 0;
|
||||
|
||||
@ -784,7 +784,7 @@ int config_parse_exec(
|
||||
continue;
|
||||
}
|
||||
|
||||
r = extract_first_word_and_warn(&p, &word, NULL, EXTRACT_QUOTES|EXTRACT_CUNESCAPE, unit, filename, line, rvalue);
|
||||
r = extract_first_word_and_warn(&p, &word, NULL, EXTRACT_UNQUOTE|EXTRACT_CUNESCAPE, unit, filename, line, rvalue);
|
||||
if (r == 0)
|
||||
break;
|
||||
if (r < 0)
|
||||
@ -2244,7 +2244,7 @@ int config_parse_environ(
|
||||
for (p = rvalue;; ) {
|
||||
_cleanup_free_ char *word = NULL, *k = NULL;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_CUNESCAPE|EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_CUNESCAPE|EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
return 0;
|
||||
if (r == -ENOMEM)
|
||||
@ -2312,7 +2312,7 @@ int config_parse_pass_environ(
|
||||
for (;;) {
|
||||
_cleanup_free_ char *word = NULL, *k = NULL;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
break;
|
||||
if (r == -ENOMEM)
|
||||
@ -2388,7 +2388,7 @@ int config_parse_unset_environ(
|
||||
for (;;) {
|
||||
_cleanup_free_ char *word = NULL, *k = NULL;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_CUNESCAPE|EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_CUNESCAPE|EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
break;
|
||||
if (r == -ENOMEM)
|
||||
@ -2463,7 +2463,7 @@ int config_parse_log_extra_fields(
|
||||
struct iovec *t;
|
||||
const char *eq;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_CUNESCAPE|EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_CUNESCAPE|EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
return 0;
|
||||
if (r == -ENOMEM)
|
||||
@ -2597,7 +2597,8 @@ int config_parse_unit_condition_string(
|
||||
|
||||
r = unit_full_printf(u, rvalue, &s);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to resolve unit specifiers in '%s', ignoring: %m", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r,
|
||||
"Failed to resolve unit specifiers in '%s', ignoring: %m", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2687,7 +2688,7 @@ int config_parse_unit_requires_mounts_for(
|
||||
for (;;) {
|
||||
_cleanup_free_ char *word = NULL, *resolved = NULL;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
return 0;
|
||||
if (r == -ENOMEM)
|
||||
@ -2882,7 +2883,7 @@ int config_parse_syscall_archs(
|
||||
_cleanup_free_ char *word = NULL;
|
||||
uint32_t a;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
return 0;
|
||||
if (r == -ENOMEM)
|
||||
@ -2986,7 +2987,7 @@ int config_parse_address_families(
|
||||
_cleanup_free_ char *word = NULL;
|
||||
int af;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
return 0;
|
||||
if (r == -ENOMEM)
|
||||
@ -3305,7 +3306,7 @@ int config_parse_delegate(
|
||||
_cleanup_free_ char *word = NULL;
|
||||
CGroupController cc;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
break;
|
||||
if (r == -ENOMEM)
|
||||
@ -3362,7 +3363,7 @@ int config_parse_device_allow(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = extract_first_word(&p, &path, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &path, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == -ENOMEM)
|
||||
return log_oom();
|
||||
if (r < 0) {
|
||||
@ -3433,7 +3434,7 @@ int config_parse_io_device_weight(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = extract_first_word(&p, &path, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &path, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == -ENOMEM)
|
||||
return log_oom();
|
||||
if (r < 0) {
|
||||
@ -3507,7 +3508,7 @@ int config_parse_io_device_latency(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = extract_first_word(&p, &path, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &path, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == -ENOMEM)
|
||||
return log_oom();
|
||||
if (r < 0) {
|
||||
@ -3581,7 +3582,7 @@ int config_parse_io_limit(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = extract_first_word(&p, &path, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &path, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == -ENOMEM)
|
||||
return log_oom();
|
||||
if (r < 0) {
|
||||
@ -3672,7 +3673,7 @@ int config_parse_blockio_device_weight(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = extract_first_word(&p, &path, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &path, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == -ENOMEM)
|
||||
return log_oom();
|
||||
if (r < 0) {
|
||||
@ -3750,7 +3751,7 @@ int config_parse_blockio_bandwidth(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = extract_first_word(&p, &path, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &path, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == -ENOMEM)
|
||||
return log_oom();
|
||||
if (r < 0) {
|
||||
@ -3870,7 +3871,7 @@ int config_parse_exec_directories(
|
||||
for (p = rvalue;;) {
|
||||
_cleanup_free_ char *word = NULL, *k = NULL;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == -ENOMEM)
|
||||
return log_oom();
|
||||
if (r < 0) {
|
||||
@ -4006,7 +4007,7 @@ int config_parse_namespace_path_strv(
|
||||
const char *w;
|
||||
bool ignore_enoent = false, shall_prefix = false;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
break;
|
||||
if (r == -ENOMEM)
|
||||
@ -4084,7 +4085,7 @@ int config_parse_temporary_filesystems(
|
||||
_cleanup_free_ char *word = NULL, *path = NULL, *resolved = NULL;
|
||||
const char *w;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
return 0;
|
||||
if (r == -ENOMEM)
|
||||
@ -4160,7 +4161,7 @@ int config_parse_bind_paths(
|
||||
char *s = NULL, *d = NULL;
|
||||
bool rbind = true, ignore_enoent = false;
|
||||
|
||||
r = extract_first_word(&p, &source, ":" WHITESPACE, EXTRACT_QUOTES|EXTRACT_DONT_COALESCE_SEPARATORS);
|
||||
r = extract_first_word(&p, &source, ":" WHITESPACE, EXTRACT_UNQUOTE|EXTRACT_DONT_COALESCE_SEPARATORS);
|
||||
if (r == 0)
|
||||
break;
|
||||
if (r == -ENOMEM)
|
||||
@ -4189,7 +4190,7 @@ int config_parse_bind_paths(
|
||||
|
||||
/* Optionally, the destination is specified. */
|
||||
if (p && p[-1] == ':') {
|
||||
r = extract_first_word(&p, &destination, ":" WHITESPACE, EXTRACT_QUOTES|EXTRACT_DONT_COALESCE_SEPARATORS);
|
||||
r = extract_first_word(&p, &destination, ":" WHITESPACE, EXTRACT_UNQUOTE|EXTRACT_DONT_COALESCE_SEPARATORS);
|
||||
if (r == -ENOMEM)
|
||||
return log_oom();
|
||||
if (r < 0) {
|
||||
@ -4218,7 +4219,7 @@ int config_parse_bind_paths(
|
||||
if (p && p[-1] == ':') {
|
||||
_cleanup_free_ char *options = NULL;
|
||||
|
||||
r = extract_first_word(&p, &options, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &options, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == -ENOMEM)
|
||||
return log_oom();
|
||||
if (r < 0) {
|
||||
|
@ -123,7 +123,7 @@ static int spawn_getter(const char *getter) {
|
||||
_cleanup_strv_free_ char **words = NULL;
|
||||
|
||||
assert(getter);
|
||||
r = strv_split_extract(&words, getter, WHITESPACE, EXTRACT_QUOTES);
|
||||
r = strv_split_extract(&words, getter, WHITESPACE, EXTRACT_UNQUOTE);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to split getter option: %m");
|
||||
|
||||
|
@ -252,7 +252,7 @@ int x11_read_data(Context *c, sd_bus_message *m) {
|
||||
if (in_section && first_word(l, "Option")) {
|
||||
_cleanup_strv_free_ char **a = NULL;
|
||||
|
||||
r = strv_split_extract(&a, l, WHITESPACE, EXTRACT_QUOTES);
|
||||
r = strv_split_extract(&a, l, WHITESPACE, EXTRACT_UNQUOTE);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
@ -276,7 +276,7 @@ int x11_read_data(Context *c, sd_bus_message *m) {
|
||||
} else if (!in_section && first_word(l, "Section")) {
|
||||
_cleanup_strv_free_ char **a = NULL;
|
||||
|
||||
r = strv_split_extract(&a, l, WHITESPACE, EXTRACT_QUOTES);
|
||||
r = strv_split_extract(&a, l, WHITESPACE, EXTRACT_UNQUOTE);
|
||||
if (r < 0)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -491,7 +491,7 @@ static int read_next_mapping(const char* filename,
|
||||
if (IN_SET(l[0], 0, '#'))
|
||||
continue;
|
||||
|
||||
r = strv_split_extract(&b, l, WHITESPACE, EXTRACT_QUOTES);
|
||||
r = strv_split_extract(&b, l, WHITESPACE, EXTRACT_UNQUOTE);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
@ -82,7 +82,7 @@ static int parse_search_domain(const char *string) {
|
||||
for (;;) {
|
||||
_cleanup_free_ char *word = NULL;
|
||||
|
||||
r = extract_first_word(&string, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&string, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0)
|
||||
|
@ -119,7 +119,7 @@ int manager_parse_search_domains_and_warn(Manager *m, const char *string) {
|
||||
for (;;) {
|
||||
_cleanup_free_ char *word = NULL;
|
||||
|
||||
r = extract_first_word(&string, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&string, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0)
|
||||
@ -308,7 +308,7 @@ int config_parse_dnssd_txt(const char *unit, const char *filename, unsigned line
|
||||
int r;
|
||||
|
||||
r = extract_first_word(&rvalue, &word, NULL,
|
||||
EXTRACT_QUOTES|EXTRACT_CUNESCAPE|EXTRACT_CUNESCAPE_RELAX);
|
||||
EXTRACT_UNQUOTE|EXTRACT_CUNESCAPE|EXTRACT_CUNESCAPE_RELAX);
|
||||
if (r == 0)
|
||||
break;
|
||||
if (r == -ENOMEM)
|
||||
|
@ -216,7 +216,7 @@ static int dns_trust_anchor_load_positive(DnsTrustAnchor *d, const char *path, u
|
||||
assert(d);
|
||||
assert(line);
|
||||
|
||||
r = extract_first_word(&p, &domain, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &domain, NULL, EXTRACT_UNQUOTE);
|
||||
if (r < 0)
|
||||
return log_warning_errno(r, "Unable to parse domain in line %s:%u: %m", path, line);
|
||||
|
||||
@ -386,7 +386,7 @@ static int dns_trust_anchor_load_negative(DnsTrustAnchor *d, const char *path, u
|
||||
assert(d);
|
||||
assert(line);
|
||||
|
||||
r = extract_first_word(&p, &domain, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &domain, NULL, EXTRACT_UNQUOTE);
|
||||
if (r < 0)
|
||||
return log_warning_errno(r, "Unable to parse line %s:%u: %m", path, line);
|
||||
|
||||
|
@ -325,12 +325,12 @@ static int bus_append_exec_command(sd_bus_message *m, const char *field, const c
|
||||
}
|
||||
|
||||
if (explicit_path) {
|
||||
r = extract_first_word(&eq, &path, NULL, EXTRACT_QUOTES|EXTRACT_CUNESCAPE);
|
||||
r = extract_first_word(&eq, &path, NULL, EXTRACT_UNQUOTE|EXTRACT_CUNESCAPE);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse path: %m");
|
||||
}
|
||||
|
||||
r = strv_split_extract(&l, eq, NULL, EXTRACT_QUOTES|EXTRACT_CUNESCAPE);
|
||||
r = strv_split_extract(&l, eq, NULL, EXTRACT_UNQUOTE|EXTRACT_CUNESCAPE);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse command line: %m");
|
||||
|
||||
@ -440,13 +440,13 @@ static int bus_append_cgroup_property(sd_bus_message *m, const char *field, cons
|
||||
|
||||
if (streq(field, "DisableControllers"))
|
||||
|
||||
return bus_append_strv(m, "DisableControllers", eq, EXTRACT_QUOTES);
|
||||
return bus_append_strv(m, "DisableControllers", eq, EXTRACT_UNQUOTE);
|
||||
|
||||
if (streq(field, "Delegate")) {
|
||||
|
||||
r = parse_boolean(eq);
|
||||
if (r < 0)
|
||||
return bus_append_strv(m, "DelegateControllers", eq, EXTRACT_QUOTES);
|
||||
return bus_append_strv(m, "DelegateControllers", eq, EXTRACT_UNQUOTE);
|
||||
|
||||
r = sd_bus_message_append(m, "(sv)", "Delegate", "b", r);
|
||||
if (r < 0)
|
||||
@ -819,7 +819,7 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con
|
||||
"RuntimeDirectory", "StateDirectory", "CacheDirectory", "LogsDirectory", "ConfigurationDirectory",
|
||||
"SupplementaryGroups", "SystemCallArchitectures"))
|
||||
|
||||
return bus_append_strv(m, field, eq, EXTRACT_QUOTES);
|
||||
return bus_append_strv(m, field, eq, EXTRACT_UNQUOTE);
|
||||
|
||||
if (STR_IN_SET(field, "SyslogLevel", "LogLevelMax"))
|
||||
|
||||
@ -881,7 +881,7 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con
|
||||
|
||||
if (STR_IN_SET(field, "Environment", "UnsetEnvironment", "PassEnvironment"))
|
||||
|
||||
return bus_append_strv(m, field, eq, EXTRACT_QUOTES|EXTRACT_CUNESCAPE);
|
||||
return bus_append_strv(m, field, eq, EXTRACT_UNQUOTE|EXTRACT_CUNESCAPE);
|
||||
|
||||
if (streq(field, "EnvironmentFile")) {
|
||||
|
||||
@ -1125,7 +1125,7 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con
|
||||
for (;;) {
|
||||
_cleanup_free_ char *word = NULL;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
break;
|
||||
if (r == -ENOMEM)
|
||||
@ -1212,7 +1212,7 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con
|
||||
bool ignore_enoent = false;
|
||||
uint64_t flags = MS_REC;
|
||||
|
||||
r = extract_first_word(&p, &source, ":" WHITESPACE, EXTRACT_QUOTES|EXTRACT_DONT_COALESCE_SEPARATORS);
|
||||
r = extract_first_word(&p, &source, ":" WHITESPACE, EXTRACT_UNQUOTE|EXTRACT_DONT_COALESCE_SEPARATORS);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse argument: %m");
|
||||
if (r == 0)
|
||||
@ -1225,7 +1225,7 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con
|
||||
}
|
||||
|
||||
if (p && p[-1] == ':') {
|
||||
r = extract_first_word(&p, &destination, ":" WHITESPACE, EXTRACT_QUOTES|EXTRACT_DONT_COALESCE_SEPARATORS);
|
||||
r = extract_first_word(&p, &destination, ":" WHITESPACE, EXTRACT_UNQUOTE|EXTRACT_DONT_COALESCE_SEPARATORS);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse argument: %m");
|
||||
if (r == 0)
|
||||
@ -1238,7 +1238,7 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con
|
||||
if (p && p[-1] == ':') {
|
||||
_cleanup_free_ char *options = NULL;
|
||||
|
||||
r = extract_first_word(&p, &options, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &options, NULL, EXTRACT_UNQUOTE);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse argument: %m");
|
||||
|
||||
@ -1297,7 +1297,7 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con
|
||||
_cleanup_free_ char *word = NULL, *path = NULL;
|
||||
const char *w;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse argument: %m");
|
||||
if (r == 0)
|
||||
@ -1446,7 +1446,7 @@ static int bus_append_service_property(sd_bus_message *m, const char *field, con
|
||||
_cleanup_free_ char *word = NULL;
|
||||
int val;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == 0)
|
||||
break;
|
||||
if (r == -ENOMEM)
|
||||
@ -1566,7 +1566,7 @@ static int bus_append_socket_property(sd_bus_message *m, const char *field, cons
|
||||
|
||||
if (streq(field, "Symlinks"))
|
||||
|
||||
return bus_append_strv(m, field, eq, EXTRACT_QUOTES);
|
||||
return bus_append_strv(m, field, eq, EXTRACT_UNQUOTE);
|
||||
|
||||
if (streq(field, "SocketProtocol"))
|
||||
|
||||
@ -1684,7 +1684,7 @@ static int bus_append_unit_property(sd_bus_message *m, const char *field, const
|
||||
if (unit_dependency_from_string(field) >= 0 ||
|
||||
STR_IN_SET(field, "Documentation", "RequiresMountsFor"))
|
||||
|
||||
return bus_append_strv(m, field, eq, EXTRACT_QUOTES);
|
||||
return bus_append_strv(m, field, eq, EXTRACT_UNQUOTE);
|
||||
|
||||
t = condition_type_from_string(field);
|
||||
if (t >= 0)
|
||||
|
@ -114,7 +114,7 @@ static int condition_test_kernel_command_line(Condition *c) {
|
||||
_cleanup_free_ char *word = NULL;
|
||||
bool found;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES|EXTRACT_RELAX);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE|EXTRACT_RELAX);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0)
|
||||
@ -207,6 +207,7 @@ static int condition_test_kernel_version(Condition *c) {
|
||||
OrderOperator order;
|
||||
struct utsname u;
|
||||
const char *p;
|
||||
bool first = true;
|
||||
|
||||
assert(c);
|
||||
assert(c->parameter);
|
||||
@ -215,13 +216,49 @@ static int condition_test_kernel_version(Condition *c) {
|
||||
assert_se(uname(&u) >= 0);
|
||||
|
||||
p = c->parameter;
|
||||
order = parse_order(&p);
|
||||
|
||||
/* No prefix? Then treat as glob string */
|
||||
if (order < 0)
|
||||
return fnmatch(skip_leading_chars(c->parameter, NULL), u.release, 0) == 0;
|
||||
for (;;) {
|
||||
_cleanup_free_ char *word = NULL;
|
||||
const char *s;
|
||||
int r;
|
||||
|
||||
return test_order(str_verscmp(u.release, skip_leading_chars(p, NULL)), order);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r < 0)
|
||||
return log_debug_errno(r, "Failed to parse condition string \"%s\": %m", p);
|
||||
if (r == 0)
|
||||
break;
|
||||
|
||||
s = strstrip(word);
|
||||
order = parse_order(&s);
|
||||
if (order >= 0) {
|
||||
s += strspn(s, WHITESPACE);
|
||||
if (isempty(s)) {
|
||||
if (first) {
|
||||
/* For backwards compatibility, allow whitespace between the operator and
|
||||
* value, without quoting, but only in the first expression. */
|
||||
word = mfree(word);
|
||||
r = extract_first_word(&p, &word, NULL, 0);
|
||||
if (r < 0)
|
||||
return log_debug_errno(r, "Failed to parse condition string \"%s\": %m", p);
|
||||
if (r == 0)
|
||||
return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Unexpected end of expression: %s", p);
|
||||
s = word;
|
||||
} else
|
||||
return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Unexpected end of expression: %s", p);
|
||||
}
|
||||
|
||||
r = test_order(str_verscmp(u.release, s), order);
|
||||
} else
|
||||
/* No prefix? Then treat as glob string */
|
||||
r = fnmatch(s, u.release, 0) == 0;
|
||||
|
||||
if (r == 0)
|
||||
return false;
|
||||
|
||||
first = false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static int condition_test_memory(Condition *c) {
|
||||
@ -684,31 +721,31 @@ static int condition_test_null(Condition *c) {
|
||||
int condition_test(Condition *c) {
|
||||
|
||||
static int (*const condition_tests[_CONDITION_TYPE_MAX])(Condition *c) = {
|
||||
[CONDITION_PATH_EXISTS] = condition_test_path_exists,
|
||||
[CONDITION_PATH_EXISTS_GLOB] = condition_test_path_exists_glob,
|
||||
[CONDITION_PATH_IS_DIRECTORY] = condition_test_path_is_directory,
|
||||
[CONDITION_PATH_IS_SYMBOLIC_LINK] = condition_test_path_is_symbolic_link,
|
||||
[CONDITION_PATH_IS_MOUNT_POINT] = condition_test_path_is_mount_point,
|
||||
[CONDITION_PATH_IS_READ_WRITE] = condition_test_path_is_read_write,
|
||||
[CONDITION_DIRECTORY_NOT_EMPTY] = condition_test_directory_not_empty,
|
||||
[CONDITION_FILE_NOT_EMPTY] = condition_test_file_not_empty,
|
||||
[CONDITION_FILE_IS_EXECUTABLE] = condition_test_file_is_executable,
|
||||
[CONDITION_KERNEL_COMMAND_LINE] = condition_test_kernel_command_line,
|
||||
[CONDITION_KERNEL_VERSION] = condition_test_kernel_version,
|
||||
[CONDITION_VIRTUALIZATION] = condition_test_virtualization,
|
||||
[CONDITION_SECURITY] = condition_test_security,
|
||||
[CONDITION_CAPABILITY] = condition_test_capability,
|
||||
[CONDITION_HOST] = condition_test_host,
|
||||
[CONDITION_AC_POWER] = condition_test_ac_power,
|
||||
[CONDITION_ARCHITECTURE] = condition_test_architecture,
|
||||
[CONDITION_NEEDS_UPDATE] = condition_test_needs_update,
|
||||
[CONDITION_FIRST_BOOT] = condition_test_first_boot,
|
||||
[CONDITION_USER] = condition_test_user,
|
||||
[CONDITION_GROUP] = condition_test_group,
|
||||
[CONDITION_PATH_EXISTS] = condition_test_path_exists,
|
||||
[CONDITION_PATH_EXISTS_GLOB] = condition_test_path_exists_glob,
|
||||
[CONDITION_PATH_IS_DIRECTORY] = condition_test_path_is_directory,
|
||||
[CONDITION_PATH_IS_SYMBOLIC_LINK] = condition_test_path_is_symbolic_link,
|
||||
[CONDITION_PATH_IS_MOUNT_POINT] = condition_test_path_is_mount_point,
|
||||
[CONDITION_PATH_IS_READ_WRITE] = condition_test_path_is_read_write,
|
||||
[CONDITION_DIRECTORY_NOT_EMPTY] = condition_test_directory_not_empty,
|
||||
[CONDITION_FILE_NOT_EMPTY] = condition_test_file_not_empty,
|
||||
[CONDITION_FILE_IS_EXECUTABLE] = condition_test_file_is_executable,
|
||||
[CONDITION_KERNEL_COMMAND_LINE] = condition_test_kernel_command_line,
|
||||
[CONDITION_KERNEL_VERSION] = condition_test_kernel_version,
|
||||
[CONDITION_VIRTUALIZATION] = condition_test_virtualization,
|
||||
[CONDITION_SECURITY] = condition_test_security,
|
||||
[CONDITION_CAPABILITY] = condition_test_capability,
|
||||
[CONDITION_HOST] = condition_test_host,
|
||||
[CONDITION_AC_POWER] = condition_test_ac_power,
|
||||
[CONDITION_ARCHITECTURE] = condition_test_architecture,
|
||||
[CONDITION_NEEDS_UPDATE] = condition_test_needs_update,
|
||||
[CONDITION_FIRST_BOOT] = condition_test_first_boot,
|
||||
[CONDITION_USER] = condition_test_user,
|
||||
[CONDITION_GROUP] = condition_test_group,
|
||||
[CONDITION_CONTROL_GROUP_CONTROLLER] = condition_test_control_group_controller,
|
||||
[CONDITION_NULL] = condition_test_null,
|
||||
[CONDITION_CPUS] = condition_test_cpus,
|
||||
[CONDITION_MEMORY] = condition_test_memory,
|
||||
[CONDITION_NULL] = condition_test_null,
|
||||
[CONDITION_CPUS] = condition_test_cpus,
|
||||
[CONDITION_MEMORY] = condition_test_memory,
|
||||
};
|
||||
|
||||
int r, b;
|
||||
|
@ -758,7 +758,7 @@ int config_parse_strv(
|
||||
for (;;) {
|
||||
char *word = NULL;
|
||||
|
||||
r = extract_first_word(&rvalue, &word, NULL, EXTRACT_QUOTES|EXTRACT_RETAIN_ESCAPE);
|
||||
r = extract_first_word(&rvalue, &word, NULL, EXTRACT_UNQUOTE|EXTRACT_RETAIN_ESCAPE);
|
||||
if (r == 0)
|
||||
break;
|
||||
if (r == -ENOMEM)
|
||||
|
@ -155,7 +155,7 @@ int parse_cpu_set_full(
|
||||
unsigned cpu_lower, cpu_upper;
|
||||
int r;
|
||||
|
||||
r = extract_first_word(&p, &word, WHITESPACE ",", EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, WHITESPACE ",", EXTRACT_UNQUOTE);
|
||||
if (r == -ENOMEM)
|
||||
return warn ? log_oom() : -ENOMEM;
|
||||
if (r < 0)
|
||||
|
@ -505,7 +505,7 @@ int mount_option_mangle(
|
||||
_cleanup_free_ char *word = NULL;
|
||||
const struct libmnt_optmap *ent;
|
||||
|
||||
r = extract_first_word(&p, &word, ",", EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, ",", EXTRACT_UNQUOTE);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0)
|
||||
|
@ -42,7 +42,7 @@ int secure_bits_from_string(const char *s) {
|
||||
for (p = s;;) {
|
||||
_cleanup_free_ char *word = NULL;
|
||||
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == -ENOMEM)
|
||||
return r;
|
||||
if (r <= 0)
|
||||
|
@ -1390,7 +1390,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
|
||||
|
||||
/* Parse columns */
|
||||
p = buffer;
|
||||
r = extract_many_words(&p, NULL, EXTRACT_QUOTES,
|
||||
r = extract_many_words(&p, NULL, EXTRACT_UNQUOTE,
|
||||
&action, &name, &id, &description, &home, &shell, NULL);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "[%s:%u] Syntax error.", fname, line);
|
||||
|
@ -322,7 +322,7 @@ static int handle_provides(SysvStub *s, unsigned line, const char *full_text, co
|
||||
for (;;) {
|
||||
_cleanup_free_ char *word = NULL, *m = NULL;
|
||||
|
||||
r = extract_first_word(&text, &word, NULL, EXTRACT_QUOTES|EXTRACT_RELAX);
|
||||
r = extract_first_word(&text, &word, NULL, EXTRACT_UNQUOTE|EXTRACT_RELAX);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "[%s:%u] Failed to parse word from provides string: %m", s->path, line);
|
||||
if (r == 0)
|
||||
@ -391,7 +391,7 @@ static int handle_dependencies(SysvStub *s, unsigned line, const char *full_text
|
||||
_cleanup_free_ char *word = NULL, *m = NULL;
|
||||
bool is_before;
|
||||
|
||||
r = extract_first_word(&text, &word, NULL, EXTRACT_QUOTES|EXTRACT_RELAX);
|
||||
r = extract_first_word(&text, &word, NULL, EXTRACT_UNQUOTE|EXTRACT_RELAX);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "[%s:%u] Failed to parse word from provides string: %m", s->path, line);
|
||||
if (r == 0)
|
||||
|
@ -43,77 +43,77 @@ static void test_condition_test_path(void) {
|
||||
|
||||
condition = condition_new(CONDITION_PATH_EXISTS, "/bin/s?", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_PATH_EXISTS_GLOB, "/bin/s?", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_PATH_EXISTS_GLOB, "/bin/s?", false, true);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_PATH_EXISTS, "/thiscertainlywontexist", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_PATH_EXISTS, "/thiscertainlywontexist", false, true);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_PATH_IS_DIRECTORY, "/bin", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_DIRECTORY_NOT_EMPTY, "/bin", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_FILE_NOT_EMPTY, "/bin/sh", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_FILE_IS_EXECUTABLE, "/bin/sh", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_FILE_IS_EXECUTABLE, "/etc/passwd", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_PATH_IS_MOUNT_POINT, "/proc", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_PATH_IS_MOUNT_POINT, "/", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_PATH_IS_MOUNT_POINT, "/bin", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_PATH_IS_READ_WRITE, "/tmp", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_PATH_IS_SYMBOLIC_LINK, "/dev/stdout", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
}
|
||||
|
||||
@ -133,12 +133,12 @@ static void test_condition_test_control_group_controller(void) {
|
||||
/* Invalid controllers are ignored */
|
||||
condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, "thisisnotarealcontroller", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, "thisisnotarealcontroller", false, true);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
assert_se(cg_mask_supported(&system_mask) >= 0);
|
||||
@ -151,23 +151,23 @@ static void test_condition_test_control_group_controller(void) {
|
||||
log_info("this controller is available");
|
||||
condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, local_controller_name, false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, local_controller_name, false, true);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
} else {
|
||||
log_info("this controller is unavailable");
|
||||
condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, local_controller_name, false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, local_controller_name, false, true);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
}
|
||||
}
|
||||
@ -177,12 +177,12 @@ static void test_condition_test_control_group_controller(void) {
|
||||
|
||||
condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, strempty(controller_name), false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, strempty(controller_name), false, true);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
}
|
||||
|
||||
@ -218,17 +218,17 @@ static void test_condition_test_host(void) {
|
||||
|
||||
condition = condition_new(CONDITION_HOST, sid, false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_HOST, "garbage value jjjjjjjjjjjjjj", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_HOST, sid, false, true);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
hostname = gethostname_malloc();
|
||||
@ -240,7 +240,7 @@ static void test_condition_test_host(void) {
|
||||
else {
|
||||
condition = condition_new(CONDITION_HOST, hostname, false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
}
|
||||
}
|
||||
@ -277,12 +277,12 @@ static void test_condition_test_kernel_command_line(void) {
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_COMMAND_LINE, "thisreallyshouldntbeonthekernelcommandline", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_COMMAND_LINE, "andthis=neither", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
}
|
||||
|
||||
@ -293,24 +293,26 @@ static void test_condition_test_kernel_version(void) {
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, "*thisreallyshouldntbeinthekernelversion*", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, "*", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
/* An artificially empty condition. It evaluates to true, but normally
|
||||
* such condition cannot be created, because the condition list is reset instead. */
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, "", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
assert_se(uname(&u) >= 0);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, u.release, false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
strshorten(u.release, 4);
|
||||
@ -318,59 +320,79 @@ static void test_condition_test_kernel_version(void) {
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, u.release, false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
/* 0.1.2 would be a very very very old kernel */
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, "> 0.1.2", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, ">0.1.2", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, "'>0.1.2' '<9.0.0'", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, "> 0.1.2 < 9.0.0", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition) == -EINVAL);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, ">", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition) == -EINVAL);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, ">= 0.1.2", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, "< 0.1.2", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, "<= 0.1.2", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, "= 0.1.2", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
/* 4711.8.15 is a very very very future kernel */
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, "< 4711.8.15", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, "<= 4711.8.15", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, "= 4711.8.15", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, "> 4711.8.15", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, ">= 4711.8.15", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
assert_se(uname(&u) >= 0);
|
||||
@ -378,31 +400,31 @@ static void test_condition_test_kernel_version(void) {
|
||||
v = strjoina(">=", u.release);
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, v, false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
v = strjoina("= ", u.release);
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, v, false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
v = strjoina("<=", u.release);
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, v, false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
v = strjoina("> ", u.release);
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, v, false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
v = strjoina("< ", u.release);
|
||||
condition = condition_new(CONDITION_KERNEL_VERSION, v, false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
}
|
||||
|
||||
@ -411,12 +433,12 @@ static void test_condition_test_null(void) {
|
||||
|
||||
condition = condition_new(CONDITION_NULL, NULL, false, false);
|
||||
assert_se(condition);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_NULL, NULL, false, true);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
}
|
||||
|
||||
@ -425,7 +447,7 @@ static void test_condition_test_security(void) {
|
||||
|
||||
condition = condition_new(CONDITION_SECURITY, "garbage oifdsjfoidsjoj", false, false);
|
||||
assert_se(condition);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_SECURITY, "selinux", false, true);
|
||||
|
@ -43,12 +43,12 @@ static void test_extract_first_word(void) {
|
||||
assert_se(isempty(p));
|
||||
|
||||
p = original = "\"foobar\" \'waldo\'";
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES) > 0);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE) > 0);
|
||||
assert_se(streq(t, "foobar"));
|
||||
free(t);
|
||||
assert_se(p == original + 9);
|
||||
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES) > 0);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE) > 0);
|
||||
assert_se(streq(t, "waldo"));
|
||||
free(t);
|
||||
assert_se(isempty(p));
|
||||
@ -64,7 +64,7 @@ static void test_extract_first_word(void) {
|
||||
assert_se(isempty(p));
|
||||
|
||||
p = original = "\"";
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES) == -EINVAL);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE) == -EINVAL);
|
||||
assert_se(p == original + 1);
|
||||
|
||||
p = original = "\'";
|
||||
@ -74,7 +74,7 @@ static void test_extract_first_word(void) {
|
||||
assert_se(isempty(p));
|
||||
|
||||
p = original = "\'";
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES) == -EINVAL);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE) == -EINVAL);
|
||||
assert_se(p == original + 1);
|
||||
|
||||
p = original = "\'fooo";
|
||||
@ -84,17 +84,17 @@ static void test_extract_first_word(void) {
|
||||
assert_se(isempty(p));
|
||||
|
||||
p = original = "\'fooo";
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES) == -EINVAL);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE) == -EINVAL);
|
||||
assert_se(p == original + 5);
|
||||
|
||||
p = original = "\'fooo";
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES|EXTRACT_RELAX) > 0);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE|EXTRACT_RELAX) > 0);
|
||||
assert_se(streq(t, "fooo"));
|
||||
free(t);
|
||||
assert_se(isempty(p));
|
||||
|
||||
p = original = "\"fooo";
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES|EXTRACT_RELAX) > 0);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE|EXTRACT_RELAX) > 0);
|
||||
assert_se(streq(t, "fooo"));
|
||||
free(t);
|
||||
assert_se(isempty(p));
|
||||
@ -106,7 +106,7 @@ static void test_extract_first_word(void) {
|
||||
assert_se(isempty(p));
|
||||
|
||||
p = original = "yay\'foo\'bar";
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES) > 0);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE) > 0);
|
||||
assert_se(streq(t, "yayfoobar"));
|
||||
free(t);
|
||||
assert_se(isempty(p));
|
||||
@ -135,7 +135,7 @@ static void test_extract_first_word(void) {
|
||||
free(t);
|
||||
assert_se(p == original + 13);
|
||||
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES|EXTRACT_CUNESCAPE) > 0);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE|EXTRACT_CUNESCAPE) > 0);
|
||||
assert_se(streq(t, "pi\360\237\222\251le"));
|
||||
free(t);
|
||||
assert_se(isempty(p));
|
||||
@ -169,7 +169,7 @@ static void test_extract_first_word(void) {
|
||||
assert_se(p == original + 5);
|
||||
|
||||
p = original = "\"foo\\";
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES|EXTRACT_RELAX) > 0);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE|EXTRACT_RELAX) > 0);
|
||||
assert_se(streq(t, "foo"));
|
||||
free(t);
|
||||
assert_se(isempty(p));
|
||||
@ -205,17 +205,17 @@ static void test_extract_first_word(void) {
|
||||
assert_se(isempty(p));
|
||||
|
||||
p = original = "\"foo\\";
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES|EXTRACT_CUNESCAPE_RELAX) == -EINVAL);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE|EXTRACT_CUNESCAPE_RELAX) == -EINVAL);
|
||||
assert_se(p == original + 5);
|
||||
|
||||
p = original = "\"foo\\";
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES|EXTRACT_CUNESCAPE_RELAX|EXTRACT_RELAX) > 0);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE|EXTRACT_CUNESCAPE_RELAX|EXTRACT_RELAX) > 0);
|
||||
assert_se(streq(t, "foo\\"));
|
||||
free(t);
|
||||
assert_se(isempty(p));
|
||||
|
||||
p = original = "\"foo\\";
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES|EXTRACT_CUNESCAPE|EXTRACT_CUNESCAPE_RELAX|EXTRACT_RELAX) > 0);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE|EXTRACT_CUNESCAPE|EXTRACT_CUNESCAPE_RELAX|EXTRACT_RELAX) > 0);
|
||||
assert_se(streq(t, "foo\\"));
|
||||
free(t);
|
||||
assert_se(isempty(p));
|
||||
@ -265,12 +265,12 @@ static void test_extract_first_word(void) {
|
||||
assert_se(isempty(p));
|
||||
|
||||
p = original = "-N ''";
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES) > 0);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE) > 0);
|
||||
assert_se(streq(t, "-N"));
|
||||
free(t);
|
||||
assert_se(p == original + 3);
|
||||
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES) > 0);
|
||||
assert_se(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE) > 0);
|
||||
assert_se(streq(t, ""));
|
||||
free(t);
|
||||
assert_se(isempty(p));
|
||||
@ -340,12 +340,12 @@ static void test_extract_first_word_and_warn(void) {
|
||||
assert_se(isempty(p));
|
||||
|
||||
p = original = "\"foobar\" \'waldo\'";
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_QUOTES, NULL, "fake", 1, original) > 0);
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_UNQUOTE, NULL, "fake", 1, original) > 0);
|
||||
assert_se(streq(t, "foobar"));
|
||||
free(t);
|
||||
assert_se(p == original + 9);
|
||||
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_QUOTES, NULL, "fake", 1, original) > 0);
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_UNQUOTE, NULL, "fake", 1, original) > 0);
|
||||
assert_se(streq(t, "waldo"));
|
||||
free(t);
|
||||
assert_se(isempty(p));
|
||||
@ -355,19 +355,19 @@ static void test_extract_first_word_and_warn(void) {
|
||||
assert_se(isempty(p));
|
||||
|
||||
p = original = "\"";
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_QUOTES, NULL, "fake", 1, original) == -EINVAL);
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_UNQUOTE, NULL, "fake", 1, original) == -EINVAL);
|
||||
assert_se(p == original + 1);
|
||||
|
||||
p = original = "\'";
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_QUOTES, NULL, "fake", 1, original) == -EINVAL);
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_UNQUOTE, NULL, "fake", 1, original) == -EINVAL);
|
||||
assert_se(p == original + 1);
|
||||
|
||||
p = original = "\'fooo";
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_QUOTES, NULL, "fake", 1, original) == -EINVAL);
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_UNQUOTE, NULL, "fake", 1, original) == -EINVAL);
|
||||
assert_se(p == original + 5);
|
||||
|
||||
p = original = "\'fooo";
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_QUOTES|EXTRACT_RELAX, NULL, "fake", 1, original) > 0);
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_UNQUOTE|EXTRACT_RELAX, NULL, "fake", 1, original) > 0);
|
||||
assert_se(streq(t, "fooo"));
|
||||
free(t);
|
||||
assert_se(isempty(p));
|
||||
@ -390,7 +390,7 @@ static void test_extract_first_word_and_warn(void) {
|
||||
free(t);
|
||||
assert_se(p == original + 13);
|
||||
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_QUOTES|EXTRACT_CUNESCAPE, NULL, "fake", 1, original) > 0);
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_UNQUOTE|EXTRACT_CUNESCAPE, NULL, "fake", 1, original) > 0);
|
||||
assert_se(streq(t, "pi\360\237\222\251le"));
|
||||
free(t);
|
||||
assert_se(isempty(p));
|
||||
@ -414,21 +414,21 @@ static void test_extract_first_word_and_warn(void) {
|
||||
assert_se(isempty(p));
|
||||
|
||||
p = original = "\"foo\\";
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_QUOTES, NULL, "fake", 1, original) == -EINVAL);
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_UNQUOTE, NULL, "fake", 1, original) == -EINVAL);
|
||||
assert_se(p == original + 5);
|
||||
|
||||
p = original = "\"foo\\";
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_QUOTES|EXTRACT_RELAX, NULL, "fake", 1, original) > 0);
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_UNQUOTE|EXTRACT_RELAX, NULL, "fake", 1, original) > 0);
|
||||
assert_se(streq(t, "foo"));
|
||||
free(t);
|
||||
assert_se(isempty(p));
|
||||
|
||||
p = original = "\"foo\\";
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_QUOTES|EXTRACT_CUNESCAPE, NULL, "fake", 1, original) == -EINVAL);
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_UNQUOTE|EXTRACT_CUNESCAPE, NULL, "fake", 1, original) == -EINVAL);
|
||||
assert_se(p == original + 5);
|
||||
|
||||
p = original = "\"foo\\";
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_QUOTES|EXTRACT_CUNESCAPE|EXTRACT_RELAX, NULL, "fake", 1, original) > 0);
|
||||
assert_se(extract_first_word_and_warn(&p, &t, NULL, EXTRACT_UNQUOTE|EXTRACT_CUNESCAPE|EXTRACT_RELAX, NULL, "fake", 1, original) > 0);
|
||||
assert_se(streq(t, "foo"));
|
||||
free(t);
|
||||
assert_se(isempty(p));
|
||||
@ -488,7 +488,7 @@ static void test_extract_many_words(void) {
|
||||
free(b);
|
||||
|
||||
p = original = "'foobar' wa\"ld\"i ";
|
||||
assert_se(extract_many_words(&p, NULL, EXTRACT_QUOTES, &a, &b, &c, NULL) == 2);
|
||||
assert_se(extract_many_words(&p, NULL, EXTRACT_UNQUOTE, &a, &b, &c, NULL) == 2);
|
||||
assert_se(isempty(p));
|
||||
assert_se(streq_ptr(a, "foobar"));
|
||||
assert_se(streq_ptr(b, "waldi"));
|
||||
|
@ -380,7 +380,7 @@ static void check(const char *test, char** expected, bool trailing) {
|
||||
for (;;) {
|
||||
_cleanup_free_ char *word = NULL;
|
||||
|
||||
r = extract_first_word(&test, &word, NULL, EXTRACT_QUOTES);
|
||||
r = extract_first_word(&test, &word, NULL, EXTRACT_UNQUOTE);
|
||||
if (r == 0) {
|
||||
assert_se(!trailing);
|
||||
break;
|
||||
|
@ -204,7 +204,7 @@ static void test_strv_unquote(const char *quoted, char **list) {
|
||||
char **t;
|
||||
int r;
|
||||
|
||||
r = strv_split_extract(&s, quoted, WHITESPACE, EXTRACT_QUOTES);
|
||||
r = strv_split_extract(&s, quoted, WHITESPACE, EXTRACT_UNQUOTE);
|
||||
assert_se(r == (int) strv_length(list));
|
||||
assert_se(s);
|
||||
j = strv_join(s, " | ");
|
||||
@ -221,7 +221,7 @@ static void test_invalid_unquote(const char *quoted) {
|
||||
char **s = NULL;
|
||||
int r;
|
||||
|
||||
r = strv_split_extract(&s, quoted, WHITESPACE, EXTRACT_QUOTES);
|
||||
r = strv_split_extract(&s, quoted, WHITESPACE, EXTRACT_UNQUOTE);
|
||||
assert_se(s == NULL);
|
||||
assert_se(r == -EINVAL);
|
||||
}
|
||||
|
@ -923,7 +923,7 @@ static int parse_xattrs_from_arg(Item *i) {
|
||||
for (;;) {
|
||||
_cleanup_free_ char *name = NULL, *value = NULL, *xattr = NULL;
|
||||
|
||||
r = extract_first_word(&p, &xattr, NULL, EXTRACT_QUOTES|EXTRACT_CUNESCAPE);
|
||||
r = extract_first_word(&p, &xattr, NULL, EXTRACT_UNQUOTE|EXTRACT_CUNESCAPE);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to parse extended attribute '%s', ignoring: %m", p);
|
||||
if (r <= 0)
|
||||
@ -2502,7 +2502,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer, bool
|
||||
r = extract_many_words(
|
||||
&buffer,
|
||||
NULL,
|
||||
EXTRACT_QUOTES,
|
||||
EXTRACT_UNQUOTE,
|
||||
&action,
|
||||
&path,
|
||||
&mode,
|
||||
|
@ -1,5 +1,9 @@
|
||||
[Unit]
|
||||
Description=Test for basic execution
|
||||
ConditionKernelVersion=">=3.0"
|
||||
ConditionKernelVersion=">=2.0" "<=60" "!=1.4"
|
||||
ConditionKernelVersion=" >= 2.0" " <= 60 " "!= 1.4"
|
||||
ConditionKernelVersion=" >= 2.0" " * " "*.*"
|
||||
|
||||
[Service]
|
||||
ExecStart=touch /tmp/a ; /bin/sh -c 'touch /tmp/b' ; touch /tmp/c
|
||||
|
Loading…
x
Reference in New Issue
Block a user