--- rxvt-2.7.10/autoconf/Make.common.in.orig Fri Mar 28 06:34:40 2003 +++ rxvt-2.7.10/autoconf/Make.common.in Fri Mar 28 06:35:12 2003 @@ -68,7 +68,7 @@ LIBTOOL = @LIBTOOL@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEBUG) $(DINCLUDE) $(XINC) -I$(basedir) -I$(srcdir) -I. -LINK = $(CC) $(CFLAGS) $(LDFLAGS) +LINK = $(CC) $(CFLAGS) $(LDFLAGS) -lutempter -lutil # End of common section of the Makefile #------------------------------------------------------------------------- --- rxvt-2.7.10/src/logging.c.orig Fri Mar 28 06:31:43 2003 +++ rxvt-2.7.10/src/logging.c Fri Mar 28 06:33:37 2003 @@ -60,157 +60,7 @@ void rxvt_makeutent(rxvt_t *r, const char *pty, const char *hostname) { -#ifdef HAVE_STRUCT_UTMP - struct utmp *ut = &(r->h->ut); -#endif -#ifdef HAVE_STRUCT_UTMPX - struct utmpx *utx = &(r->h->utx); -#endif -#ifdef HAVE_UTMP_PID - int i; -#endif - char ut_id[5]; - struct passwd *pwent = getpwuid(getuid()); - - if (!STRNCMP(pty, "/dev/", 5)) - pty += 5; /* skip /dev/ prefix */ - - if (!STRNCMP(pty, "pty", 3) || !STRNCMP(pty, "tty", 3)) { - STRNCPY(ut_id, (pty + 3), sizeof(ut_id)); - } -#ifdef HAVE_UTMP_PID - else if (sscanf(pty, "pts/%d", &i) == 1) - sprintf(ut_id, "vt%02x", (i & 0xff)); /* sysv naming */ -#endif - else if (STRNCMP(pty, "pty", 3) && STRNCMP(pty, "tty", 3)) { - rxvt_print_error("can't parse tty name \"%s\"", pty); - return; - } - -#ifdef HAVE_STRUCT_UTMP - MEMSET(ut, 0, sizeof(struct utmp)); -# ifdef HAVE_UTMP_PID - setutent(); - STRNCPY(ut->ut_id, ut_id, sizeof(ut->ut_id)); - ut->ut_type = DEAD_PROCESS; - getutid(ut); /* position to entry in utmp file */ - STRNCPY(r->h->ut_id, ut_id, sizeof(r->h->ut_id)); -# endif -#endif - -#ifdef HAVE_STRUCT_UTMPX - MEMSET(utx, 0, sizeof(struct utmpx)); - setutxent(); - STRNCPY(utx->ut_id, ut_id, sizeof(utx->ut_id)); - utx->ut_type = DEAD_PROCESS; - getutxid(utx); /* position to entry in utmp file */ - STRNCPY(r->h->ut_id, ut_id, sizeof(r->h->ut_id)); -#endif - -#ifdef HAVE_STRUCT_UTMP - STRNCPY(ut->ut_line, pty, sizeof(ut->ut_line)); - ut->ut_time = time(NULL); -# ifdef HAVE_UTMP_PID - STRNCPY(ut->ut_user, (pwent && pwent->pw_name) ? pwent->pw_name : "?", - sizeof(ut->ut_user)); - STRNCPY(ut->ut_id, ut_id, sizeof(ut->ut_id)); - ut->ut_time = time(NULL); - ut->ut_pid = r->h->cmd_pid; -# ifdef HAVE_UTMP_HOST - STRNCPY(ut->ut_host, hostname, sizeof(ut->ut_host)); -# endif - ut->ut_type = USER_PROCESS; - pututline(ut); - endutent(); /* close the file */ - r->h->utmp_pos = -1; -# else - STRNCPY(ut->ut_name, (pwent && pwent->pw_name) ? pwent->pw_name : "?", - sizeof(ut->ut_name)); -# ifdef HAVE_UTMP_HOST - STRNCPY(ut->ut_host, hostname, sizeof(ut->ut_host)); -# endif -# endif -#endif - -#ifdef HAVE_STRUCT_UTMPX - STRNCPY(utx->ut_line, pty, sizeof(utx->ut_line)); - STRNCPY(utx->ut_user, (pwent && pwent->pw_name) ? pwent->pw_name : "?", - sizeof(utx->ut_user)); - STRNCPY(utx->ut_id, ut_id, sizeof(utx->ut_id)); - utx->ut_session = getsid(0); - utx->ut_tv.tv_sec = time(NULL); - utx->ut_tv.tv_usec = 0; - utx->ut_pid = r->h->cmd_pid; -# ifdef HAVE_UTMPX_HOST - STRNCPY(utx->ut_host, hostname, sizeof(utx->ut_host)); -# if 0 - { - char *colon; - - if ((colon = STRRCHR(ut->ut_host, ':')) != NULL) - *colon = '\0'; - } -# endif -# endif - utx->ut_type = USER_PROCESS; - pututxline(utx); - endutxent(); /* close the file */ - r->h->utmp_pos = -1; -#endif - -#if defined(HAVE_STRUCT_UTMP) && !defined(HAVE_UTMP_PID) - { - int i; -# ifdef HAVE_TTYSLOT - i = ttyslot(); - if (rxvt_write_bsd_utmp(i, ut)) - r->h->utmp_pos = i; -# else - FILE *fd0; - - if ((fd0 = fopen(TTYTAB_FILENAME, "r")) != NULL) { - char buf[256], name[256]; - - buf[sizeof(buf) - 1] = '\0'; - for (i = 1; (fgets(buf, sizeof(buf) - 1, fd0) != NULL);) { - if (*buf == '#' || sscanf(buf, "%s", name) != 1) - continue; - if (!STRCMP(ut->ut_line, name)) { - if (!rxvt_write_bsd_utmp(i, ut)) - i = 0; - r->h->utmp_pos = i; - fclose(fd0); - break; - } - i++; - } - fclose(fd0); - } -# endif - } -#endif - -#ifdef WTMP_SUPPORT -# ifdef WTMP_ONLY_ON_LOGIN - if (r->Options & Opt_loginShell) -# endif - { -# ifdef HAVE_STRUCT_UTMP -# ifdef HAVE_UPDWTMP - updwtmp(RXVT_WTMP_FILE, ut); -# else - rxvt_update_wtmp(RXVT_WTMP_FILE, ut); -# endif -# endif -# ifdef HAVE_STRUCT_UTMPX - updwtmpx(RXVT_WTMPX_FILE, utx); -# endif - } -#endif -#if defined(LASTLOG_SUPPORT) && defined(RXVT_LASTLOG_FILE) - if (r->Options & Opt_loginShell) - rxvt_update_lastlog(RXVT_LASTLOG_FILE, pty, hostname); -#endif + addToUtmp(pty, NULL, r->cmd_fd); } /* ------------------------------------------------------------------------- */ @@ -221,85 +71,7 @@ void rxvt_cleanutent(rxvt_t *r) { -#ifdef HAVE_STRUCT_UTMP - struct utmp *tmput, *ut = &(r->h->ut); -#endif -#ifdef HAVE_STRUCT_UTMPX - struct utmpx *tmputx, *utx = &(r->h->utx); -#endif - -#ifdef HAVE_STRUCT_UTMP -# ifdef HAVE_UTMP_PID - MEMSET(ut, 0, sizeof(struct utmp)); - setutent(); - STRNCPY(ut->ut_id, r->h->ut_id, sizeof(ut->ut_id)); - ut->ut_type = USER_PROCESS; - if ((tmput = getutid(ut))) /* position to entry in utmp file */ - ut = tmput; - ut->ut_type = DEAD_PROCESS; -# else - MEMSET(ut->ut_name, 0, sizeof(ut->ut_name)); -# ifdef HAVE_UTMP_HOST - MEMSET(ut->ut_host, 0, sizeof(ut->ut_host)); -# endif -# endif - ut->ut_time = time(NULL); -#endif - -#ifdef HAVE_STRUCT_UTMPX - MEMSET(utx, 0, sizeof(struct utmpx)); - setutxent(); - STRNCPY(utx->ut_id, r->h->ut_id, sizeof(utx->ut_id)); - utx->ut_type = USER_PROCESS; - if ((tmputx = getutxid(utx))) /* position to entry in utmp file */ - utx = tmputx; - utx->ut_type = DEAD_PROCESS; - utx->ut_session = getsid(0); - utx->ut_tv.tv_sec = time(NULL); - utx->ut_tv.tv_usec = 0; -#endif - - /* - * Write ending wtmp entry - */ -#ifdef WTMP_SUPPORT -# ifdef WTMP_ONLY_ON_LOGIN - if (r->Options & Opt_loginShell) -# endif - { -# ifdef HAVE_STRUCT_UTMP -# ifdef HAVE_UPDWTMP - updwtmp(RXVT_WTMP_FILE, ut); -# else - rxvt_update_wtmp(RXVT_WTMP_FILE, ut); -# endif -# endif -# ifdef HAVE_STRUCT_UTMPX - updwtmpx(RXVT_WTMPX_FILE, utx); -# endif - } -#endif - - /* - * Write utmp entry - */ -#ifdef HAVE_STRUCT_UTMP -# ifdef HAVE_UTMP_PID - if (ut->ut_pid == r->h->cmd_pid) - pututline(ut); - endutent(); -# else - if (r->h->utmp_pos > 0) { - MEMSET(ut, 0, sizeof(struct utmp)); - rxvt_write_bsd_utmp(r->h->utmp_pos, ut); - } -# endif -#endif -#ifdef HAVE_STRUCT_UTMPX - if (utx->ut_pid == r->h->cmd_pid) - pututxline(utx); - endutxent(); -#endif + removeFromUtmp(); } /* ------------------------------------------------------------------------- */