summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/libugly/wtent.c
blob: 1ca7c32028c660b47bfbfb642b7c8e0d16ef305b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <utmp.h>

void updwtmp(const char *wtmp_file, const struct utmp *ut) {
  int fd = open(wtmp_file, O_WRONLY|O_APPEND);
  if (fd<0) return;
  fcntl (fd, F_SETFD, FD_CLOEXEC);
  write(fd, ut, sizeof(struct utmp));
  close(fd);
}

void logwtmp(const char *line, const char *name, const char *host) {
  struct utmp ut;

  memset(&ut, 0, sizeof(struct utmp));

  ut.ut_pid = getpid ();
  ut.ut_type = name[0] ? USER_PROCESS : DEAD_PROCESS;

  memccpy (ut.ut_line, line, 0, sizeof ut.ut_line);
  memccpy (ut.ut_name, name, 0, sizeof ut.ut_name);
  memccpy (ut.ut_host, host, 0, sizeof ut.ut_host);

  gettimeofday (&ut.ut_tv, NULL);

  updwtmp (_PATH_WTMP, &ut);
}