X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fload-fragment.c;h=0d5d841429aeaaae1a4212f05a06a44ff365d8ea;hb=41f9172f427bdbb8221c64029f78364b8dd4e527;hp=10681307cfc2fe3d7d628a2f6dca6aa3faae590c;hpb=9ed63f16131637fc0e76bd40b5452cfc45bccfc7;p=elogind.git diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 10681307c..0d5d84142 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -42,6 +42,7 @@ #include "securebits.h" #include "missing.h" #include "unit-name.h" +#include "unit-printf.h" #include "bus-errors.h" #include "utf8.h" #include "path-util.h" @@ -1469,6 +1470,7 @@ int config_parse_unit_condition_path( Unit *u = data; bool trigger, negate; Condition *c; + _cleanup_free_ char *p = NULL; assert(filename); assert(lvalue); @@ -1483,12 +1485,16 @@ int config_parse_unit_condition_path( if (negate) rvalue++; - if (!path_is_absolute(rvalue)) { - log_error("[%s:%u] Path in condition not absolute, ignoring: %s", filename, line, rvalue); + p = unit_full_printf(u, rvalue); + if (!p) + return -ENOMEM; + + if (!path_is_absolute(p)) { + log_error("[%s:%u] Path in condition not absolute, ignoring: %s", filename, line, p); return 0; } - c = condition_new(cond, rvalue, trigger, negate); + c = condition_new(cond, p, trigger, negate); if (!c) return -ENOMEM; @@ -1510,21 +1516,29 @@ int config_parse_unit_condition_string( Unit *u = data; bool trigger, negate; Condition *c; + _cleanup_free_ char *s = NULL; assert(filename); assert(lvalue); assert(rvalue); assert(data); - if ((trigger = rvalue[0] == '|')) + trigger = rvalue[0] == '|'; + if (trigger) rvalue++; - if ((negate = rvalue[0] == '!')) + negate = rvalue[0] == '!'; + if (negate) rvalue++; - if (!(c = condition_new(cond, rvalue, trigger, negate))) + s = unit_full_printf(u, rvalue); + if (!s) return -ENOMEM; + c = condition_new(cond, s, trigger, negate); + if (!c) + return log_oom(); + LIST_PREPEND(Condition, conditions, u->conditions, c); return 0; } @@ -2028,7 +2042,7 @@ int config_parse_syscall_filter( ExecContext *c = data; Unit *u = userdata; - bool invert; + bool invert = false; char *w; size_t l; char *state;