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 | |
parent | 36abf0d831de627092222bda744ef9887ada1cb3 (diff) | |
download | glibc-2549e7587d7583704a338533cdc3892eece55ab0.zip glibc-2549e7587d7583704a338533cdc3892eece55ab0.tar.gz glibc-2549e7587d7583704a338533cdc3892eece55ab0.tar.bz2 |
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')
-rw-r--r-- | login/login.c | 35 | ||||
-rw-r--r-- | login/logout.c | 2 |
2 files changed, 20 insertions, 17 deletions
diff --git a/login/login.c b/login/login.c index bbd3be92..76f27a0 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. */ diff --git a/login/logout.c b/login/logout.c index 1b8dc31..bf45451 100644 --- a/login/logout.c +++ b/login/logout.c @@ -44,7 +44,7 @@ logout (const char *line) strncpy (tmp.ut_line, line, sizeof tmp.ut_line); /* Read the record. */ - if (getutline_r (&tmp, &ut, &data) >= 0 || errno == ESRCH) + if (getutline_r (&tmp, &ut, &data) >= 0) { /* Clear information about who & from where. */ bzero (ut->ut_name, sizeof ut->ut_name); |