mirror of
https://github.com/systemd/systemd.git
synced 2024-11-01 09:21:26 +03:00
journald: only accept valid unit names for log streams
Let's be a bit stricter in what we end up logging: ignore invalid unit name specifications. Let's validate all input! As we ignore unit names passed in from unprivileged clients anyway the effect of this additional check is minimal. (Also, no need to initialize the identifier/unit_id fields of stream objects to NULL if empty strings are passed, the default is NULL anyway...)
This commit is contained in:
parent
ec6fe7c86a
commit
7a1f1aaa78
@ -46,6 +46,7 @@
|
||||
#include "stdio-util.h"
|
||||
#include "string-util.h"
|
||||
#include "syslog-util.h"
|
||||
#include "unit-name.h"
|
||||
|
||||
#define STDOUT_STREAMS_MAX 4096
|
||||
|
||||
@ -295,9 +296,7 @@ static int stdout_stream_line(StdoutStream *s, char *p) {
|
||||
switch (s->state) {
|
||||
|
||||
case STDOUT_STREAM_IDENTIFIER:
|
||||
if (isempty(p))
|
||||
s->identifier = NULL;
|
||||
else {
|
||||
if (!isempty(p)) {
|
||||
s->identifier = strdup(p);
|
||||
if (!s->identifier)
|
||||
return log_oom();
|
||||
@ -307,15 +306,13 @@ static int stdout_stream_line(StdoutStream *s, char *p) {
|
||||
return 0;
|
||||
|
||||
case STDOUT_STREAM_UNIT_ID:
|
||||
if (s->ucred.uid == 0) {
|
||||
if (isempty(p))
|
||||
s->unit_id = NULL;
|
||||
else {
|
||||
if (s->ucred.uid == 0 &&
|
||||
unit_name_is_valid(p, UNIT_NAME_PLAIN|UNIT_NAME_INSTANCE)) {
|
||||
|
||||
s->unit_id = strdup(p);
|
||||
if (!s->unit_id)
|
||||
return log_oom();
|
||||
}
|
||||
}
|
||||
|
||||
s->state = STDOUT_STREAM_PRIORITY;
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user