]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-bus: Log extra fields when processing bus message
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 16 Aug 2022 19:40:04 +0000 (21:40 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Sun, 8 Jan 2023 15:31:16 +0000 (16:31 +0100)
src/libsystemd/sd-bus/bus-message.c
src/libsystemd/sd-bus/bus-message.h
src/libsystemd/sd-bus/sd-bus.c

index 07168f660b8af907744ec210fb86a1d181f1b081..9719f97c028b82654e2822f7584795b6f7e9f7b8 100644 (file)
@@ -4667,3 +4667,26 @@ _public_ int sd_bus_message_sensitive(sd_bus_message *m) {
         m->sensitive = true;
         return 0;
 }
+
+char** bus_message_make_log_fields(sd_bus_message *m) {
+        _cleanup_strv_free_ char **strv = NULL;
+
+        assert(m);
+
+        (void) strv_extend_assignment(&strv, "DBUS_MESSAGE_TYPE", bus_message_type_to_string(m->header->type));
+        (void) strv_extend_assignment(&strv, "DBUS_SENDER", sd_bus_message_get_sender(m));
+        (void) strv_extend_assignment(&strv, "DBUS_DESTINATION", sd_bus_message_get_destination(m));
+        (void) strv_extend_assignment(&strv, "DBUS_PATH", sd_bus_message_get_path(m));
+        (void) strv_extend_assignment(&strv, "DBUS_INTERFACE", sd_bus_message_get_interface(m));
+        (void) strv_extend_assignment(&strv, "DBUS_MEMBER", sd_bus_message_get_member(m));
+
+        (void) strv_extendf(&strv, "DBUS_MESSAGE_COOKIE=%" PRIu64, BUS_MESSAGE_COOKIE(m));
+        if (m->reply_cookie != 0)
+                (void) strv_extendf(&strv, "DBUS_MESSAGE_REPLY_COOKIE=%" PRIu64, m->reply_cookie);
+
+        (void) strv_extend_assignment(&strv, "DBUS_SIGNATURE", m->root_container.signature);
+        (void) strv_extend_assignment(&strv, "DBUS_ERROR_NAME", m->error.name);
+        (void) strv_extend_assignment(&strv, "DBUS_ERROR_MESSAGE", m->error.message);
+
+        return TAKE_PTR(strv);
+}
index 0439fbd45a8b18ee3443d2c171fa7ebb8cacdba2..76f0d853d36100099d4f43a76dd807fc5008306d 100644 (file)
@@ -187,3 +187,5 @@ void bus_message_set_sender_local(sd_bus *bus, sd_bus_message *m);
 
 sd_bus_message* bus_message_ref_queued(sd_bus_message *m, sd_bus *bus);
 sd_bus_message* bus_message_unref_queued(sd_bus_message *m, sd_bus *bus);
+
+char** bus_message_make_log_fields(sd_bus_message *m);
index d85dcc52c17d47705f5ee8c14a9f4b54a9ae1375..10796e25c7479a94d7182bf5452bcdede55cb191 100644 (file)
@@ -2928,6 +2928,7 @@ static int process_fd_check(sd_bus *bus, sd_bus_message *m) {
 }
 
 static int process_message(sd_bus *bus, sd_bus_message *m) {
+        _unused_ _cleanup_(log_context_freep) LogContext *c = NULL;
         int r;
 
         assert(bus);
@@ -2936,6 +2937,9 @@ static int process_message(sd_bus *bus, sd_bus_message *m) {
         bus->current_message = m;
         bus->iteration_counter++;
 
+        if (log_context_enabled())
+                c = log_context_new_consume(bus_message_make_log_fields(m));
+
         log_debug_bus_message(m);
 
         r = process_hello(bus, m);