
1: /* Copyright (C) 1996, 1997, 2002, 2007 Free Software Foundation, Inc. 2: This file is part of the GNU C Library. 3: Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. 4: 5: The GNU C Library is free software; you can redistribute it and/or 6: modify it under the terms of the GNU Lesser General Public 7: License as published by the Free Software Foundation; either 8: version 2.1 of the License, or (at your option) any later version. 9: 10: The GNU C Library is distributed in the hope that it will be useful, 11: but WITHOUT ANY WARRANTY; without even the implied warranty of 12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13: Lesser General Public License for more details. 14: 15: You should have received a copy of the GNU Lesser General Public 16: License along with the GNU C Library; if not, write to the Free 17: Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18: 02111-1307 USA. */ 19: 20: #include <errno.h> 21: #include <string.h> 22: #include <utmp.h> 23: #include <sys/time.h> 24: 25: int 26: logout (const char *line) 27: { 28: struct utmp tmp, utbuf; 29: struct utmp *ut; 30: int result = 0; 31: 32: /* Tell that we want to use the UTMP file. */ 33: if (utmpname (_PATH_UTMP) == -1) 34: return 0; 35: 36: /* Open UTMP file. */ 37: setutent (); 38: 39: /* Fill in search information. */ 40: #if _HAVE_UT_TYPE - 0 41: tmp.ut_type = USER_PROCESS; 42: #endif 43: strncpy (tmp.ut_line, line, sizeof tmp.ut_line); 44: 45: /* Read the record. */ 46: if (getutline_r (&tmp, &utbuf, &ut) >= 0) 47: { 48: /* Clear information about who & from where. */ 49: bzero (ut->ut_name, sizeof ut->ut_name); 50: #if _HAVE_UT_HOST - 0 51: bzero (ut->ut_host, sizeof ut->ut_host); 52: #endif 53: #if _HAVE_UT_TV - 0 54: struct timeval tv; 55: __gettimeofday (&tv, NULL); 56: ut->ut_tv.tv_sec = tv.tv_sec; 57: ut->ut_tv.tv_usec = tv.tv_usec; 58: #else 59: ut->ut_time = time (NULL); 60: #endif 61: #if _HAVE_UT_TYPE - 0 62: ut->ut_type = DEAD_PROCESS; 63: #endif 64: 65: if (pututline (ut) != NULL) 66: result = 1; 67: } 68: 69: /* Close UTMP file. */ 70: endutent (); 71: 72: return result; 73: }