From: Michael Vogt Date: Mon, 22 Jun 2026 13:07:21 +0000 (+0200) Subject: shared: add OUTPUT_SKIP_UNPRINTABLE to log-show X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f05336401a7151ff240ee92e343487824a0163cf;p=thirdparty%2Fsystemd.git shared: add OUTPUT_SKIP_UNPRINTABLE to log-show This commit adds a new OUTPUT_SKIP_UNPRINTABLE to the OutputFlags and adds code in `update_json_data` and `json_escape` to honor it. When set all json fields that have unprintable data will be skipped and `null` is send instead. --- diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c index b67fbd57d55..513d76558e3 100644 --- a/src/shared/logs-show.c +++ b/src/shared/logs-show.c @@ -1039,7 +1039,8 @@ void json_escape( assert(f); assert(p); - if (!(flags & OUTPUT_SHOW_ALL) && l >= JSON_THRESHOLD) + if (((flags & OUTPUT_SKIP_UNPRINTABLE) && !utf8_is_printable(p, l)) || + (!(flags & OUTPUT_SHOW_ALL) && l >= JSON_THRESHOLD)) fputs("null", f); else if (!(flags & OUTPUT_SHOW_ALL) && !utf8_is_printable(p, l)) { @@ -1124,6 +1125,8 @@ static int update_json_data( r = sd_json_variant_new_null(&v); else if (utf8_is_printable(value, size)) r = sd_json_variant_new_stringn(&v, value, size); + else if (flags & OUTPUT_SKIP_UNPRINTABLE) + r = sd_json_variant_new_null(&v); else r = sd_json_variant_new_array_bytes(&v, value, size); if (r < 0) diff --git a/src/shared/output-mode.h b/src/shared/output-mode.h index 15f85117575..151bf6b4bce 100644 --- a/src/shared/output-mode.h +++ b/src/shared/output-mode.h @@ -43,12 +43,13 @@ typedef enum OutputFlags { OUTPUT_UTC = 1 << 6, OUTPUT_NO_HOSTNAME = 1 << 7, OUTPUT_TRUNCATE_NEWLINE = 1 << 8, + OUTPUT_SKIP_UNPRINTABLE = 1 << 9, /* Specific to process tree output */ - OUTPUT_KERNEL_THREADS = 1 << 9, - OUTPUT_CGROUP_XATTRS = 1 << 10, - OUTPUT_CGROUP_ID = 1 << 11, - OUTPUT_HIDE_EXTRA = 1 << 12, + OUTPUT_KERNEL_THREADS = 1 << 10, + OUTPUT_CGROUP_XATTRS = 1 << 11, + OUTPUT_CGROUP_ID = 1 << 12, + OUTPUT_HIDE_EXTRA = 1 << 13, } OutputFlags; sd_json_format_flags_t output_mode_to_json_format_flags(OutputMode m);