From bf882696e8fec00e053fb8781aed8caeedbe41b0 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sun, 17 Dec 2017 20:38:38 +0200 Subject: [PATCH] log: Add "disable log prefix" flag to log lines --- src/lib/failures.c | 20 ++++++++++++++------ src/lib/failures.h | 1 + src/log/log-connection.c | 2 ++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/lib/failures.c b/src/lib/failures.c index c7ad8578cb..eb9966312c 100644 --- a/src/lib/failures.c +++ b/src/lib/failures.c @@ -16,6 +16,8 @@ #include #include +#define LOG_TYPE_FLAG_DISABLE_LOG_PREFIX 0x80 + const char *failure_log_type_prefixes[LOG_TYPE_COUNT] = { "Debug: ", "Info: ", @@ -651,32 +653,38 @@ internal_handler(const struct failure_context *ctx, return ret; } -static bool line_is_ok(const char *line) +static bool line_parse_prefix(const char *line, enum log_type *log_type_r, + bool *replace_prefix_r) { if (*line != 1) return FALSE; - if (line[1] == '\0') { + unsigned char log_type = (line[1] & 0x7f); + if (log_type == '\0') { i_warning("Broken log line follows (type=NUL)"); return FALSE; } + log_type--; - if (line[1]-1 > LOG_TYPE_OPTION) { - i_warning("Broken log line follows (type=%d)", line[1]-1); + if (log_type > LOG_TYPE_OPTION) { + i_warning("Broken log line follows (type=%d)", log_type); return FALSE; } + *log_type_r = log_type; + *replace_prefix_r = (line[1] & LOG_TYPE_FLAG_DISABLE_LOG_PREFIX) != 0; return TRUE; } void i_failure_parse_line(const char *line, struct failure_line *failure) { + i_zero(failure); - if (!line_is_ok(line)) { + if (!line_parse_prefix(line, &failure->log_type, + &failure->disable_log_prefix)) { failure->log_type = LOG_TYPE_ERROR; failure->text = line; return; } - failure->log_type = line[1] - 1; line += 2; failure->text = line; diff --git a/src/lib/failures.h b/src/lib/failures.h index 3b4a53c8d6..ab18e4c877 100644 --- a/src/lib/failures.h +++ b/src/lib/failures.h @@ -29,6 +29,7 @@ enum log_type { struct failure_line { pid_t pid; enum log_type log_type; + bool disable_log_prefix; const char *text; }; diff --git a/src/log/log-connection.c b/src/log/log-connection.c index aa8d8450cd..13ee6351fa 100644 --- a/src/log/log-connection.c +++ b/src/log/log-connection.c @@ -271,6 +271,8 @@ log_it(struct log_connection *log, const char *line, failure_ctx.type = failure.log_type; failure_ctx.timestamp = tm; failure_ctx.timestamp_usecs = log_time->tv_usec; + if (failure.disable_log_prefix) + failure_ctx.log_prefix = ""; prefix = client != NULL && client->prefix != NULL ? client->prefix : log->default_prefix; -- 2.47.3