X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fdbus-execute.c;h=bf4a682d3a9b6f018fc5c3a2709bd38aafa42f61;hb=54d76c92868838e17d6aad0a3bb0cc7a5b11e35f;hp=4c3ad6582507e85307248586702a8a1930ac0c28;hpb=a049d1a9723b6608e45bf8f1a64dab5761dee555;p=elogind.git diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c index 4c3ad6582..bf4a682d3 100644 --- a/src/core/dbus-execute.c +++ b/src/core/dbus-execute.c @@ -850,6 +850,44 @@ int bus_exec_context_set_transient_property( unit_write_drop_in_private_format(u, mode, name, "Environment=%s\n", joined); } + return 1; + + } else if (rlimit_from_string(name) >= 0) { + uint64_t rl; + rlim_t x; + + r = sd_bus_message_read(message, "t", &rl); + if (r < 0) + return r; + + if (rl == (uint64_t) -1) + x = RLIM_INFINITY; + else { + x = (rlim_t) rl; + + if ((uint64_t) x != rl) + return -ERANGE; + } + + if (mode != UNIT_CHECK) { + int z; + + z = rlimit_from_string(name); + + if (!c->rlimit[z]) { + c->rlimit[z] = new(struct rlimit, 1); + if (!c->rlimit[z]) + return -ENOMEM; + } + + c->rlimit[z]->rlim_cur = c->rlimit[z]->rlim_max = x; + + if (x == RLIM_INFINITY) + unit_write_drop_in_private_format(u, mode, name, "%s=infinity\n", name); + else + unit_write_drop_in_private_format(u, mode, name, "%s=%" PRIu64 "\n", name, rl); + } + return 1; }