diff options
-rw-r--r-- | system/sysvinit/APKBUILD | 13 | ||||
-rw-r--r-- | system/sysvinit/sysvinit-2.88-posix-header.patch | 10 | ||||
-rw-r--r-- | system/sysvinit/utmpx.patch | 436 |
3 files changed, 228 insertions, 231 deletions
diff --git a/system/sysvinit/APKBUILD b/system/sysvinit/APKBUILD index b3e912601..77b9494d7 100644 --- a/system/sysvinit/APKBUILD +++ b/system/sysvinit/APKBUILD @@ -1,8 +1,8 @@ # Contributor: A. Wilcox <awilfox@adelielinux.org> # Maintainer: A. Wilcox <awilfox@adelielinux.org> pkgname=sysvinit -pkgver=2.88 -pkgrel=8 +pkgver=3.04 +pkgrel=0 pkgdesc="System V-style init programs" url="https://savannah.nongnu.org/projects/sysvinit" arch="all" @@ -13,13 +13,11 @@ install="sysvinit.post-upgrade sysvinit.post-install" options="!check" provides="/sbin/init=0" subpackages="$pkgname-doc" -source="https://download.savannah.nongnu.org/releases/sysvinit/sysvinit-${pkgver}dsf.tar.bz2 +source="https://download.savannah.nongnu.org/releases/sysvinit/sysvinit-${pkgver}.tar.xz inittab-2.88 - sysvinit-2.88-posix-header.patch utmpx.patch s6-svscanboot " -builddir="$srcdir/sysvinit-${pkgver}dsf" prepare() { default_prepare @@ -67,8 +65,7 @@ package() { _install_s6_stuff } -sha512sums="0bd8eeb124e84fdfa8e621b05f796804ee69a9076b65f5115826bfa814ac1d5d28d31a5c22ebe77c86a93b2288edf4891adc0afaecc4de656c4ecda8a83807bf sysvinit-2.88dsf.tar.bz2 +sha512sums="059092ee857782e88f88e47475846f859589aa1062a6e1294fe8983a11d04a13811e0dd6d277431f45abc2d9d96e5358f6b2d2df1d291402fada66cd009a5fa9 sysvinit-3.04.tar.xz 87668b49690091a227c0384fd2400f1006d24c27cc27a25efa7eba56839ccb1eead00b58ce4b654eab9c0208d68aa2cbb888fd5f2990905845aa9688442a69a0 inittab-2.88 -27dfe089660a291cbcba06d8564bad11f7fd7c96629e72c2b005562689dc7d8bb479c760e980590906e98423b991ae0acd048713d3bc372174d55ed894abeb3f sysvinit-2.88-posix-header.patch -3605f88ac3faf7d12bf2269ca5d8625850d53e8583b573ab280fa17066c8e4e5217a0d17b94e47ea67a153ad3b88b433471a77544bd085f01f7d9d353ac16aae utmpx.patch +187dbef4452624ac9035994edbbefa9efd8847ff307002703ca35cfa149780c7e1addb38859dbfdb5dd1e046510418ee493fa3dfdfcc5706c262b1238c7cc39e utmpx.patch e52fd49daa5abfc583f1973f3428b1e00a71e7136a8bc6418e94b345d53ef250b3b3c3bee389fe37872b26a78d0957ae852e221428f33b2c728dfd3d50b59634 s6-svscanboot" diff --git a/system/sysvinit/sysvinit-2.88-posix-header.patch b/system/sysvinit/sysvinit-2.88-posix-header.patch deleted file mode 100644 index 3d63e434e..000000000 --- a/system/sysvinit/sysvinit-2.88-posix-header.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/src/init.c 2016-06-06 07:54:04.237447068 +0000 -+++ b/src/init.c 2016-06-06 08:17:37.177523978 +0000 -@@ -46,6 +46,7 @@ - #include <string.h> - #include <signal.h> - #include <termios.h> -+#include <sys/ttydefaults.h> - #include <utmp.h> - #include <ctype.h> - #include <stdarg.h> diff --git a/system/sysvinit/utmpx.patch b/system/sysvinit/utmpx.patch index b8ee0b48b..d874f2e7c 100644 --- a/system/sysvinit/utmpx.patch +++ b/system/sysvinit/utmpx.patch @@ -1,50 +1,48 @@ ---- sysvinit-2.88dsf/src/runlevel.c.old 2009-09-10 03:28:49.000000000 -0500 -+++ sysvinit-2.88dsf/src/runlevel.c 2018-07-03 21:24:40.370000000 -0500 -@@ -22,7 +22,7 @@ - */ - +diff -ur a/src/dowall.c b/src/dowall.c +--- a/src/dowall.c 2022-05-04 08:18:19.100000000 +0000 ++++ b/src/dowall.c 2022-05-04 08:18:29.040000000 +0000 +@@ -31,7 +31,7 @@ + #include <time.h> + #include <unistd.h> #include <stdio.h> -#include <utmp.h> +#include <utmpx.h> - #include <time.h> - #include <stdlib.h> - -@@ -30,24 +30,27 @@ - int argc; - char **argv; + #include <pwd.h> + #include <fcntl.h> + #include <signal.h> +@@ -160,7 +160,7 @@ { -- struct utmp *ut; -+ struct utmpx *ut; - char prev; + FILE *tp; + struct sigaction sa; +- struct utmp *utmp; ++ struct utmpx *utmp; + time_t t; + char term[UT_LINESIZE+ strlen(_PATH_DEV) + 1]; + char line[256]; +@@ -217,9 +217,9 @@ + sigemptyset(&sa.sa_mask); + sigaction(SIGALRM, &sa, NULL); -- if (argc > 1) utmpname(argv[1]); -+ if (argc > 1) { -+ printf("unknown\n"); -+ return(1); -+ } +- setutent(); ++ setutxent(); -- setutent(); -- while ((ut = getutent()) != NULL) { -+ setutxent(); -+ while ((ut = getutxent()) != NULL) { - if (ut->ut_type == RUN_LVL) { - prev = ut->ut_pid / 256; - if (prev == 0) prev = 'N'; - printf("%c %c\n", prev, ut->ut_pid % 256); -- endutent(); -+ endutxent(); - exit(0); +- while ((utmp = getutent()) != NULL) { ++ while ((utmp = getutxent()) != NULL) { + if(utmp->ut_type != USER_PROCESS || + utmp->ut_user[0] == 0) continue; + if (strncmp(utmp->ut_line, _PATH_DEV, strlen(_PATH_DEV)) == 0) { +@@ -253,7 +253,7 @@ + if (fd >= 0) close(fd); + if (tp != NULL) fclose(tp); } - } - - printf("unknown\n"); -- endutent(); -+ endutxent(); - return(1); - } +- endutent(); ++ endutxent(); ---- sysvinit-2.88dsf/src/halt.c.old 2010-02-26 07:45:49.000000000 -0600 -+++ sysvinit-2.88dsf/src/halt.c 2018-07-03 21:26:26.050000000 -0500 + exit(0); + } +diff -ur a/src/halt.c b/src/halt.c +--- a/src/halt.c 2022-05-04 08:18:19.100000000 +0000 ++++ b/src/halt.c 2022-05-04 08:18:29.030000000 +0000 @@ -47,7 +47,7 @@ #include <sys/stat.h> #include <sys/param.h> @@ -54,16 +52,16 @@ #include <fcntl.h> #include <string.h> #include <unistd.h> -@@ -93,7 +93,7 @@ +@@ -95,7 +95,7 @@ */ int get_runlevel(void) { - struct utmp *ut; + struct utmpx *ut; char *r; - #if RUNLVL_PICKY - time_t boottime; -@@ -119,8 +119,8 @@ + int runlevel, status; + +@@ -123,8 +123,8 @@ /* * Find runlevel in utmp. */ @@ -74,27 +72,194 @@ #if RUNLVL_PICKY /* * Only accept value if it's from after boottime. -@@ -132,7 +132,7 @@ +@@ -136,7 +136,7 @@ return (ut->ut_pid & 255); #endif } - endutent(); + endutxent(); - /* This should not happen but warn the user! */ - fprintf(stderr, "WARNING: could not determine runlevel" ---- sysvinit-2.88dsf/src/utmp.c.old 2009-11-24 04:03:19.000000000 -0600 -+++ sysvinit-2.88dsf/src/utmp.c 2018-07-03 21:38:47.460000000 -0500 -@@ -32,7 +32,7 @@ + /* Did not find utmp entry, try to read from log file */ + status = Read_Runlevel_Log(&runlevel); +diff -ur a/src/init.c b/src/init.c +--- a/src/init.c 2022-05-04 08:18:19.100000000 +0000 ++++ b/src/init.c 2022-05-04 08:22:24.310000000 +0000 +@@ -53,11 +53,7 @@ + #include <string.h> + #include <signal.h> + #include <termios.h> +-#ifdef __FreeBSD__ + #include <utmpx.h> +-#else +-#include <utmp.h> +-#endif + #include <ctype.h> + #include <stdarg.h> + #include <sys/ttydefaults.h> +@@ -149,7 +145,7 @@ + int sleep_time = WAIT_BETWEEN_SIGNALS; /* Sleep time between TERM and KILL */ + char *argv0; /* First arguments; show up in ps listing */ + int maxproclen; /* Maximal length of argv[0] with \0 */ +-struct utmp utproto; /* Only used for sizeof(utproto.ut_id) */ ++struct utmpx utproto; /* Only used for sizeof(utproto.ut_id) */ + char *console_dev; /* Console device. */ + int pipe_fd = -1; /* /run/initctl */ + int did_boot = 0; /* Did we already do BOOT* stuff? */ +@@ -2322,12 +2318,6 @@ + static + void redo_utmp_wtmp(void) + { +- struct stat ustat; +- const int ret = stat(UTMP_FILE, &ustat); +- +- if ((ret < 0) || (ustat.st_size == 0)) +- wrote_utmp_rlevel = wrote_utmp_reboot = 0; +- + if ((wrote_wtmp_reboot == 0) || (wrote_utmp_reboot == 0)) + write_utmp_wtmp("reboot", "~~", 0, BOOT_TIME, "~"); + +@@ -2862,8 +2852,6 @@ + console_init(); + + if (!reload) { +- int fd; +- + /* Close whatever files are open, and reset the console. */ + close(0); + close(1); +@@ -2877,13 +2865,6 @@ + setenv("PATH", PATH_DEFAULT, 1 /* Overwrite */); + + /* +- * Initialize /var/run/utmp (only works if /var is on +- * root and mounted rw) +- */ +- if ((fd = open(UTMP_FILE, O_WRONLY|O_CREAT|O_TRUNC, 0644)) >= 0) +- close(fd); +- +- /* + * Say hello to the world + */ + initlog(L_CO, bootmsg, "booting"); +diff -ur a/src/runlevel.c b/src/runlevel.c +--- a/src/runlevel.c 2022-05-04 08:18:19.100000000 +0000 ++++ b/src/runlevel.c 2022-05-04 08:21:34.870000000 +0000 +@@ -22,7 +22,7 @@ + */ + + #include <stdio.h> +-#include <utmp.h> ++#include <utmpx.h> + #include <time.h> + #include <stdlib.h> + #include "runlevellog.h" +@@ -31,23 +31,23 @@ + int argc; + char **argv; + { +- struct utmp *ut; ++ struct utmpx *ut; + char prev; + int status, runlevel; + + if (argc > 1) utmpname(argv[1]); + +- setutent(); +- while ((ut = getutent()) != NULL) { ++ setutxent(); ++ while ((ut = getutxent()) != NULL) { + if (ut->ut_type == RUN_LVL) { + prev = ut->ut_pid / 256; + if (prev == 0) prev = 'N'; + printf("%c %c\n", prev, ut->ut_pid % 256); +- endutent(); ++ endutxent(); + exit(0); + } + } +- endutent(); ++ endutxent(); + + status = Read_Runlevel_Log(&runlevel); + if (status) +diff -ur a/src/shutdown.c b/src/shutdown.c +--- a/src/shutdown.c 2022-05-04 08:18:19.100000000 +0000 ++++ b/src/shutdown.c 2022-05-04 08:22:47.300000000 +0000 +@@ -54,11 +54,7 @@ + #include <signal.h> + #include <fcntl.h> + #include <stdarg.h> +-#ifdef __FreeBSD__ + #include <utmpx.h> +-#else +-#include <utmp.h> +-#endif + #include <syslog.h> + #include "paths.h" + #include "reboot.h" +@@ -355,6 +351,9 @@ + for(i = 3; i < 20; i++) close(i); + close(255); + ++ /* Record the fact that we're going down */ ++ write_wtmp("shutdown", "~~", 0, RUN_LVL, "~~"); ++ + /* First idle init. */ + if (kill(1, SIGTSTP) < 0) { + fprintf(stderr, "shutdown: can't idle init: %s.\r\n", strerror(errno)); +@@ -381,9 +380,6 @@ + /* Give init the chance to collect zombies. */ + /* sleep(1); */ + +- /* Record the fact that we're going down */ +- write_wtmp("shutdown", "~~", 0, RUN_LVL, "~~"); +- + /* This is for those who have quota installed. */ + #if defined(ACCTON_OFF) + # if (ACCTON_OFF > 1) && (_BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)) +@@ -514,7 +510,7 @@ + struct sigaction sa; + struct tm *lt; + struct stat st; +- struct utmp *ut; ++ struct utmpx *ut; + time_t t, target_time; + char *halttype; + char *downusers[32]; +@@ -634,7 +630,7 @@ + fclose(fp); + + /* Now walk through /var/run/utmp to find logged in users. */ +- while(!user_ok && (ut = getutent()) != NULL) { ++ while(!user_ok && (ut = getutxent()) != NULL) { + + /* See if this is a user process on a VC. */ + if (ut->ut_type != USER_PROCESS) continue; +@@ -660,7 +656,7 @@ + break; + } + } +- endutent(); ++ endutxent(); + + /* See if user was allowed. */ + if (!user_ok) { +diff -ur a/src/utmp.c b/src/utmp.c +--- a/src/utmp.c 2022-05-04 08:18:19.100000000 +0000 ++++ b/src/utmp.c 2022-05-04 08:22:04.640000000 +0000 +@@ -32,11 +32,7 @@ #include <time.h> #include <fcntl.h> #include <string.h> +-#ifdef __FreeBSD__ + #include <utmpx.h> +-#else -#include <utmp.h> -+#include <utmpx.h> +-#endif #include "init.h" #include "initreq.h" -@@ -46,7 +46,11 @@ +@@ -50,7 +46,11 @@ # define HAVE_UPDWTMP 1 # endif #else @@ -107,7 +272,7 @@ #endif -@@ -60,24 +64,10 @@ +@@ -64,24 +64,10 @@ int type, /* TYPE of entry */ char *line) /* Which line is this */ { @@ -133,7 +298,7 @@ #ifdef INIT_MAIN /* * Note if we are going to write a boot record. -@@ -115,13 +105,9 @@ +@@ -119,13 +105,9 @@ * Zero the fields and enter new fields. */ memset(&utmp, 0, sizeof(utmp)); @@ -147,7 +312,7 @@ utmp.ut_pid = pid; utmp.ut_type = type; strncpy(utmp.ut_name, user, sizeof(utmp.ut_name)); -@@ -132,12 +118,7 @@ +@@ -136,12 +118,7 @@ if (uname(&uname_buf) == 0) strncpy(utmp.ut_host, uname_buf.release, sizeof(utmp.ut_host)); @@ -161,7 +326,7 @@ } /* -@@ -152,17 +133,11 @@ +@@ -156,17 +133,11 @@ char *line, /* LINE if used. */ char *oldline) /* Line of old utmp entry. */ { @@ -182,7 +347,7 @@ #ifdef INIT_MAIN /* * Note if we are going to write a boot record. -@@ -203,13 +178,9 @@ +@@ -207,13 +178,9 @@ utmp.ut_type = type; utmp.ut_pid = pid; strncpy(utmp.ut_id, id, sizeof(utmp.ut_id)); @@ -196,7 +361,7 @@ strncpy(utmp.ut_user, user, UT_NAMESIZE); if (line) strncpy(utmp.ut_line, line, UT_LINESIZE); -@@ -221,9 +192,9 @@ +@@ -225,9 +192,9 @@ /* * Find existing entry for the tty line. */ @@ -208,7 +373,7 @@ strncpy(utmp.ut_line, utmptr->ut_line, UT_LINESIZE); if (oldline) strncpy(oldline, utmptr->ut_line, UT_LINESIZE); -@@ -233,9 +204,9 @@ +@@ -237,9 +204,9 @@ /* * Update existing utmp file. */ @@ -221,158 +386,3 @@ } /* ---- sysvinit-2.88dsf/src/init.c.old 2018-07-03 21:21:20.180000000 -0500 -+++ sysvinit-2.88dsf/src/init.c 2018-07-03 21:47:37.630000000 -0500 -@@ -47,7 +47,7 @@ - #include <signal.h> - #include <termios.h> - #include <sys/ttydefaults.h> --#include <utmp.h> -+#include <utmpx.h> - #include <ctype.h> - #include <stdarg.h> - #include <sys/syslog.h> -@@ -132,7 +132,7 @@ - int sltime = 5; /* Sleep time between TERM and KILL */ - char *argv0; /* First arguments; show up in ps listing */ - int maxproclen; /* Maximal length of argv[0] with \0 */ --struct utmp utproto; /* Only used for sizeof(utproto.ut_id) */ -+struct utmpx utproto; /* Only used for sizeof(utproto.ut_id) */ - char *console_dev; /* Console device. */ - int pipe_fd = -1; /* /dev/initctl */ - int did_boot = 0; /* Did we already do BOOT* stuff? */ -@@ -2049,12 +2049,6 @@ - static - void redo_utmp_wtmp(void) - { -- struct stat ustat; -- const int ret = stat(UTMP_FILE, &ustat); -- -- if ((ret < 0) || (ustat.st_size == 0)) -- wrote_utmp_rlevel = wrote_utmp_reboot = 0; -- - if ((wrote_wtmp_reboot == 0) || (wrote_utmp_reboot == 0)) - write_utmp_wtmp("reboot", "~~", 0, BOOT_TIME, "~"); - -@@ -2575,8 +2569,6 @@ - console_init(); - - if (!reload) { -- int fd; -- - /* Close whatever files are open, and reset the console. */ - close(0); - close(1); -@@ -2590,13 +2582,6 @@ - setenv("PATH", PATH_DEFAULT, 1 /* Overwrite */); - - /* -- * Initialize /var/run/utmp (only works if /var is on -- * root and mounted rw) -- */ -- if ((fd = open(UTMP_FILE, O_WRONLY|O_CREAT|O_TRUNC, 0644)) >= 0) -- close(fd); -- -- /* - * Say hello to the world - */ - initlog(L_CO, bootmsg, "booting"); ---- sysvinit-2.88dsf/src/dowall.c.old 2010-03-19 11:53:57.000000000 -0500 -+++ sysvinit-2.88dsf/src/dowall.c 2018-07-03 21:50:28.300000000 -0500 -@@ -31,7 +31,7 @@ - #include <time.h> - #include <unistd.h> - #include <stdio.h> --#include <utmp.h> -+#include <utmpx.h> - #include <pwd.h> - #include <fcntl.h> - #include <signal.h> -@@ -153,7 +153,7 @@ - { - FILE *tp; - struct sigaction sa; -- struct utmp *utmp; -+ struct utmpx *utmp; - time_t t; - char term[UT_LINESIZE+ strlen(_PATH_DEV) + 1]; - char line[81]; -@@ -210,9 +210,9 @@ - sigemptyset(&sa.sa_mask); - sigaction(SIGALRM, &sa, NULL); - -- setutent(); -+ setutxent(); - -- while ((utmp = getutent()) != NULL) { -+ while ((utmp = getutxent()) != NULL) { - if(utmp->ut_type != USER_PROCESS || - utmp->ut_user[0] == 0) continue; - if (strncmp(utmp->ut_line, _PATH_DEV, strlen(_PATH_DEV)) == 0) { -@@ -246,7 +246,7 @@ - if (fd >= 0) close(fd); - if (tp != NULL) fclose(tp); - } -- endutent(); -+ endutxent(); - - exit(0); - } ---- sysvinit-2.88dsf/src/shutdown.c.old 2010-03-23 09:37:01.000000000 -0500 -+++ sysvinit-2.88dsf/src/shutdown.c 2018-07-03 22:50:09.520000000 -0500 -@@ -51,7 +51,7 @@ - #include <signal.h> - #include <fcntl.h> - #include <stdarg.h> --#include <utmp.h> -+#include <utmpx.h> - #include <syslog.h> - #include "paths.h" - #include "reboot.h" -@@ -335,6 +335,9 @@ - for(i = 3; i < 20; i++) close(i); - close(255); - -+ /* Record the fact that we're going down */ -+ write_wtmp("shutdown", "~~", 0, RUN_LVL, "~~"); -+ - /* First idle init. */ - if (kill(1, SIGTSTP) < 0) { - fprintf(stderr, "shutdown: can't idle init: %s.\r\n", strerror(errno)); -@@ -360,9 +363,6 @@ - /* script failed or not present: do it ourself. */ - sleep(1); /* Give init the chance to collect zombies. */ - -- /* Record the fact that we're going down */ -- write_wtmp("shutdown", "~~", 0, RUN_LVL, "~~"); -- - /* This is for those who have quota installed. */ - #if defined(ACCTON_OFF) - # if (ACCTON_OFF > 1) && (_BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)) -@@ -480,7 +480,7 @@ - struct sigaction sa; - struct tm *lt; - struct stat st; -- struct utmp *ut; -+ struct utmpx *ut; - time_t t; - uid_t realuid; - char *halttype; -@@ -586,7 +586,7 @@ - fclose(fp); - - /* Now walk through /var/run/utmp to find logged in users. */ -- while(!user_ok && (ut = getutent()) != NULL) { -+ while(!user_ok && (ut = getutxent()) != NULL) { - - /* See if this is a user process on a VC. */ - if (ut->ut_type != USER_PROCESS) continue; -@@ -612,7 +612,7 @@ - break; - } - } -- endutent(); -+ endutxent(); - - /* See if user was allowed. */ - if (!user_ok) { |