forked from pool/systemd
c14a1e98d3
- Disable blkrrpart for SLES12 and below - Add upstream patch 1054-udev-exclude-MD-from-block-device-ownership-event-lo.patch - Add with condition blkrrpart to be able to disable the patches 1025, 1027, 1029, 1030, 1031, 1032, 1033, 1034, 1037, and 1054 which uses the BLKRRPART ioctl for e.g. synthesize change events which may interfere with other tools like parted. - Update handle-disable_caplock-and-compose_table-and-kbd_rate.patch, handle-numlock-value-in-etc-sysconfig-keyboard.patch: read /etc/vconsole.conf after /etc/sysconfig/(keyboard,console) otherwise empty value in /etc/sysconfig/keyboard might override /etc/vconsole.conf values. - Update : 0001-journal-compress-return-early-in-uncompress_startswi.patch 0002-util-don-t-consider-tabs-special-in-string_has_cc-an.patch 0002-vconsole-setup-run-setfont-before-loadkeys.patch 0003-core-never-consider-failure-when-reading-drop-ins-fa.patch 0003-fsck-consider-a-fsck-implementation-linked-to-bin-tr.patch apply-ACL-for-nvidia-device-nodes.patch keep-crypt-password-prompt.patch log-target-null-instead-kmsg.patch parse-crypttab-for-noauto-option.patch set-and-use-default-logconsole.patch: fix all warnings in code - Remove 0001-compress-fix-return-value.patch: not relevant to systemd v210 code. - Also change udev-generate-peristent-rule to udev-generate-persistent-rule OBS-URL: https://build.opensuse.org/request/show/242359 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/systemd?expand=0&rev=195
166 lines
5.1 KiB
Diff
166 lines
5.1 KiB
Diff
Use and set default logging console for both journald and kernel messages
|
|
|
|
---
|
|
src/journal/journald-console.c | 96 +++++++++++++++++++++++++++++++++++++++++
|
|
src/journal/journald-console.h | 4 +
|
|
src/journal/journald-server.c | 5 ++
|
|
3 files changed, 105 insertions(+)
|
|
|
|
Index: src/journal/journald-console.c
|
|
===================================================================
|
|
--- src/journal/journald-console.c.orig
|
|
+++ src/journal/journald-console.c
|
|
@@ -23,6 +23,14 @@
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
#include <sys/socket.h>
|
|
+#ifdef HAVE_SYSV_COMPAT
|
|
+# include <linux/tiocl.h>
|
|
+# include <linux/vt.h>
|
|
+# include <sys/ioctl.h>
|
|
+# include <sys/klog.h>
|
|
+# include <errno.h>
|
|
+# include "util.h"
|
|
+#endif
|
|
|
|
#include "fileio.h"
|
|
#include "journald-server.h"
|
|
@@ -43,6 +51,74 @@ static bool prefix_timestamp(void) {
|
|
return cached_printk_time;
|
|
}
|
|
|
|
+#ifdef HAVE_SYSV_COMPAT
|
|
+void defaul_tty_path(Server *s)
|
|
+{
|
|
+ static const char list[] = "/dev/tty10\0" "/dev/console\0";
|
|
+ const char *vc;
|
|
+
|
|
+ if (s->tty_path)
|
|
+ return;
|
|
+
|
|
+ NULSTR_FOREACH(vc, list) {
|
|
+ _cleanup_close_ int fd = -1;
|
|
+
|
|
+ if (access(vc, F_OK) < 0)
|
|
+ continue;
|
|
+
|
|
+ fd = open_terminal(vc, O_WRONLY|O_NOCTTY|O_CLOEXEC);
|
|
+ if (fd < 0)
|
|
+ continue;
|
|
+
|
|
+ s->tty_path = strdup(vc);
|
|
+ break;
|
|
+ }
|
|
+}
|
|
+
|
|
+void klogconsole(Server *s)
|
|
+{
|
|
+ _cleanup_free_ char *klogconsole_params = NULL;
|
|
+ _cleanup_close_ int fd = -1;
|
|
+ const char *vc = s->tty_path;
|
|
+ const char *num;
|
|
+ int tiocl[2];
|
|
+ int r;
|
|
+
|
|
+ if (!vc || *vc == 0 || !strneq("/dev/tty", vc, 8))
|
|
+ return;
|
|
+
|
|
+ num = vc + strcspn(vc, "0123456789");
|
|
+ if (safe_atoi(num, &r) < 0)
|
|
+ return;
|
|
+
|
|
+ if (access(vc, F_OK) < 0)
|
|
+ return;
|
|
+
|
|
+ fd = open_terminal(vc, O_RDWR|O_NOCTTY|O_CLOEXEC);
|
|
+ if (fd < 0)
|
|
+ return;
|
|
+
|
|
+ tiocl[0] = TIOCL_SETKMSGREDIRECT;
|
|
+ tiocl[1] = r;
|
|
+
|
|
+ if (ioctl(fd, TIOCLINUX, tiocl) < 0)
|
|
+ return;
|
|
+
|
|
+ zero(klogconsole_params);
|
|
+ r = parse_env_file("/etc/sysconfig/boot", NEWLINE,
|
|
+ "KLOGCONSOLE_PARAMS", &klogconsole_params,
|
|
+ NULL);
|
|
+ if (r < 0)
|
|
+ return;
|
|
+ if (!klogconsole_params || *klogconsole_params == 0)
|
|
+ return;
|
|
+
|
|
+ num = klogconsole_params + strcspn(klogconsole_params, "0123456789");
|
|
+ if (safe_atoi(num, &r) == 0)
|
|
+ klogctl(8, 0, r);
|
|
+}
|
|
+#endif
|
|
+
|
|
void server_forward_console(
|
|
Server *s,
|
|
int priority,
|
|
@@ -64,6 +140,10 @@ void server_forward_console(
|
|
if (LOG_PRI(priority) > s->max_level_console)
|
|
return;
|
|
|
|
+ /* Do not write security/authorization (private) messages to console */
|
|
+ if (priority & LOG_AUTHPRIV)
|
|
+ return;
|
|
+
|
|
/* First: timestamp */
|
|
if (prefix_timestamp()) {
|
|
assert_se(clock_gettime(CLOCK_MONOTONIC, &ts) == 0);
|
|
@@ -101,7 +181,23 @@ void server_forward_console(
|
|
fd = open_terminal(tty, O_WRONLY|O_NOCTTY|O_CLOEXEC);
|
|
if (fd < 0) {
|
|
log_debug("Failed to open %s for logging: %m", tty);
|
|
+#ifdef HAVE_SYSV_COMPAT
|
|
+ if (fd != -ENOENT && fd != -ENODEV)
|
|
+ return;
|
|
+ if (tty != s->tty_path)
|
|
+ return;
|
|
+ if (!streq("/dev/console", tty)) {
|
|
+ if (s->tty_path)
|
|
+ free(s->tty_path);
|
|
+ s->tty_path = NULL;
|
|
+ tty = "/dev/console";
|
|
+ fd = open_terminal(tty, O_WRONLY|O_NOCTTY|O_CLOEXEC);
|
|
+ if (fd < 0)
|
|
+ return;
|
|
+ }
|
|
+#else
|
|
return;
|
|
+#endif
|
|
}
|
|
|
|
if (writev(fd, iovec, n) < 0)
|
|
Index: src/journal/journald-console.h
|
|
===================================================================
|
|
--- src/journal/journald-console.h.orig
|
|
+++ src/journal/journald-console.h
|
|
@@ -24,3 +24,7 @@
|
|
#include "journald-server.h"
|
|
|
|
void server_forward_console(Server *s, int priority, const char *identifier, const char *message, struct ucred *ucred);
|
|
+#ifdef HAVE_SYSV_COMPAT
|
|
+void klogconsole(Server *s);
|
|
+void defaul_tty_path(Server *s);
|
|
+#endif
|
|
Index: src/journal/journald-server.c
|
|
===================================================================
|
|
--- src/journal/journald-server.c.orig
|
|
+++ src/journal/journald-server.c
|
|
@@ -1509,6 +1509,11 @@ int server_init(Server *s) {
|
|
|
|
server_parse_config_file(s);
|
|
server_parse_proc_cmdline(s);
|
|
+ defaul_tty_path(s);
|
|
+
|
|
+ if (s->tty_path)
|
|
+ klogconsole(s);
|
|
+
|
|
if (!!s->rate_limit_interval ^ !!s->rate_limit_burst) {
|
|
log_debug("Setting both rate limit interval and burst from %llu,%u to 0,0",
|
|
(long long unsigned) s->rate_limit_interval,
|