]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journald: only accept valid unit names for log streams
authorLennart Poettering <lennart@poettering.net>
Fri, 14 Jul 2017 17:03:32 +0000 (19:03 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 31 Jul 2017 16:20:28 +0000 (18:20 +0200)
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...)

src/journal/journald-stream.c

index 77551dc14b25520f677dcf43bc5ae0fe77c210f3..ec10d7aedf5268b33ab4cfac6966f1bcb24154a4 100644 (file)
@@ -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,14 +306,12 @@ 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  {
-                                s->unit_id = strdup(p);
-                                if (!s->unit_id)
-                                        return log_oom();
-                        }
+                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;