summaryrefslogtreecommitdiff
path: root/system/sysvinit/utmpx.patch
diff options
context:
space:
mode:
Diffstat (limited to 'system/sysvinit/utmpx.patch')
-rw-r--r--system/sysvinit/utmpx.patch436
1 files changed, 223 insertions, 213 deletions
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) {