about summary refs log tree commit diff
path: root/login/login.c
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>1996-07-06 03:57:56 +0000
committerMiles Bader <miles@gnu.org>1996-07-06 03:57:56 +0000
commit2549e7587d7583704a338533cdc3892eece55ab0 (patch)
tree174cfa230c0becd7dcaa91ff7f372f64533e7432 /login/login.c
parent36abf0d831de627092222bda744ef9887ada1cb3 (diff)
downloadglibc-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.c35
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 (&copy, &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 (&copy, &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 (&copy, &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 (&copy, &data);
 	}
 
       /* Close WTMP file.  */