chiark / gitweb /
bus: always talk to the full dbus driver object
[elogind.git] / src / libsystemd-bus / bus-message.c
index d6888738e1063989594f2bc762146551f16a3925..39a85d58f71dc20525bc9ff725d3fb9bad47dc55 100644 (file)
@@ -5133,6 +5133,14 @@ int bus_message_parse_fields(sd_bus_message *m) {
                 break;
         }
 
+        /* Refuse non-local messages that claim they are local */
+        if (streq_ptr(m->path, "/org/freedesktop/DBus/Local"))
+                return -EBADMSG;
+        if (streq_ptr(m->interface, "org.freedesktop.DBus.Local"))
+                return -EBADMSG;
+        if (streq_ptr(m->sender, "org.freedesktop.DBus.Local"))
+                return -EBADMSG;
+
         m->root_container.end = BUS_MESSAGE_BODY_SIZE(m);
 
         if (BUS_MESSAGE_IS_GVARIANT(m)) {
@@ -5516,3 +5524,13 @@ int bus_message_remarshal(sd_bus *bus, sd_bus_message **m) {
 
         return 0;
 }
+
+int bus_message_append_sender(sd_bus_message *m, const char *sender) {
+        assert(m);
+        assert(sender);
+
+        assert_return(!m->sealed, -EPERM);
+        assert_return(!m->sender, -EPERM);
+
+        return message_append_field_string(m, BUS_MESSAGE_HEADER_SENDER, SD_BUS_TYPE_STRING, sender, &m->sender);
+}