X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fbus-proxyd%2Fbus-proxyd.c;h=2f26f81a366ba3136e169d469ee55e9b504448bb;hb=f0a4c7391c7c682b658974b82390d332197740e2;hp=a6554aba3b8da00ab2fb70c02f595106b573ac8e;hpb=8573b68fecc65a0cd285e4c5e288831856948e62;p=elogind.git diff --git a/src/bus-proxyd/bus-proxyd.c b/src/bus-proxyd/bus-proxyd.c index a6554aba3..2f26f81a3 100644 --- a/src/bus-proxyd/bus-proxyd.c +++ b/src/bus-proxyd/bus-proxyd.c @@ -509,7 +509,7 @@ static int peer_is_privileged(sd_bus *bus, sd_bus_message *m) { return false; } -static int process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m) { +static int process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m, Policy *policy, const struct ucred *ucred) { int r; assert(a); @@ -859,6 +859,9 @@ static int process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m) { if (r < 0) return synthetic_reply_method_errno(m, r, NULL); + if (!policy_check_own(policy, ucred, name)) + return synthetic_reply_method_errno(m, -EPERM, NULL); + if (!service_name_is_valid(name)) return synthetic_reply_method_errno(m, -EINVAL, NULL); if ((flags & ~(BUS_NAME_ALLOW_REPLACEMENT|BUS_NAME_REPLACE_EXISTING|BUS_NAME_DO_NOT_QUEUE)) != 0) @@ -1440,7 +1443,7 @@ int main(int argc, char *argv[]) { goto finish; } - k = process_driver(a, b, m); + k = process_driver(a, b, m, &policy, &ucred); if (k < 0) { r = k; log_error("Failed to process driver calls: %s", strerror(-r));