fe20ad692d
- Do not require grubby, lorax now takes care of grubby - cherry-picked a lot of patches from upstream
87 lines
3.4 KiB
Diff
87 lines
3.4 KiB
Diff
From 376cb2b4d456d50167756ec49176bf6cffd052a7 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
Date: Fri, 26 Jul 2013 12:57:33 -0400
|
|
Subject: [PATCH] journal: fix parsing of facility in syslog messages
|
|
|
|
In 49998b383 (journald: do not overwrite syslog facility when
|
|
parsing priority) journald started ignoring facility part when
|
|
reading service stderr to convert to syslog messages. In this
|
|
case it is fine, because only the priority is allowed.
|
|
|
|
But the same codepath is used for syslog messages, where the
|
|
facility should be used. Split the two codepaths by explicitly
|
|
specyfing whether the facility should be ignored or not.
|
|
|
|
https://bugzilla.redhat.com/show_bug.cgi?id=988814
|
|
---
|
|
src/journal/journald-stream.c | 2 +-
|
|
src/journal/journald-syslog.c | 12 ++++++++----
|
|
src/journal/journald-syslog.h | 2 +-
|
|
3 files changed, 10 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c
|
|
index e98fe94..9c4efec 100644
|
|
--- a/src/journal/journald-stream.c
|
|
+++ b/src/journal/journald-stream.c
|
|
@@ -90,7 +90,7 @@ static int stdout_stream_log(StdoutStream *s, const char *p) {
|
|
priority = s->priority;
|
|
|
|
if (s->level_prefix)
|
|
- syslog_parse_priority((char**) &p, &priority);
|
|
+ syslog_parse_priority((char**) &p, &priority, false);
|
|
|
|
if (s->forward_to_syslog || s->server->forward_to_syslog)
|
|
server_forward_syslog(s->server, syslog_fixup_facility(priority), s->identifier, p, &s->ucred, NULL);
|
|
diff --git a/src/journal/journald-syslog.c b/src/journal/journald-syslog.c
|
|
index 7cbb346..c2770a5 100644
|
|
--- a/src/journal/journald-syslog.c
|
|
+++ b/src/journal/journald-syslog.c
|
|
@@ -236,7 +236,7 @@ size_t syslog_parse_identifier(const char **buf, char **identifier, char **pid)
|
|
return e;
|
|
}
|
|
|
|
-void syslog_parse_priority(char **p, int *priority) {
|
|
+void syslog_parse_priority(char **p, int *priority, bool with_facility) {
|
|
int a = 0, b = 0, c = 0;
|
|
int k;
|
|
|
|
@@ -265,10 +265,14 @@ void syslog_parse_priority(char **p, int *priority) {
|
|
} else
|
|
return;
|
|
|
|
- if (a < 0 || b < 0 || c < 0)
|
|
+ if (a < 0 || b < 0 || c < 0 ||
|
|
+ (!with_facility && (a || b || c > 7)))
|
|
return;
|
|
|
|
- *priority = (*priority & LOG_FACMASK) | (a*100 + b*10 + c);
|
|
+ if (with_facility)
|
|
+ *priority = a*100 + b*10 + c;
|
|
+ else
|
|
+ *priority = (*priority & LOG_FACMASK) | c;
|
|
*p += k;
|
|
}
|
|
|
|
@@ -361,7 +365,7 @@ void server_process_syslog_message(
|
|
assert(buf);
|
|
|
|
orig = buf;
|
|
- syslog_parse_priority((char**) &buf, &priority);
|
|
+ syslog_parse_priority((char**) &buf, &priority, true);
|
|
|
|
if (s->forward_to_syslog)
|
|
forward_syslog_raw(s, priority, orig, ucred, tv);
|
|
diff --git a/src/journal/journald-syslog.h b/src/journal/journald-syslog.h
|
|
index 324b70e..8ccdb77 100644
|
|
--- a/src/journal/journald-syslog.h
|
|
+++ b/src/journal/journald-syslog.h
|
|
@@ -25,7 +25,7 @@
|
|
|
|
int syslog_fixup_facility(int priority) _const_;
|
|
|
|
-void syslog_parse_priority(char **p, int *priority);
|
|
+void syslog_parse_priority(char **p, int *priority, bool with_facility);
|
|
size_t syslog_parse_identifier(const char **buf, char **identifier, char **pid);
|
|
|
|
void server_forward_syslog(Server *s, int priority, const char *identifier, const char *message, struct ucred *ucred, struct timeval *tv);
|