diff options
Diffstat (limited to 'src/libsystemd-bus')
-rw-r--r-- | src/libsystemd-bus/bus-dump.c | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/src/libsystemd-bus/bus-dump.c b/src/libsystemd-bus/bus-dump.c index 8c44326f90..8231cfabcd 100644 --- a/src/libsystemd-bus/bus-dump.c +++ b/src/libsystemd-bus/bus-dump.c @@ -30,6 +30,20 @@ #include "bus-type.h" #include "bus-dump.h" +static char *indent(unsigned level) { + char *p; + + p = new(char, 2 + level + 1); + if (!p) + return NULL; + + p[0] = p[1] = ' '; + memset(p + 2, '\t', level); + p[2 + level] = 0; + + return p; +} + int bus_message_dump(sd_bus_message *m, FILE *f, bool with_header) { const char *u = NULL, *uu = NULL, *s = NULL; char **cmdline = NULL; @@ -37,6 +51,7 @@ int bus_message_dump(sd_bus_message *m, FILE *f, bool with_header) { int r; uid_t owner, audit_loginuid; uint32_t audit_sessionid; + bool audit_sessionid_is_set = false, audit_loginuid_is_set = false; assert(m); @@ -45,10 +60,12 @@ int bus_message_dump(sd_bus_message *m, FILE *f, bool with_header) { if (with_header) { fprintf(f, - "%sEndian=%c Type=%s%s%s Flags=%u Version=%u Serial=%u ", - draw_special_char(DRAW_TRIANGULAR_BULLET), - m->header->endian, + "%s%s%sType=%s%s%s Endian=%c Flags=%u Version=%u Serial=%u ", + m->header->type == SD_BUS_MESSAGE_METHOD_ERROR ? ansi_highlight_red() : + m->header->type == SD_BUS_MESSAGE_METHOD_RETURN ? ansi_highlight_green() : + m->header->type != SD_BUS_MESSAGE_SIGNAL ? ansi_highlight() : "", draw_special_char(DRAW_TRIANGULAR_BULLET), ansi_highlight_off(), ansi_highlight(), bus_message_type_to_string(m->header->type), ansi_highlight_off(), + m->header->endian, m->header->flags, m->header->version, BUS_MESSAGE_SERIAL(m)); @@ -142,12 +159,16 @@ int bus_message_dump(sd_bus_message *m, FILE *f, bool with_header) { sd_bus_message_get_session(m, &s); if (s) fprintf(f, " Session=%s", s); - if (sd_bus_message_get_audit_loginuid(m, &audit_loginuid) >= 0) + if (sd_bus_message_get_audit_loginuid(m, &audit_loginuid) >= 0) { + audit_loginuid_is_set = true; fprintf(f, " AuditLoginUID=%lu", (unsigned long) audit_loginuid); - if (sd_bus_message_get_audit_sessionid(m, &audit_sessionid) >= 0) + } + if (sd_bus_message_get_audit_sessionid(m, &audit_sessionid) >= 0) { + audit_sessionid_is_set = true; fprintf(f, " AuditSessionID=%lu", (unsigned long) audit_sessionid); + } - if (u || uu || s || audit_loginuid || audit_sessionid) + if (u || uu || s || audit_loginuid_is_set || audit_sessionid_is_set) fputs("\n", f); r = sd_bus_message_has_effective_cap(m, 0); @@ -162,6 +183,7 @@ int bus_message_dump(sd_bus_message *m, FILE *f, bool with_header) { if (r > 0) fprintf(f, "|%s", cap_to_name(c)); } + fputs("\n", f); } } @@ -171,7 +193,7 @@ int bus_message_dump(sd_bus_message *m, FILE *f, bool with_header) { return r; } - fprintf(f, "MESSAGE \"%s\" {\n", strempty(m->root_container.signature)); + fprintf(f, " MESSAGE \"%s\" {\n", strempty(m->root_container.signature)); for(;;) { _cleanup_free_ char *prefix = NULL; @@ -208,7 +230,7 @@ int bus_message_dump(sd_bus_message *m, FILE *f, bool with_header) { level--; - prefix = strrep("\t", level); + prefix = indent(level); if (!prefix) return log_oom(); @@ -216,7 +238,7 @@ int bus_message_dump(sd_bus_message *m, FILE *f, bool with_header) { continue; } - prefix = strrep("\t", level); + prefix = indent(level); if (!prefix) return log_oom(); @@ -308,6 +330,6 @@ int bus_message_dump(sd_bus_message *m, FILE *f, bool with_header) { } } - fprintf(f, "};\n"); + fprintf(f, " };\n\n"); return 0; } |