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