From f51dc0319e586d5809cc251a9767d23638610694 Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 15 Oct 2002 12:42:58 +0000 Subject: [PATCH] Finish up utmp processing: add the -ut- command-line option to suppress stamping it at all. (I suppose this ought to be part of the cfg structure really.) git-svn-id: svn://svn.tartarus.org/sgt/putty@2059 cda61777-01e9-0310-a592-d414129be87e --- unix/pterm.c | 4 ++++ unix/pty.c | 28 +++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/unix/pterm.c b/unix/pterm.c index 0a72d3b8..c5d742c0 100644 --- a/unix/pterm.c +++ b/unix/pterm.c @@ -1283,6 +1283,7 @@ char *get_x_display(void) 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; @@ -1329,6 +1330,9 @@ int main(int argc, char **argv) if (!strcmp(p, "-hide")) { cfg.hide_mouseptr = 1; } + if (!strcmp(p, "-ut-")) { + pty_stamp_utmp = 0; + } if (!strcmp(p, "-nethack")) { cfg.nethack_keypad = 1; } diff --git a/unix/pty.c b/unix/pty.c index 8edbe484..a685146a 100644 --- a/unix/pty.c +++ b/unix/pty.c @@ -40,7 +40,23 @@ #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 @@ -63,10 +79,14 @@ static void setup_utmp(char *ttyname) 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(); @@ -100,6 +120,8 @@ static void setup_utmp(char *ttyname) } #endif + pty_stamped_utmp = 1; + #endif } @@ -108,6 +130,9 @@ static void cleanup_utmp(void) #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); @@ -127,6 +152,7 @@ static void cleanup_utmp(void) endutent(); #endif + pty_stamped_utmp = 0; /* ensure we never double-cleanup */ #endif } -- 2.11.0