diff options
Diffstat (limited to 'time/logwtmp.c')
-rw-r--r-- | time/logwtmp.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/time/logwtmp.c b/time/logwtmp.c new file mode 100644 index 000000000..6cf3237a6 --- /dev/null +++ b/time/logwtmp.c @@ -0,0 +1,65 @@ +#ifndef lint +#ifndef NOID +static char elsieid[] = "@(#)logwtmp.c 7.4"; +/* As received from UCB, with include reordering and OLD_TIME condition. */ +#endif /* !defined NOID */ +#endif /* !defined lint */ + +/* + * Copyright (c) 1988 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANT[A]BILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#ifndef lint +#ifdef LIBC_SCCS +static char sccsid[] = "@(#)logwtmp.c 5.2 (Berkeley) 9/20/88"; +#endif /* defined LIBC_SCCS */ +#endif /* !defined lint */ + +#include <sys/types.h> +#include <utmp.h> + +#ifndef OLD_TIME + +#include <sys/file.h> +#include <sys/time.h> +#include <sys/stat.h> + +#define WTMPFILE "/usr/adm/wtmp" + +logwtmp(line, name, host) + char *line, *name, *host; +{ + struct utmp ut; + struct stat buf; + int fd; + time_t time(); + char *strncpy(); + + if ((fd = open(WTMPFILE, O_WRONLY|O_APPEND, 0)) < 0) + return; + if (!fstat(fd, &buf)) { + (void)strncpy(ut.ut_line, line, sizeof(ut.ut_line)); + (void)strncpy(ut.ut_name, name, sizeof(ut.ut_name)); + (void)strncpy(ut.ut_host, host, sizeof(ut.ut_host)); + (void)time(&ut.ut_time); + if (write(fd, (char *)&ut, sizeof(struct utmp)) != + sizeof(struct utmp)) + (void)ftruncate(fd, buf.st_size); + } + (void)close(fd); +} + +#endif /* !defined OLD_TIME */ |