X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fdbus-snapshot.c;h=2ae8574f5982e2b2ae16a4c8293f6710fc874653;hb=a6b26d9011de60e1c41f51e8d2aab1d2f7bbf0f5;hp=e69388a524c12137c96d8232600e9a9cc6286b1f;hpb=b30e2f4c18ad81b04e4314fd191a5d458553773c;p=elogind.git diff --git a/src/core/dbus-snapshot.c b/src/core/dbus-snapshot.c index e69388a52..2ae8574f5 100644 --- a/src/core/dbus-snapshot.c +++ b/src/core/dbus-snapshot.c @@ -6,22 +6,23 @@ Copyright 2010 Lennart Poettering systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. systemd is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + Lesser General Public License for more details. - You should have received a copy of the GNU General Public License + You should have received a copy of the GNU Lesser General Public License along with systemd; If not, see . ***/ #include "dbus-unit.h" #include "dbus-snapshot.h" #include "dbus-common.h" +#include "selinux-access.h" #define BUS_SNAPSHOT_INTERFACE \ " \n" \ @@ -52,42 +53,32 @@ static const BusProperty bus_snapshot_properties[] = { DBusHandlerResult bus_snapshot_message_handler(Unit *u, DBusConnection *c, DBusMessage *message) { Snapshot *s = SNAPSHOT(u); + _cleanup_dbus_message_unref_ DBusMessage *reply = NULL; - DBusMessage *reply = NULL; - DBusError error; + if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Snapshot", "Remove")) { - dbus_error_init(&error); + SELINUX_UNIT_ACCESS_CHECK(u, c, message, "stop"); - if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Snapshot", "Remove")) { + reply = dbus_message_new_method_return(message); + if (!reply) + return DBUS_HANDLER_RESULT_NEED_MEMORY; snapshot_remove(SNAPSHOT(u)); - if (!(reply = dbus_message_new_method_return(message))) - goto oom; - } else { const BusBoundProperties bps[] = { { "org.freedesktop.systemd1.Unit", bus_unit_properties, u }, { "org.freedesktop.systemd1.Snapshot", bus_snapshot_properties, s }, { NULL, } }; - return bus_default_message_handler(c, message, INTROSPECTION, INTERFACES_LIST, bps); - } - if (reply) { - if (!dbus_connection_send(c, reply, NULL)) - goto oom; + SELINUX_UNIT_ACCESS_CHECK(u, c, message, "status"); - dbus_message_unref(reply); + return bus_default_message_handler(c, message, INTROSPECTION, INTERFACES_LIST, bps); } - return DBUS_HANDLER_RESULT_HANDLED; - -oom: - if (reply) - dbus_message_unref(reply); + if (!bus_maybe_send_reply(c, message, reply)) + return DBUS_HANDLER_RESULT_NEED_MEMORY; - dbus_error_free(&error); - - return DBUS_HANDLER_RESULT_NEED_MEMORY; + return DBUS_HANDLER_RESULT_HANDLED; }