Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package blog for openSUSE:Factory checked in at 2026-07-06 12:27:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/blog (Old) and /work/SRC/openSUSE:Factory/.blog.new.1982 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "blog" Mon Jul 6 12:27:35 2026 rev:27 rq:1363463 version:2.45 Changes: -------- --- /work/SRC/openSUSE:Factory/blog/blog.changes 2026-06-22 18:06:08.266702816 +0200 +++ /work/SRC/openSUSE:Factory/.blog.new.1982/blog.changes 2026-07-06 12:28:01.926437575 +0200 @@ -1,0 +2,47 @@ +Thu Jul 2 10:33:48 UTC 2026 - Dr. Werner Fink <[email protected]> + +- Update to version 2.45 + Fix early boot LUKS prompt on s390x and resolve memory corruptions + This update addresses several critical issues in the early boot phase, + especially on s390x architectures, and hardens the daemon's architecture: + - Initrd/Dracut: Properly include `systemd-ask-password-blog.path` in + sysinit.target.wants during the initrd phase to ensure LUKS password + prompts are captured early in the zipl phase. + - Systemd Units: Drop restrictive `ConditionKernelCommandLine=!plymouth.enable=0` + to prevent the agent from being disabled by standard mainframe boot parameters. + - Memory Corruption: Fix a critical heap corruption by renaming the conflicting + `alignof()` macro to `ALIGNED_SIZEOF()` and zeroing allocated memory for + `struct request` (memset) to prevent reading uninitialized pointers #5. + - Kernel Command Line: Improve `parse_cmdline()` to support boolean parameters + without an explicit value (e.g., `blog.silent` defaults to `blog.silent=1`). + - New Features: Introduce `blog.silent` to suppress console I/O and `blog.coldboot` + to explicitly trigger the early coldstart password query. + - Lifecycle: Switch `KillMode=none` to `KillMode=mixed` to comply with modern + systemd process lifecycle management. + Fixes: gh#bitstreamout/showconsole#5 + Fixes: gh#bitstreamout/showconsole#6 + Fixes: bsc#1264176 + +------------------------------------------------------------------- +Tue Jun 30 14:11:48 UTC 2026 - Dr. Werner Fink <[email protected]> + +- Update to version 2.44 + Harden blog and use shims units to handle plymouth + Disable coldstart requests via epoll + Avoid handling fd twice in epoll loop + +------------------------------------------------------------------- +Mon Jun 29 13:14:14 UTC 2026 - Dr. Werner Fink <[email protected]> + +- Correct latest changes of 2.43 + +------------------------------------------------------------------- +Thu Jun 25 13:38:15 UTC 2026 - Dr. Werner Fink <[email protected]> + +- Update to version 2.43 + Make sure that if blog is running it is identified as plymouth Latest + also add conflicts to systemd-ask-password-console units in the + systemd-ask-password-blog units. This should avoid conflicting password + agents asking the same question in s390x. + +------------------------------------------------------------------- Old: ---- showconsole-2.42.tar.gz New: ---- showconsole-2.45.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ blog.spec ++++++ --- /var/tmp/diff_new_pack.c7NNmT/_old 2026-07-06 12:28:03.094478086 +0200 +++ /var/tmp/diff_new_pack.c7NNmT/_new 2026-07-06 12:28:03.094478086 +0200 @@ -17,7 +17,7 @@ Name: blog -Version: 2.42 +Version: 2.45 %define sonum 2 Release: 0 Summary: Boot logging @@ -63,6 +63,7 @@ Group: System/Base Requires: blog = %{version} Requires: systemd +Requires: udev Conflicts: plymouth Conflicts: plymouth-dracut @@ -202,14 +203,21 @@ %{_unitdir}/blog-switch-root.service %{_unitdir}/blog-umount.service %{_unitdir}/blog.service +%{_unitdir}/plymouth-quit-wait.service +%{_unitdir}/plymouth-quit.service +%{_unitdir}/plymouth-read-write.service +%{_unitdir}/plymouth-start.service %{_unitdir}/systemd-ask-password-blog.path %{_unitdir}/systemd-ask-password-blog.service %{_unitdir}/default.target.wants/blog-quit.service +%{_unitdir}/default.target.wants/plymouth-quit.service +%{_unitdir}/default.target.wants/plymouth-quit-wait.service %{_unitdir}/emergency.target.wants/blog-quit.service %{_unitdir}/halt.target.wants/blog-halt.service %{_unitdir}/halt.target.wants/blog-switch-initramfs.service %{_unitdir}/initrd-switch-root.target.wants/blog-switch-root.service %{_unitdir}/initrd-switch-root.target.wants/blog.service +%{_unitdir}/initrd-switch-root.target.wants/plymouth-start.service %{_unitdir}/kexec.target.wants/blog-kexec.service %{_unitdir}/kexec.target.wants/blog-switch-initramfs.service %{_unitdir}/local-fs-pre.target.wants/blog-umount.service @@ -219,6 +227,9 @@ %{_unitdir}/reboot.target.wants/blog-switch-initramfs.service %{_unitdir}/rescue.target.wants/blog-quit.service %{_unitdir}/sysinit.target.wants/blog-store-messages.service +%{_unitdir}/sysinit.target.wants/plymouth-read-write.service %{_unitdir}/sysinit.target.wants/blog.service +%{_unitdir}/sysinit.target.wants/plymouth-start.service +%{_unitdir}/sysinit.target.wants/systemd-ask-password-blog.path %ghost %attr(0644,root,root) %{_unitdir}/systemd-ask-password-blog.service.wants/systemd-vconsole-setup.service ++++++ showconsole-2.42.tar.gz -> showconsole-2.45.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/Makefile new/showconsole-2.45/Makefile --- old/showconsole-2.42/Makefile 2026-06-22 15:46:21.000000000 +0200 +++ new/showconsole-2.45/Makefile 2026-07-02 11:25:23.000000000 +0200 @@ -15,7 +15,7 @@ DEBUG = DESTDIR = MAJOR := 2 -MINOR := 42 +MINOR := 45 VERSION := $(MAJOR).$(MINOR) DATE = $(shell date +'%d%b%y' | tr '[:lower:]' '[:upper:]') COPTS = @@ -153,12 +153,17 @@ ln_r () { \ local rel="$$(realpath -m --relative-to=$${2%/*}/ $${1%/*}/)"; \ ln -sf $${rel}/$${1##*/} $${initdir}$${2}; }; \ - . ./module-setup.sh ; \ + . ./module-setup.sh; \ set -xe; install $(MKDIR) $(DESTDIR)$(SYSDUNITS)/local-fs-pre.target.wants $(MKDIR) $(DESTDIR)$(SYSDUNITS)/default.target.wants + $(MKDIR) $(DESTDIR)$(SYSDUNITS)/sysinit.target.wants + $(LINK) ../blog-store-messages.service $(DESTDIR)$(SYSDUNITS)/sysinit.target.wants/ + $(LINK) ../plymouth-read-write.service $(DESTDIR)$(SYSDUNITS)/sysinit.target.wants/ $(LINK) ../blog-umount.service $(DESTDIR)$(SYSDUNITS)/local-fs-pre.target.wants/ $(LINK) ../blog-quit.service $(DESTDIR)$(SYSDUNITS)/default.target.wants/ + $(LINK) ../plymouth-quit.service $(DESTDIR)$(SYSDUNITS)/default.target.wants/ + $(LINK) ../plymouth-quit-wait.service $(DESTDIR)$(SYSDUNITS)/default.target.wants/ # # Make distribution diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/blog.service new/showconsole-2.45/blog.service --- old/showconsole-2.42/blog.service 2026-06-22 15:46:21.000000000 +0200 +++ new/showconsole-2.45/blog.service 2026-07-02 11:25:23.000000000 +0200 @@ -1,5 +1,5 @@ [Unit] -Description=Start Blogd at System Bootup +Description=Start Blogd Core Engine DefaultDependencies=no Wants=systemd-ask-password-blog.path systemd-vconsole-setup.service After=systemd-vconsole-setup.service systemd-udev-trigger.service systemd-udevd.service @@ -11,8 +11,8 @@ RefuseManualStart=true [Service] +ExecStart=/sbin/blogd Type=forking RemainAfterExit=yes KillMode=mixed SendSIGKILL=no -ExecStart=/sbin/blogd diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/blogd.8.in new/showconsole-2.45/blogd.8.in --- old/showconsole-2.42/blogd.8.in 2026-06-22 15:46:21.000000000 +0200 +++ new/showconsole-2.45/blogd.8.in 2026-07-02 11:25:23.000000000 +0200 @@ -1,12 +1,13 @@ .\" .\" Copyright 2000 Werner Fink, 2000 SuSE GmbH Nuernberg, Germany. +.\" Copyright 2026 SUSE Software Solutions Germany GmbH .\" .\" This program is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 2 of the License, or .\" (at your option) any later version. .\" -.TH BLOGD 8 "Jan 14, 2016" "Version 2.12" "The SUSE boot concept" +.TH BLOGD 8 "Jul 02, 2026" "Version 2.45" "The SUSE boot concept" .UC 8 .SH NAME blogd \- boot logging on /dev/console @@ -46,34 +47,41 @@ This option is used at shutdown, that is reboot, halt, and poweroff but also for kexec. .SH BOOT PARAMETERS +The +.B blogd +evaluates the following kernel command line parameters: +.TP +.B blog\&.silent[=1|on|yes|true] +If set, all output to the underlying character devices is suppressed. +This is useful to prevent the console from being flooded with messages. +.TP +.B blog\&.coldboot[=1|on|yes|true] +If set, explicitly enables the early coldstart scan for systemd password +requests (e.g. for LUKS decryption) during the initrd phase. +.TP +.B blog\&.timeout=<integer> On .B s390x (64-bit IBM System/390) and .B z/Architecture -the -.B blogd -knows currently one kernel command line parameter -.BI blog\&.timeout= <integer> -with -.I <integer> -the timeout for the +this specifies the timeout for the .B MORE -prompt on +prompt on the .I 3215 console. If set to .I 0 the boot process does not need manual support. .SH SIGNALS .B blogd -knows a few signal to contol its behavior. +knows a few signals to control its behavior. .TP .BR SIGQUIT ", " SIGINT ", and " SIGTERM will cause .B blogd -tries to write out the ring buffer and to exit. +to try to write out the ring buffer and to exit. .TP .B SIGIO -says +tells .B blogd that now it is able to write on .I @@BOOT_LOGFILE@@ @@ -82,13 +90,13 @@ messages are written to that file. After a reboot the file .I @@BOOT_OLDLOGFILE@@ -may exists where the former messages +may exist where the former messages can be found including the messages at shutdown upto the point where the file systems become unmounted. .TP .B SIGSYS -says +tells .B blogd that it should stop writing to disk but continue to repeat messages to the old @@ -134,6 +142,7 @@ .SH COPYRIGHT 2000,2015 Werner Fink, 2000 SuSE GmbH Nuernberg, Germany, -2015 SuSE Linux GmbH. +2015 SuSE Linux GmbH, +2026 SUSE Software Solutions Germany GmbH. .SH AUTHOR Werner Fink <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/blogd.c new/showconsole-2.45/blogd.c --- old/showconsole-2.42/blogd.c 2026-06-22 15:46:21.000000000 +0200 +++ new/showconsole-2.45/blogd.c 2026-07-02 11:25:23.000000000 +0200 @@ -44,6 +44,8 @@ extern volatile sig_atomic_t signaled; extern volatile sig_atomic_t asking; extern int final; +extern int console_silent; +extern int coldboot; static int show_status; static const char console[] = "/dev/console"; @@ -249,7 +251,7 @@ int main(int argc, char *argv[]) { char ptsname[NAME_MAX+1]; - const char *tty, *stt; + const char *tty, *stt, *val; volatile char *arg0; struct console *c; struct termios o; @@ -284,6 +286,18 @@ argv += optind; argc -= optind; + parse_cmdline(); /* Parse the kernel command line for blog.<key>(=<val>) */ + val = value_cmdline("silent"); + if (val) { + if (strcmp(val, "1") == 0 || strcasecmp(val, "on") == 0 || strcasecmp(val, "yes") == 0 || strcasecmp(val, "true")) + console_silent = 1; + } + val = value_cmdline("coldboot"); + if (val) { + if (strcmp(val, "1") == 0 || strcasecmp(val, "on") == 0 || strcasecmp(val, "yes") == 0 || strcasecmp(val, "true")) + coldboot = 1; + } + myname = program_invocation_short_name; getconsoles(1); @@ -348,10 +362,7 @@ } #if defined(__s390__) || defined(__s390x__) if ((c->flags & CON_3215) && final == 0) { - char *timeout; - - parse_cmdline(); /* Parse the kernel command line for blog.<key>=<val> */ - timeout = value_cmdline("timeout"); + char *timeout = value_cmdline("timeout"); if (timeout && isinteger(timeout)) { int vmcp = openvmcp(); @@ -369,11 +380,12 @@ usleep(1000); } - free_cmdline(); } #endif } + free_cmdline(); /* free cmd list after last usage of value_cmdline() */ + if (openpty(&ptm, &pts, ptsname, &o, &w) < 0) error("can not open pty/tty pair"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/libconsole/coldstart.c new/showconsole-2.45/libconsole/coldstart.c --- old/showconsole-2.42/libconsole/coldstart.c 2026-06-22 15:46:21.000000000 +0200 +++ new/showconsole-2.45/libconsole/coldstart.c 2026-07-02 11:25:23.000000000 +0200 @@ -105,10 +105,11 @@ in_ask_section = 0; /* Allocate memory for our custom wrapper structure */ - if (posix_memalign((void**)&req, sizeof(void*), alignof(struct request)) != 0 || !req) { + if (posix_memalign((void**)&req, sizeof(void*), ALIGNED_SIZEOF(struct request)) != 0 || !req) { fclose(fp); error("memory allocation: %m"); } + memset(req, 0, sizeof(struct request)); while (fgets(line, sizeof(line), fp)) { char *eq, *key, *value; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/libconsole/console.c new/showconsole-2.45/libconsole/console.c --- old/showconsole-2.42/libconsole/console.c 2026-06-22 15:46:21.000000000 +0200 +++ new/showconsole-2.45/libconsole/console.c 2026-07-02 11:25:23.000000000 +0200 @@ -110,6 +110,16 @@ int final = 0; /* + * Should the console be silent? + */ +int console_silent = 0; + +/* + * Should the cold start scan for asking password be active? + */ +int coldboot = 0; + +/* * Avoid trouble if linked with e.g. blogger as there * is no external arg0 but linker on ppc64 and s390/x * seems to expect this. @@ -514,7 +524,8 @@ static void ask_for_password(void) attribute((noinline)); -static int coldstart_active = 0; +static int coldstart_active; +static int coldstart_triggered; static char *coldstart_socket_path = NULL; static void coldstart_next(void) @@ -603,9 +614,10 @@ (void)mlockall(MCL_FUTURE); - /* Phase 2: Start processing coldstart requests via epoll */ - coldstart_active = 1; - coldstart_next(); + if (coldboot) { + /* Phase 2: Start processing coldstart requests via epoll */ + coldstart_active = 1; + } } /* @@ -778,6 +790,12 @@ start_logging(); } + /* Launch coldstart password queries strictly after setup, right before epoll_wait */ + if (coldstart_active && !coldstart_triggered) { + coldstart_triggered = 1; + coldstart_next(); + } + (void)more_input(5000, 0); if (nsigsys) { /* Stop writing logs to disk, only repeat messages */ @@ -854,8 +872,8 @@ if (password) { memset(password, 0, MAX_PASSLEN); - munmap(password, MAX_PASSLEN+sizeof(int32_t)); - password = NULL; + munmap(password, MAX_PASSLEN+sizeof(int32_t)); + password = NULL; } if (pwprompt) { @@ -930,10 +948,10 @@ if (!cons) error("missing console pointer"); - if (posix_memalign((void**)&newc, sizeof(void*), alignof(struct console)+strlen(name)+1) != 0 || !newc) + if (posix_memalign((void**)&newc, sizeof(void*), ALIGNED_SIZEOF(struct console)+strlen(name)+1) != 0 || !newc) error("memory allocation"); - newc->tty = ((char*)newc)+alignof(struct console); + newc->tty = ((char*)newc)+ALIGNED_SIZEOF(struct console); strcpy(newc->tty, name); newc->flags = cflags; newc->dev = dev; @@ -1145,7 +1163,10 @@ size_t ret; if (c->fd < 0) continue; - ret = c->out(c->fd, thead, len, c->max_canon); + if (console_silent) + ret = len; + else + ret = c->out(c->fd, thead, len, c->max_canon); if (ret < 1) goto flush; len = ret; /* First make write out all but Second? */ @@ -1169,7 +1190,10 @@ size_t ret; if (c->fd < 0) continue; - ret = c->out(c->fd, trans, cnt, c->max_canon); + if (console_silent) + ret = cnt; + else + ret = c->out(c->fd, trans, cnt, c->max_canon); if (ret < 1) { if (cnt <= (size_t)(tend - ttail)) { memcpy(ttail, trans, cnt); @@ -1289,13 +1313,12 @@ free(coldstart_socket_path); coldstart_socket_path = NULL; } - } else { - if (pwd_client_fd >= 0) { - (void)do_answer_password(pwd_client_fd); - epoll_delete(pwd_client_fd); - close(pwd_client_fd); - pwd_client_fd = -1; - } + } + if (pwd_client_fd >= 0) { + (void)do_answer_password(pwd_client_fd); + epoll_delete(pwd_client_fd); + close(pwd_client_fd); + pwd_client_fd = -1; } /* 2. Enable Kernel-Logging to the console Konsole */ @@ -1336,6 +1359,15 @@ /* Remember the Socket for later and start the background process */ pwd_client_fd = fd; + + if (asking) { +#ifdef DEBUG + warn("%s: Agent synchronized with already running prompt.", __FUNCTION__); +#endif + epoll_addread(fd, &socket_handler); + return; + } + ask_for_password(); } @@ -1422,12 +1454,17 @@ warn("Got password request for prompt >%s<", arg); #endif if (asking) { - /* - * This should not happen as Systemd serialize password requests - */ - const char *nck = ANSWER_NCK; - safeout(fd, nck, strlen(nck)+1, SSIZE_MAX); - warn("Got further password request with prompt >%s<", arg); + if (pwd_client_fd >= 0 && pwd_client_fd != fd) { + epoll_delete(pwd_client_fd); + close(pwd_client_fd); + } + pwd_client_fd = fd; + + if (pwprompt) + free(pwprompt); + pwprompt = strdup(arg); + + epoll_answer_once(fd, &epoll_socket_answer); goto job; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/libconsole/epoll.c new/showconsole-2.45/libconsole/epoll.c --- old/showconsole-2.42/libconsole/epoll.c 2026-06-22 15:46:21.000000000 +0200 +++ new/showconsole-2.45/libconsole/epoll.c 2026-07-02 11:25:23.000000000 +0200 @@ -1,7 +1,8 @@ /* * epoll.c * - * Copyright 2000,2015 Werner Fink, 2015 SuSE Linux GmbH. + * Copyright 2000,2015,2026 Werner Fink, 2015 SuSE Linux GmbH. + * Copyright 2026 SUSE Software Solutions Germany GmbH * * This source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -12,6 +13,8 @@ #include <stdlib.h> #include <string.h> #include <sys/epoll.h> +#include <unistd.h> +#include <errno.h> #include "listing.h" #include "libconsole.h" @@ -37,7 +40,7 @@ ev.events = flags; - if (posix_memalign((void**)&ep, sizeof(void*), alignof(struct epolls)) != 0 || !ep) + if (posix_memalign((void**)&ep, sizeof(void*), ALIGNED_SIZEOF(struct epolls)) != 0 || !ep) error("memory allocation"); ep->handle = (typeof(ep->handle))fptr; @@ -71,31 +74,42 @@ void epoll_answer_once(int fd, void *fptr) { struct epoll_event ev = {}; - struct epolls *ep; - list_t *head; + struct epolls *ep, *target = NULL; int ret; - ev.events = EPOLLOUT|EPOLLONESHOT; + list_for_each_entry(ep, &lpolls, watch) { + if (ep->fd == fd) { + target = ep; + break; + } + } - if (posix_memalign((void**)&ep, sizeof(void*), alignof(struct epolls)) != 0 || !ep) - error("memory allocation"); + if (!target) { + list_t *head; - ep->handle = (typeof(ep->handle))fptr; - ep->fd = fd; + if (posix_memalign((void**)&ep, sizeof(void*), ALIGNED_SIZEOF(struct epolls)) != 0 || !ep) + error("memory allocation"); - ev.data.ptr = (void*)ep; + ep->fd = fd; + + if (!epolls) { + head = &lpolls; + epolls = (struct epolls*)head; + } else + head = &epolls->watch; + insert(&ep->watch, head); + evmax++; - if (!epolls) { - head = &lpolls; - epolls = (struct epolls*)head; - } else - head = &epolls->watch; - insert(&ep->watch, head); - evmax++; + target = ep; + } + + ev.events = EPOLLOUT|EPOLLONESHOT; + target->handle = (typeof(target->handle))fptr; + ev.data.ptr = (void*)target; ret = epoll_ctl(epfd, EPOLL_CTL_MOD, fd, &ev); if (ret < 0) - error("can not add %d file descriptor on epoll file descriptor", fd); + error("can not modify %d file descriptor on epoll file descriptor", fd); } void epoll_reenable(int fd) @@ -115,7 +129,6 @@ break; } } - } void epoll_delete(int fd) @@ -127,14 +140,15 @@ if (ep->fd == fd) { delete(&ep->watch); free(ep); - break; + evmax--; } } - evmax--; ret = epoll_ctl(epfd, EPOLL_CTL_DEL, fd, NULL); - if (ret < 0) - error("can not delete %d file descriptor on epoll file descriptor", fd); + if (ret < 0) { + if (errno != ENOENT) + error("can not delete %d file descriptor on epoll file descriptor", fd); + } } void (*epoll_handle(void *ptr, int *fd))(int) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/libconsole/libconsole.h new/showconsole-2.45/libconsole/libconsole.h --- old/showconsole-2.42/libconsole/libconsole.h 2026-06-22 15:46:21.000000000 +0200 +++ new/showconsole-2.45/libconsole/libconsole.h 2026-07-02 11:25:23.000000000 +0200 @@ -49,7 +49,7 @@ #endif #include "listing.h" -#define alignof(type) ((sizeof(type)+(sizeof(void*)-1)) & ~(sizeof(void*)-1)) +#define ALIGNED_SIZEOF(type) ((sizeof(type)+(sizeof(void*)-1)) & ~(sizeof(void*)-1)) #define strsize(string) ((strlen(string)+1)*sizeof(char)) #if defined __USE_ISOC99 @@ -124,6 +124,8 @@ extern sigset_t omask; extern int final; +extern int console_silent; +extern int coldboot; extern int epfd; extern int evmax; extern volatile sig_atomic_t signaled; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/libconsole/proc.c new/showconsole-2.45/libconsole/proc.c --- old/showconsole-2.42/libconsole/proc.c 2026-06-22 15:46:21.000000000 +0200 +++ new/showconsole-2.45/libconsole/proc.c 2026-07-02 11:25:23.000000000 +0200 @@ -108,23 +108,29 @@ const char *prefix = "blog."; const size_t plen = strlen(prefix); - if (strncmp(token, prefix , plen) == 0) { + if (strncmp(token, prefix, plen) == 0) { char *kv = token + plen; char *eq = strchr(kv, '='); + char *key, *val; if (eq) { - parameter_t *pm; - int exists = 0; - *eq = '\0'; - char *key = kv; - char *val = eq + 1; + key = kv; + val = eq + 1; - if (*val == '\0' || *val == ' ') { - *eq = '='; /* restore token for strtok_r */ - token = strtok_r(NULL, " \n", &saveptr); - continue; - } + if (*val == '\0' || *val == ' ') { + *eq = '='; /* restore token for strtok_r */ + token = strtok_r(NULL, " \n", &saveptr); + continue; + } + } else { + key = kv; + val = "1"; /* default to true */ + } + + { + parameter_t *pm; + int exists = 0; list_for_each_entry(pm, &lparameter, handle) { if (strcmp(pm->key, key) == 0) { @@ -134,9 +140,9 @@ } } if (!exists) { - if (posix_memalign((void**)&pm, sizeof(void*), alignof(parameter_t)+strlen(key)+1) != 0 || !pm) + if (posix_memalign((void**)&pm, sizeof(void*), ALIGNED_SIZEOF(parameter_t)+strlen(key)+1) != 0 || !pm) error("memory allocation"); - pm->key = ((char*)pm)+alignof(parameter_t); + pm->key = ((char*)pm)+ALIGNED_SIZEOF(parameter_t); strcpy(pm->key, key); pm->val = strdup(val); @@ -147,7 +153,8 @@ head = &(parameter)->handle; insert(&pm->handle, head); } - *eq = '='; /* restore token for strtok_r */ + if (eq) + *eq = '='; /* restore token for strtok_r */ } } token = strtok_r(NULL, " \n", &saveptr); @@ -160,8 +167,8 @@ parameter_t *pm; list_for_each_entry(pm, &lparameter, handle) { if (strcmp(pm->key, key) == 0) { - return pm->val; - } + return pm->val; + } } return (char*)0; } @@ -169,9 +176,9 @@ void free_cmdline(void) { parameter_t *pm, *n; list_for_each_entry_safe(pm, n, &lparameter, handle) { - free(pm->val); - delete(&pm->handle); - free(pm); + free(pm->val); + delete(&pm->handle); + free(pm); } } #ifdef DEBUG_PROC @@ -185,15 +192,15 @@ /* Check if no digits were found at all */ if (str == endptr) - ret = 0; + ret = 0; /* Check for overflow or underflow */ if (errno == ERANGE) - ret = 0; + ret = 0; /* Check for trailing non-numeric characters (e.g., "123abc") */ if (*endptr != '\0') - ret = 0; + ret = 0; errno = errs; return ret; @@ -204,10 +211,10 @@ char *key; parse_cmdline(); list_for_each_entry(pm, &lparameter, handle) { - printf("key %s = val %s\n", pm->key, pm->val); + printf("key %s = val %s\n", pm->key, pm->val); } key = value_cmdline("timeout"); if (key) - printf("%s %d\n", key, _isinteger(key)); + printf("%s %d\n", key, _isinteger(key)); } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/module-setup.sh new/showconsole-2.45/module-setup.sh --- old/showconsole-2.42/module-setup.sh 2026-06-22 15:46:21.000000000 +0200 +++ new/showconsole-2.45/module-setup.sh 2026-07-02 11:25:23.000000000 +0200 @@ -12,19 +12,23 @@ inst_multiple blogd blogctl inst_multiple -o \ $systemdsystemunitdir/blog.service \ + $systemdsystemunitdir/plymouth-start.service \ $systemdsystemunitdir/blog-halt.service \ $systemdsystemunitdir/blog-kexec.service \ $systemdsystemunitdir/blog-poweroff.service \ $systemdsystemunitdir/blog-reboot.service \ $systemdsystemunitdir/blog-quit.service \ + $systemdsystemunitdir/plymouth-quit.service \ + $systemdsystemunitdir/plymouth-quit-wait.service \ $systemdsystemunitdir/blog-store-messages.service \ + $systemdsystemunitdir/plymouth-read-write.service \ $systemdsystemunitdir/blog-switch-initramfs.service \ $systemdsystemunitdir/blog-switch-root.service \ $systemdsystemunitdir/blog-umount.service \ $systemdsystemunitdir/systemd-ask-password-blog.path \ $systemdsystemunitdir/systemd-ask-password-blog.service \ $systemdsystemunitdir/systemd-vconsole-setup.service - for t in sysinit rescue shutdown emergency initrd-switch-root halt kexec poweroff reboot + for t in sysinit rescue emergency initrd-switch-root halt kexec poweroff reboot do test -d "${initdir}${systemdsystemunitdir}/${t}.target.wants" && continue mkdir -p "${initdir}${systemdsystemunitdir}/${t}.target.wants" @@ -34,7 +38,7 @@ ln_r "${systemdsystemunitdir}/${s}" "${systemdsystemunitdir}/rescue.target.wants/${s}" ln_r "${systemdsystemunitdir}/${s}" "${systemdsystemunitdir}/emergency.target.wants/${s}" done - for s in blog.service blog-store-messages.service + for s in blog.service plymouth-start.service systemd-ask-password-blog.path do ln_r "${systemdsystemunitdir}/${s}" "${systemdsystemunitdir}/sysinit.target.wants/${s}" done @@ -48,12 +52,12 @@ test -d "${initdir}${systemdsystemunitdir}/${t}.wants" && continue mkdir -p "${initdir}${systemdsystemunitdir}/${t}.wants" done - for s in blog.service blog-switch-root.service - do - ln_r "${systemdsystemunitdir}/${s}" "${systemdsystemunitdir}/initrd-switch-root.target.wants/${s}" - done for s in systemd-vconsole-setup.service do ln_r "${systemdsystemunitdir}/${s}" "${systemdsystemunitdir}/systemd-ask-password-blog.service.wants/${s}" done + for s in blog.service plymouth-start.service blog-switch-root.service + do + ln_r "${systemdsystemunitdir}/${s}" "${systemdsystemunitdir}/initrd-switch-root.target.wants/${s}" + done } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/plymouth-quit-wait.service new/showconsole-2.45/plymouth-quit-wait.service --- old/showconsole-2.42/plymouth-quit-wait.service 1970-01-01 01:00:00.000000000 +0100 +++ new/showconsole-2.45/plymouth-quit-wait.service 2026-07-02 11:25:23.000000000 +0200 @@ -0,0 +1,11 @@ +[Unit] +Description=Plymouth Quit Wait Compatibility Shim +DefaultDependencies=no +After=rc-local.service blog.service systemd-user-sessions.service +Requires=blog-quit.service +After=blog-quit.service + +[Service] +Type=oneshot +ExecStart=/bin/true +RemainAfterExit=yes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/plymouth-quit.service new/showconsole-2.45/plymouth-quit.service --- old/showconsole-2.42/plymouth-quit.service 1970-01-01 01:00:00.000000000 +0100 +++ new/showconsole-2.45/plymouth-quit.service 2026-07-02 11:25:23.000000000 +0200 @@ -0,0 +1,11 @@ +[Unit] +Description=Plymouth Quit Compatibility Shim +DefaultDependencies=no +After=rc-local.service blog.service systemd-user-sessions.service +Requires=blog-quit.service +After=blog-quit.service + +[Service] +Type=oneshot +ExecStart=/bin/true +RemainAfterExit=yes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/plymouth-read-write.service new/showconsole-2.45/plymouth-read-write.service --- old/showconsole-2.42/plymouth-read-write.service 1970-01-01 01:00:00.000000000 +0100 +++ new/showconsole-2.45/plymouth-read-write.service 2026-07-02 11:25:23.000000000 +0200 @@ -0,0 +1,13 @@ +[Unit] +Description=Plymouth Write Out Compatibility Shim +DefaultDependencies=no +After=local-fs.target +Before=sysinit.target +ConditionPathExists=!/etc/initrd-release +Requires=blog-store-messages.service +After=blog-store-messages.service + +[Service] +Type=oneshot +ExecStart=/bin/true +RemainAfterExit=yes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/plymouth-start.service new/showconsole-2.45/plymouth-start.service --- old/showconsole-2.42/plymouth-start.service 1970-01-01 01:00:00.000000000 +0100 +++ new/showconsole-2.45/plymouth-start.service 2026-07-02 11:25:23.000000000 +0200 @@ -0,0 +1,13 @@ +[Unit] +Description=Plymouth Boot Screen Compatibility Shim +DefaultDependencies=no +ConditionKernelCommandLine=!plymouth.enable=0 +ConditionVirtualization=!container +Requires=blog.service +After=blog.service +IgnoreOnIsolate=true + +[Service] +Type=oneshot +ExecStart=/bin/true +RemainAfterExit=yes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/systemd-ask-password-blog.path new/showconsole-2.45/systemd-ask-password-blog.path --- old/showconsole-2.42/systemd-ask-password-blog.path 2026-06-22 15:46:21.000000000 +0200 +++ new/showconsole-2.45/systemd-ask-password-blog.path 2026-07-02 11:25:23.000000000 +0200 @@ -8,14 +8,9 @@ Before=emergency.service Conflicts=shutdown.target Before=shutdown.target -ConditionKernelCommandLine=!blog.enable=0 -ConditionKernelCommandLine=!plymouth.enable=0 ConditionPathExists=/run/blogd.pid ConditionVirtualization=!container [Path] DirectoryNotEmpty=/run/systemd/ask-password MakeDirectory=yes - -[Install] -Alias=systemd-ask-password-plymouth.path diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/showconsole-2.42/systemd-ask-password-blog.service new/showconsole-2.45/systemd-ask-password-blog.service --- old/showconsole-2.42/systemd-ask-password-blog.service 2026-06-22 15:46:21.000000000 +0200 +++ new/showconsole-2.45/systemd-ask-password-blog.service 2026-07-02 11:25:23.000000000 +0200 @@ -7,14 +7,9 @@ Before=emergency.service Conflicts=shutdown.target initrd-switch-root.target Before=shutdown.target initrd-switch-root.target -ConditionKernelCommandLine=!blog.enable=0 -ConditionKernelCommandLine=!plymouth.enable=0 ConditionVirtualization=!container ConditionPathExists=/run/blogd.pid [Service] ExecStart=/usr/bin/systemd-tty-ask-password-agent --watch --plymouth SystemCallArchitectures=native - -[Install] -Alias=systemd-ask-password-plymouth.service
