int main(int argc, char **argv)
{
extern int pty_master_fd; /* declared in pty.c */
+ extern int pty_stamp_utmp; /* declared in pty.c */
extern char **pty_argv; /* declared in pty.c */
int err = 0;
if (!strcmp(p, "-hide")) {
cfg.hide_mouseptr = 1;
}
+ if (!strcmp(p, "-ut-")) {
+ pty_stamp_utmp = 0;
+ }
if (!strcmp(p, "-nethack")) {
cfg.nethack_keypad = 1;
}
#endif
#endif
+/*
+ * Set up a default for vaguely sane systems. The idea is that if
+ * OMIT_UTMP is not defined, then at least one of the symbols which
+ * enable particular forms of utmp processing should be, if only so
+ * that a link error can warn you that you should have defined
+ * OMIT_UTMP if you didn't want any. Currently HAVE_PUTUTLINE is
+ * the only such symbol.
+ */
+#ifndef OMIT_UTMP
+#if !defined HAVE_PUTUTLINE
+#define HAVE_PUTUTLINE
+#endif
+#endif
+
int pty_master_fd;
+int pty_stamp_utmp = 1;
+static int pty_stamped_utmp = 0;
static int pty_child_pid;
static sig_atomic_t pty_child_dead;
#ifndef OMIT_UTMP
FILE *lastlog;
#endif
struct passwd *pw;
- char *location = get_x_display();
+ char *location;
FILE *wtmp;
+ if (!pty_stamp_utmp)
+ return;
+
pw = getpwuid(getuid());
+ location = get_x_display();
memset(&utmp_entry, 0, sizeof(utmp_entry));
utmp_entry.ut_type = USER_PROCESS;
utmp_entry.ut_pid = getpid();
}
#endif
+ pty_stamped_utmp = 1;
+
#endif
}
#ifndef OMIT_UTMP
FILE *wtmp;
+ if (!pty_stamp_utmp || !pty_stamped_utmp)
+ return;
+
utmp_entry.ut_type = DEAD_PROCESS;
memset(utmp_entry.ut_user, 0, lenof(utmp_entry.ut_user));
time(&utmp_entry.ut_time);
endutent();
#endif
+ pty_stamped_utmp = 0; /* ensure we never double-cleanup */
#endif
}