diff options
Diffstat (limited to 'sysutils/screen49/files/patch-utmp.c')
| -rw-r--r-- | sysutils/screen49/files/patch-utmp.c | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/sysutils/screen49/files/patch-utmp.c b/sysutils/screen49/files/patch-utmp.c new file mode 100644 index 000000000000..0573d96ceab5 --- /dev/null +++ b/sysutils/screen49/files/patch-utmp.c @@ -0,0 +1,156 @@ +--- utmp.c.orig 2023-08-15 17:29:26.000000000 -0700 ++++ utmp.c 2023-08-19 08:57:48.376313000 -0700 +@@ -26,6 +26,7 @@ + **************************************************************** + */ + ++#include <sys/param.h> + #include <sys/types.h> + #include <sys/stat.h> + #include <fcntl.h> +@@ -89,11 +90,13 @@ + static int pututslot __P((slot_t, struct utmp *, char *, struct win *)); + static struct utmp *getutslot __P((slot_t)); + #ifndef GETUTENT ++#if 0 + static struct utmp *getutent __P((void)); + static void endutent __P((void)); + static int initutmp __P((void)); + static void setutent __P((void)); + #endif ++#endif + #if defined(linux) && defined(GETUTENT) + static struct utmp *xpututline __P((struct utmp *utmp)); + # define pututline xpututline +@@ -102,9 +105,7 @@ + + static int utmpok; + static char UtmpName[] = UTMPFILE; +-#ifndef UTMP_HELPER + static int utmpfd = -1; +-#endif + + + # if defined(GETUTENT) && (!defined(SVR4) || defined(__hpux)) && ! defined(__CYGWIN__) +@@ -409,12 +410,6 @@ + register slot_t slot; + struct utmp u; + int saved_ut; +-#ifdef UTHOST +- char *p; +- char host[sizeof(D_loginhost) + 15]; +-#else +- char *host = 0; +-#endif /* UTHOST */ + + wi->w_slot = (slot_t)0; + if (!utmpok || wi->w_type != W_TYPE_PTY) +@@ -435,51 +430,13 @@ + makeuser(&u, stripdev(wi->w_tty), LoginName, wi->w_pid); + + #ifdef UTHOST +- host[sizeof(host) - 15] = '\0'; +- if (display) +- { +- strncpy(host, D_loginhost, sizeof(host) - 15); +- if (D_loginslot != (slot_t)0 && D_loginslot != (slot_t)-1 && host[0] != '\0') +- { +- /* +- * we want to set our ut_host field to something like +- * ":ttyhf:s.0" or +- * "faui45:s.0" or +- * "132.199.81.4:s.0" (even this may hurt..), but not +- * "faui45.informati"......:s.0 +- * HPUX uses host:0.0, so chop at "." and ":" (Eric Backus) +- */ +- for (p = host; *p; p++) +- if ((*p < '0' || *p > '9') && (*p != '.')) +- break; +- if (*p) +- { +- for (p = host; *p; p++) +- if (*p == '.' || (*p == ':' && p != host)) +- { +- *p = '\0'; +- break; +- } +- } +- } +- else +- { +- strncpy(host + 1, stripdev(D_usertty), sizeof(host) - 15 - 1); +- host[0] = ':'; +- } +- } +- else +- strncpy(host, "local", sizeof(host) - 15); +- +- sprintf(host + strlen(host), ":S.%d", wi->w_number); +- debug1("rlogin hostname: '%s'\n", host); +- + # if !defined(_SEQUENT_) && !defined(sequent) +- strncpy(u.ut_host, host, sizeof(u.ut_host)); ++ if (display) ++ strncpy(u.ut_host, D_loginhost, sizeof(u.ut_host)); + # endif + #endif /* UTHOST */ + +- if (pututslot(slot, &u, host, wi) == 0) ++ if (pututslot(slot, &u, D_loginhost, wi) == 0) + { + Msg(errno,"Could not write %s", UtmpName); + UT_CLOSE; +@@ -607,7 +564,7 @@ + struct utmp *u; + { + u->ut_type = DEAD_PROCESS; +-#if (!defined(linux) || defined(EMPTY)) && !defined(__CYGWIN__) ++#if (!defined(linux) || defined(EMPTY)) && !defined(__CYGWIN__) && !defined(__FreeBSD__) + u->ut_exit.e_termination = 0; + u->ut_exit.e_exit = 0; + #endif +@@ -640,7 +597,11 @@ + /* must use temp variable because of NetBSD/sparc64, where + * ut_xtime is long(64) but time_t is int(32) */ + (void)time(&now); +- u->ut_time = now; ++#if defined(__FreeBSD_version) && __FreeBSD_version < 900000 ++ u->ut_time = now; ++#else ++ u->ut_tv.tv_sec = now; ++#endif + } + + static slot_t +@@ -670,6 +631,7 @@ + return (utmpfd = open(UtmpName, O_RDWR)) >= 0; + } + ++#if 0 + static void + setutent() + { +@@ -694,6 +656,7 @@ + return 0; + return &uent; + } ++#endif + + static struct utmp * + getutslot(slot) +@@ -750,9 +713,13 @@ + { + time_t now; + strncpy(u->ut_line, line, sizeof(u->ut_line)); +- strncpy(u->ut_name, user, sizeof(u->ut_name)); ++ strncpy(u->ut_user, user, sizeof(u->ut_user)); + (void)time(&now); +- u->ut_time = now; ++#if defined(__FreeBSD_version) && __FreeBSD_version < 900000 ++ u->ut_time = now; ++#else ++ u->ut_tv.tv_sec = now; ++#endif + } + + static slot_t |
