Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.1
kterm
kterm-6.2.0-utempter.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File kterm-6.2.0-utempter.patch of Package kterm
--- kterm-6.2.0/Imakefile.utempter Fri Jul 12 07:01:04 1996 +++ kterm-6.2.0/Imakefile Thu Jan 31 13:38:41 2002 @@ -23,6 +23,7 @@ PUCCPTYDDEF = -DPUCC_PTYD /* does not need to be setuid */ PTYLIB = -lpucc #endif + PTYLIB = -lutempter OSMAJORVERSION = OSMajorVersion OSMINORVERSION = OSMinorVersion --- kterm-6.2.0/main.c.utempter Thu Jan 31 13:38:41 2002 +++ kterm-6.2.0/main.c Thu Jan 31 13:44:21 2002 @@ -2930,189 +2930,6 @@ #endif #endif /* !USE_SYSV_PGRP */ -#ifdef UTMP - pw = getpwuid(screen->uid); - if (pw && pw->pw_name) - Setenv ("LOGNAME=", pw->pw_name); /* for POSIX */ -#ifdef USE_SYSV_UTMP - /* Set up our utmp entry now. We need to do it here - ** for the following reasons: - ** - It needs to have our correct process id (for - ** login). - ** - If our parent was to set it after the fork(), - ** it might make it out before we need it. - ** - We need to do it before we go and change our - ** user and group id's. - */ -#ifdef CRAY -#define PTYCHARLEN 4 -#else -#ifdef __osf__ -#define PTYCHARLEN 5 -#else -#define PTYCHARLEN 2 -#endif -#endif - - (void) setutent (); - /* set up entry to search for */ - ptyname = ttydev; -#ifndef __sgi - if (PTYCHARLEN >= (int)strlen(ptyname)) - ptynameptr = ptyname; - else - ptynameptr = ptyname + strlen(ptyname) - PTYCHARLEN; - (void) strncpy(utmp.ut_id, ptynameptr, sizeof (utmp.ut_id)); -#else - (void) strncpy(utmp.ut_id,ptyname + sizeof("/dev/tty")-1, - sizeof (utmp.ut_id)); - -#endif - utmp.ut_type = DEAD_PROCESS; - - /* position to entry in utmp file */ - (void) getutid(&utmp); - - /* set up the new entry */ - utmp.ut_type = USER_PROCESS; -#if !(defined(linux) && (!defined(__GLIBC__) || (__GLIBC__ < 2))) && !defined(SVR4) - utmp.ut_exit.e_exit = 2; -#endif - (void) strncpy(utmp.ut_user, - (pw && pw->pw_name) ? pw->pw_name : "????", - sizeof(utmp.ut_user)); - -#ifndef __sgi - (void)strncpy(utmp.ut_id, ptynameptr, sizeof(utmp.ut_id)); -#else - (void) strncpy(utmp.ut_id,ptyname + sizeof("/dev/tty")-1, - sizeof (utmp.ut_id)); -#endif - (void) strncpy (utmp.ut_line, - ptyname + strlen("/dev/"), sizeof (utmp.ut_line)); - -#ifdef HAS_UTMP_UT_HOST - (void) strncpy(buf, DisplayString(screen->display), - sizeof(buf)); -#ifndef linux - { - char *disfin = strrchr(buf, ':'); - if (disfin) - *disfin = '\0'; - } -#endif - (void) strncpy(utmp.ut_host, buf, sizeof(utmp.ut_host)); -#endif - (void) strncpy(utmp.ut_name, pw->pw_name, - sizeof(utmp.ut_name)); - - utmp.ut_pid = getpid(); -#if defined(SVR4) || defined(SCO325) || (defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2)) - utmp.ut_session = getsid(0); - utmp.ut_xtime = time ((Time_t *) 0); - utmp.ut_tv.tv_usec = 0; -#else - utmp.ut_time = time ((Time_t *) 0); -#endif - - /* write out the entry */ - if (!resource.utmpInhibit) - (void) pututline(&utmp); -#ifdef WTMP -#if defined(SVR4) || defined(SCO325) - if (term->misc.login_shell) - updwtmpx(WTMPX_FILE, &utmp); -#elif defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) - if (term->misc.login_shell) - updwtmp(etc_wtmp, &utmp); -#else - if (term->misc.login_shell && - (i = open(etc_wtmp, O_WRONLY|O_APPEND)) >= 0) { - write(i, (char *)&utmp, sizeof(struct utmp)); - close(i); - } -#endif -#endif - /* close the file */ - (void) endutent(); - -#else /* USE_SYSV_UTMP */ - /* We can now get our ttyslot! We can also set the initial - * UTMP entry. - */ - tslot = ttyslot(); - added_utmp_entry = False; - { - if (pw && !resource.utmpInhibit && - (i = open(etc_utmp, O_WRONLY)) >= 0) { - bzero((char *)&utmp, sizeof(struct utmp)); - (void) strncpy(utmp.ut_line, - ttydev + strlen("/dev/"), - sizeof(utmp.ut_line)); - (void) strncpy(utmp.ut_name, pw->pw_name, - sizeof(utmp.ut_name)); -#ifdef HAS_UTMP_UT_HOST - (void) strncpy(utmp.ut_host, - XDisplayString (screen->display), - sizeof(utmp.ut_host)); -#endif - /* cast needed on Ultrix 4.4 */ - time((Time_t*)&utmp.ut_time); - lseek(i, (long)(tslot * sizeof(struct utmp)), 0); - write(i, (char *)&utmp, sizeof(struct utmp)); - close(i); - added_utmp_entry = True; -#ifdef WTMP - if (term->misc.login_shell && - (i = open(etc_wtmp, O_WRONLY|O_APPEND)) >= 0) { - int status; - status = write(i, (char *)&utmp, - sizeof(struct utmp)); - status = close(i); - } -#endif /* WTMP */ -#ifdef LASTLOG - if (term->misc.login_shell && - (i = open(etc_lastlog, O_WRONLY)) >= 0) { - bzero((char *)&lastlog, - sizeof (struct lastlog)); - (void) strncpy(lastlog.ll_line, ttydev + - sizeof("/dev"), - sizeof (lastlog.ll_line)); - (void) strncpy(lastlog.ll_host, - XDisplayString (screen->display), - sizeof (lastlog.ll_host)); - time(&lastlog.ll_time); - lseek(i, (long)(screen->uid * - sizeof (struct lastlog)), 0); - write(i, (char *)&lastlog, - sizeof (struct lastlog)); - close(i); - } -#endif /* LASTLOG */ - } else - tslot = -tslot; - } - - /* Let's pass our ttyslot to our parent so that it can - * clean up after us. - */ -#ifdef USE_HANDSHAKE - handshake.tty_slot = tslot; -#endif /* USE_HANDSHAKE */ -#endif /* USE_SYSV_UTMP */ - -#ifdef USE_HANDSHAKE - /* Let our parent know that we set up our utmp entry - * so that it can clean up after us. - */ - handshake.status = UTMP_ADDED; - handshake.error = 0; - strcpy(handshake.buffer, ttydev); - (void)write(cp_pipe[1], (char *)&handshake, sizeof(handshake)); -#endif /* USE_HANDSHAKE */ -#endif/* UTMP */ - (void) setgid (screen->gid); #ifdef HAS_BSD_GROUPS if (geteuid() == 0 && pw) @@ -3361,6 +3178,8 @@ #endif /* USE_HANDSHAKE */ } /* end if no slave */ + addToUtmp(ttydev, NULL, screen->respond); + /* * still in parent (xterm process) */ @@ -3422,102 +3241,13 @@ { register TScreen *screen = &term->screen; int pty = term->screen.respond; /* file descriptor of pty */ -#ifdef UTMP -#ifdef USE_SYSV_UTMP -#ifdef SVR4 - struct utmpx utmp; - struct utmpx *utptr; -#else - struct utmp utmp; - struct utmp *utptr; -#endif - char* ptyname; - char* ptynameptr; -#if defined(WTMP) && !defined(SVR4) && !(defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2)) - int fd; /* for /etc/wtmp */ - int i; -#endif /* don't do this more than once */ if (xterm_exiting) SIGNAL_RETURN; xterm_exiting = True; + removeFromUtmp(); -#ifdef PUCC_PTYD - closepty(ttydev, ptydev, (resource.utmpInhibit ? OPTY_NOP : OPTY_LOGIN), Ptyfd); -#endif /* PUCC_PTYD */ - - /* cleanup the utmp entry we forged earlier */ - if (!resource.utmpInhibit -#ifdef USE_HANDSHAKE /* without handshake, no way to know */ - && added_utmp_entry -#endif /* USE_HANDSHAKE */ - ) { - ptyname = ttydev; - utmp.ut_type = USER_PROCESS; - if (PTYCHARLEN >= (int)strlen(ptyname)) - ptynameptr = ptyname; - else - ptynameptr = ptyname + strlen(ptyname) - PTYCHARLEN; - (void) strncpy(utmp.ut_id, ptynameptr, sizeof(utmp.ut_id)); - (void) setutent(); - utptr = getutid(&utmp); - /* write it out only if it exists, and the pid's match */ - if (utptr && (utptr->ut_pid == screen->pid)) { - utptr->ut_type = DEAD_PROCESS; -#if defined(SVR4) || defined(SCO325) || (defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2)) - utmp.ut_session = getsid(0); - utmp.ut_xtime = time ((Time_t *) 0); - utmp.ut_tv.tv_usec = 0; -#else - utptr->ut_time = time((Time_t *) 0); -#endif - (void) pututline(utptr); -#ifdef WTMP -#if defined(SVR4) || defined(SCO325) - if (term->misc.login_shell) - updwtmpx(WTMPX_FILE, utptr); -#elif defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) - strncpy (utmp.ut_line, utptr->ut_line, sizeof (utmp.ut_line)); - if (term->misc.login_shell) - updwtmp(etc_wtmp, utptr); -#else - /* set wtmp entry if wtmp file exists */ - if (term->misc.login_shell && - (fd = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) { - i = write(fd, utptr, sizeof(*utptr)); - i = close(fd); - } -#endif -#endif - - } - (void) endutent(); - } -#else /* not USE_SYSV_UTMP */ - register int wfd; - register int i; - struct utmp utmp; - - if (!resource.utmpInhibit && added_utmp_entry && - (!am_slave && tslot > 0 && (wfd = open(etc_utmp, O_WRONLY)) >= 0)){ - bzero((char *)&utmp, sizeof(struct utmp)); - lseek(wfd, (long)(tslot * sizeof(struct utmp)), 0); - write(wfd, (char *)&utmp, sizeof(struct utmp)); - close(wfd); -#ifdef WTMP - if (term->misc.login_shell && - (wfd = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) { - (void) strncpy(utmp.ut_line, ttydev + - sizeof("/dev"), sizeof (utmp.ut_line)); - time(&utmp.ut_time); - i = write(wfd, (char *)&utmp, sizeof(struct utmp)); - i = close(wfd); - } -#endif /* WTMP */ - } -#endif /* USE_SYSV_UTMP */ -#endif /* UTMP */ close(pty); /* close explicitly to avoid race with slave side */ #ifdef ALLOWLOGGING if(screen->logging)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor