X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fload-fragment.c;h=7cf19b93ccb847a34ea320e4475bc240e2d025a2;hb=f44541bc934c6e2b02155559e9eeb17a13a09558;hp=b4da6a550eba27912a93996a5b2869511889c328;hpb=5369c77d2ee864ac0464d4adc0774ee70ba9c4bc;p=elogind.git diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index b4da6a550..7cf19b93c 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -1367,8 +1367,11 @@ int config_parse_timer(const char *unit, } v = new0(TimerValue, 1); - if (!v) + if (!v) { + if (c) + calendar_spec_free(c); return log_oom(); + } v->base = b; v->value = u; @@ -1752,6 +1755,62 @@ int config_parse_bus_policy( return 0; } +int config_parse_bus_endpoint_policy( + 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) { + + _cleanup_free_ char *name = NULL; + BusPolicyAccess access; + ExecContext *c = data; + char *access_str; + int r; + + assert(filename); + assert(lvalue); + assert(rvalue); + assert(data); + + name = strdup(rvalue); + if (!name) + return log_oom(); + + access_str = strpbrk(name, WHITESPACE); + if (!access_str) { + log_syntax(unit, LOG_ERR, filename, line, EINVAL, + "Invalid endpoint policy value '%s'", rvalue); + return 0; + } + + *access_str = '\0'; + access_str++; + access_str += strspn(access_str, WHITESPACE); + + access = bus_policy_access_from_string(access_str); + if (access <= _BUS_POLICY_ACCESS_INVALID || + access >= _BUS_POLICY_ACCESS_MAX) { + log_syntax(unit, LOG_ERR, filename, line, EINVAL, + "Invalid endpoint policy access type '%s'", access_str); + return 0; + } + + if (!c->bus_endpoint) { + r = bus_endpoint_new(&c->bus_endpoint); + + if (r < 0) + return r; + } + + return bus_endpoint_add_policy(c->bus_endpoint, name, access); +} + int config_parse_unit_env_file(const char *unit, const char *filename, unsigned line,