1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-03-08 20:58:20 +03:00

Merge pull request #19022 from poettering/journal-dont-lose-facility

journald: don't lose facility of log streams on journald restart
This commit is contained in:
Lennart Poettering 2021-03-16 21:28:21 +01:00 committed by GitHub
commit 1a2c2e1222
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -334,6 +334,22 @@ static int stdout_stream_log(
return 0;
}
static int syslog_parse_priority_and_facility(const char *s) {
int prio, r;
/* Parses both facility and priority in one value, i.e. is different from log_level_from_string()
* which only parses the priority and refuses any facility value */
r = safe_atoi(s, &prio);
if (r < 0)
return r;
if (prio < 0 || prio > 999)
return -ERANGE;
return prio;
}
static int stdout_stream_line(StdoutStream *s, char *p, LineBreak line_break) {
char *orig;
int r;
@ -373,22 +389,22 @@ static int stdout_stream_line(StdoutStream *s, char *p, LineBreak line_break) {
s->state = STDOUT_STREAM_PRIORITY;
return 0;
case STDOUT_STREAM_PRIORITY:
r = safe_atoi(p, &s->priority);
if (r < 0 || s->priority < 0 || s->priority > 999) {
log_warning("Failed to parse log priority line.");
return -EINVAL;
}
case STDOUT_STREAM_PRIORITY: {
int priority;
priority = syslog_parse_priority_and_facility(p);
if (priority < 0)
return log_warning_errno(priority, "Failed to parse log priority line: %m");
s->priority = priority;
s->state = STDOUT_STREAM_LEVEL_PREFIX;
return 0;
}
case STDOUT_STREAM_LEVEL_PREFIX:
r = parse_boolean(p);
if (r < 0) {
log_warning("Failed to parse level prefix line.");
return -EINVAL;
}
if (r < 0)
return log_warning_errno(r, "Failed to parse level prefix line: %m");
s->level_prefix = r;
s->state = STDOUT_STREAM_FORWARD_TO_SYSLOG;
@ -396,10 +412,8 @@ static int stdout_stream_line(StdoutStream *s, char *p, LineBreak line_break) {
case STDOUT_STREAM_FORWARD_TO_SYSLOG:
r = parse_boolean(p);
if (r < 0) {
log_warning("Failed to parse forward to syslog line.");
return -EINVAL;
}
if (r < 0)
return log_warning_errno(r, "Failed to parse forward to syslog line: %m");
s->forward_to_syslog = r;
s->state = STDOUT_STREAM_FORWARD_TO_KMSG;
@ -407,10 +421,8 @@ static int stdout_stream_line(StdoutStream *s, char *p, LineBreak line_break) {
case STDOUT_STREAM_FORWARD_TO_KMSG:
r = parse_boolean(p);
if (r < 0) {
log_warning("Failed to parse copy to kmsg line.");
return -EINVAL;
}
if (r < 0)
return log_warning_errno(r, "Failed to parse copy to kmsg line: %m");
s->forward_to_kmsg = r;
s->state = STDOUT_STREAM_FORWARD_TO_CONSOLE;
@ -418,10 +430,8 @@ static int stdout_stream_line(StdoutStream *s, char *p, LineBreak line_break) {
case STDOUT_STREAM_FORWARD_TO_CONSOLE:
r = parse_boolean(p);
if (r < 0) {
log_warning("Failed to parse copy to console line.");
return -EINVAL;
}
if (r < 0)
return log_warning_errno(r, "Failed to parse copy to console line.");
s->forward_to_console = r;
s->state = STDOUT_STREAM_RUNNING;
@ -750,7 +760,7 @@ static int stdout_stream_load(StdoutStream *stream, const char *fname) {
if (priority) {
int p;
p = log_level_from_string(priority);
p = syslog_parse_priority_and_facility(priority);
if (p >= 0)
stream->priority = p;
}