diff options
author | Miles Bader <miles@gnu.org> | 1996-07-06 03:57:56 +0000 |
---|---|---|
committer | Miles Bader <miles@gnu.org> | 1996-07-06 03:57:56 +0000 |
commit | 2549e7587d7583704a338533cdc3892eece55ab0 (patch) | |
tree | 174cfa230c0becd7dcaa91ff7f372f64533e7432 /login/login.c | |
parent | 36abf0d831de627092222bda744ef9887ada1cb3 (diff) | |
download | glibc-2549e7587d7583704a338533cdc3892eece55ab0.tar.gz glibc-2549e7587d7583704a338533cdc3892eece55ab0.tar.xz glibc-2549e7587d7583704a338533cdc3892eece55ab0.zip |
Fri Jul 5 17:34:47 1996 Miles Bader <miles@gnu.ai.mit.edu> cvs/libc-960706
* login/logout.c (logout): Do nothing if getutline_r returns ESRCH. * login/pututline_r.c (pututline_r): Since we assign RESULT from lseek now, check that it's >= 0, not == 0. Wed Jul 3 13:28:04 1996 Miles Bader <miles@gnu.ai.mit.edu> * login/login.c (login): Make a copy of *UT, fill in various fields that we supply (ut_line, ut_type, ut_pid), and use the copy in place of UT. * login/getutline_r.c (getutline_r): When we return ESRCH, mark UTMP_DATA->ubuf invalid (by setting UTMP_DATA->loc_utmp to 0).
Diffstat (limited to 'login/login.c')
-rw-r--r-- | login/login.c | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/login/login.c b/login/login.c index bbd3be92ce..76f27a0875 100644 --- a/login/login.c +++ b/login/login.c @@ -87,6 +87,13 @@ login (const struct utmp *ut) int found_tty; const char *ttyp; struct utmp_data data = { -1 }; + struct utmp copy = *ut; + + /* Fill in those fields we supply. */ +#if _HAVE_UT_TYPE - 0 + copy.ut_type = USER_PROCESS; +#endif + copy.ut_pid = getpid (); /* Seek tty. */ found_tty = tty_name (STDIN_FILENO, &tty, sizeof (_tty)); @@ -97,39 +104,35 @@ login (const struct utmp *ut) if (found_tty >= 0) { + /* We only want to insert the name of the tty without path. */ + ttyp = basename (tty); + + /* Position to record for this tty. */ + strncpy (copy.ut_line, ttyp, UT_LINESIZE); + /* Tell that we want to use the UTMP file. */ if (utmpname (_PATH_UTMP) != 0) { - struct utmp tmp; struct utmp *old; /* Open UTMP file. */ setutent_r (&data); - /* We only want to insert the name of the tty without path. */ - ttyp = basename (tty); - - /* Position to record for this tty. */ -#if _HAVE_UT_TYPE - 0 - tmp.ut_type = USER_PROCESS; -#endif - strncpy (tmp.ut_line, ttyp, UT_LINESIZE); - /* Read the record. */ - if (getutline_r (&tmp, &old, &data) >= 0) + if (getutline_r (©, &old, &data) >= 0) { #if _HAVE_UT_TYPE - 0 /* We have to fake the old entry because this `login' function does not fit well into the UTMP file handling scheme. */ - old->ut_type = ut->ut_type; + old->ut_type = copy.ut_type; #endif - pututline_r (ut, &data); + pututline_r (©, &data); } else if (errno == ESRCH) /* We didn't find anything. pututline_r will add UT at the end of the file in this case. */ - pututline_r (ut, &data); + pututline_r (©, &data); /* Close UTMP file. */ endutent_r (&data); @@ -153,9 +156,9 @@ login (const struct utmp *ut) /* We have to fake the old entry because this `login' function does not fit well into the UTMP file handling scheme. */ - data.ubuf.ut_type = ut->ut_type; + data.ubuf.ut_type = copy.ut_type; #endif - pututline_r (ut, &data); + pututline_r (©, &data); } /* Close WTMP file. */ |