summaryrefslogblamecommitdiffstats
path: root/patches/source/rxvt/rxvt.utempter.diff
blob: 54e06f7af0cc42a4c8386f130dd2fcf2fe7b5ce4 (plain) (tree)




















































































































































































































































































                                                                                                                    
--- ./src/logging.c.orig	2002-12-15 16:33:04.000000000 -0800
+++ ./src/logging.c	2003-06-07 21:08:52.000000000 -0700
@@ -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();
 }
 
 /* ------------------------------------------------------------------------- */
--- ./src/init.c.orig	2002-12-03 21:21:39.000000000 -0800
+++ ./src/init.c	2003-06-07 21:09:26.000000000 -0700
@@ -858,6 +858,7 @@
 	rxvt_print_error("aborting");
 	exit(EXIT_FAILURE);
     }
+    rxvt_privileged_utmp(r, SAVE);
 }
 
 /*----------------------------------------------------------------------*/
@@ -1364,7 +1365,6 @@
 #endif
     r->num_fds++;		/* counts from 0 */
 
-    rxvt_privileged_utmp(r, SAVE);
     return cfd;
 }
 
--- ./autoconf/Make.common.in.orig	2001-11-29 19:22:56.000000000 -0800
+++ ./autoconf/Make.common.in	2003-06-07 21:08:52.000000000 -0700
@@ -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
 #-------------------------------------------------------------------------