]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/journal/journald-wall.c
Merge pull request #17438 from anitazha/systoomd_quick
[thirdparty/systemd.git] / src / journal / journald-wall.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2
3 #include "alloc-util.h"
4 #include "format-util.h"
5 #include "journald-server.h"
6 #include "journald-wall.h"
7 #include "process-util.h"
8 #include "string-util.h"
9 #include "utmp-wtmp.h"
10
11 void server_forward_wall(
12 Server *s,
13 int priority,
14 const char *identifier,
15 const char *message,
16 const struct ucred *ucred) {
17
18 _cleanup_free_ char *ident_buf = NULL, *l_buf = NULL;
19 const char *l;
20 int r;
21
22 assert(s);
23 assert(message);
24
25 if (LOG_PRI(priority) > s->max_level_wall)
26 return;
27
28 if (ucred) {
29 if (!identifier) {
30 (void) get_process_comm(ucred->pid, &ident_buf);
31 identifier = ident_buf;
32 }
33
34 if (asprintf(&l_buf, "%s["PID_FMT"]: %s", strempty(identifier), ucred->pid, message) < 0) {
35 log_oom();
36 return;
37 }
38
39 l = l_buf;
40
41 } else if (identifier) {
42
43 l = l_buf = strjoin(identifier, ": ", message);
44 if (!l_buf) {
45 log_oom();
46 return;
47 }
48 } else
49 l = message;
50
51 r = utmp_wall(l, "systemd-journald", NULL, NULL, NULL);
52 if (r < 0)
53 log_debug_errno(r, "Failed to send wall message: %m");
54 }