void utmpx_write_boottime(void) { time_t tstamp; struct stat stbuf; /* * The DOWN_TIME record tracks when the OS became unavailable * during the previous boot. We stat(2) WTMPX and check its * attributes to determine when (and how) the OS became * unavailable. If the file is empty, skip writing a DOWN_TIME * record. Otherwise, check the access and modify times and * use whichever is latest as the time that the OS became * unavailable. If st_atime is latest, the instance crashed or * the machine lost power. If st_mtime is latest, the shutdown * was controlled. */ if (stat(WTMPX_FILE, &stbuf) == 0 && stbuf.st_size != 0) { tstamp = (stbuf.st_atime >= stbuf.st_mtime) ? stbuf.st_atime : stbuf.st_mtime; utmpx_write_entry(DOWN_TIME, DOWN_MSG, tstamp); } /* * The boot time (or start time, for a non-global zone) is retrieved in * log_init(). */ tstamp = st->st_start_time.tv_sec; utmpx_write_entry(BOOT_TIME, BOOT_MSG, tstamp); }
/** ** login_write: Call low-level recording functions based on autoconf ** results **/ int login_write (struct logininfo *li) { #ifndef HAVE_CYGWIN if ((int)geteuid() != 0) { logit("Attempt to write login records by non-root user (aborting)"); return 1; } #endif /* set the timestamp */ login_set_current_time(li); #ifdef USE_LOGIN syslogin_write_entry(li); #endif #ifdef USE_LASTLOG if (li->type == LTYPE_LOGIN) { lastlog_write_entry(li); } #endif #ifdef USE_UTMP utmp_write_entry(li); #endif #ifdef USE_WTMP wtmp_write_entry(li); #endif #ifdef USE_UTMPX utmpx_write_entry(li); #endif #ifdef USE_WTMPX wtmpx_write_entry(li); #endif return 0; }
/** ** login_write: Call low-level recording functions based on autoconf ** results **/ int login_write (struct logininfo *li) { #if !defined(HAVE_CYGWIN) && !defined(DONT_WARN_ON_NONROOT) if ((int)geteuid() != 0) { dropbear_log(LOG_WARNING, "Attempt to write login records by non-root user (aborting)"); return 1; } #endif /* set the timestamp */ login_set_current_time(li); #ifdef USE_LOGIN syslogin_write_entry(li); #endif #ifdef USE_LASTLOG if (li->type == LTYPE_LOGIN) { lastlog_write_entry(li); } #endif #ifdef USE_UTMP utmp_write_entry(li); #endif #ifdef USE_WTMP wtmp_write_entry(li); #endif #ifdef USE_UTMPX utmpx_write_entry(li); #endif #ifdef USE_WTMPX wtmpx_write_entry(li); #endif return 0; }
/** ** login_write: Call low-level recording functions based on autoconf ** results **/ int login_write (struct logininfo *li) { #ifndef HAVE_CYGWIN if ((int)geteuid() != 0) { return 1; } #endif /* set the timestamp */ login_set_current_time(li); #ifdef USE_LOGIN syslogin_write_entry(li); #endif #ifdef USE_LASTLOG if (li->type == LTYPE_LOGIN) { lastlog_write_entry(li); } #endif #ifdef USE_UTMP utmp_write_entry(li); #endif #ifdef USE_WTMP wtmp_write_entry(li); #endif #ifdef USE_UTMPX utmpx_write_entry(li); #endif #ifdef USE_WTMPX wtmpx_write_entry(li); #endif return 0; }
/** ** login_write: Call low-level recording functions based on autoconf ** results **/ int login_write(struct logininfo *li) { #if !defined(HAVE_CYGWIN) && !defined(_UWIN) if (geteuid() != 0) { logit("Attempt to write login records by non-root user (aborting)"); return (1); } #endif /* set the timestamp */ login_set_current_time(li); #ifdef USE_LOGIN syslogin_write_entry(li); #endif #ifdef USE_LASTLOG if (li->type == LTYPE_LOGIN) lastlog_write_entry(li); #endif #ifdef USE_UTMP utmp_write_entry(li); #endif #ifdef USE_WTMP wtmp_write_entry(li); #endif #ifdef USE_UTMPX utmpx_write_entry(li); #endif #ifdef USE_WTMPX wtmpx_write_entry(li); #endif #ifdef CUSTOM_SYS_AUTH_RECORD_LOGIN if (li->type == LTYPE_LOGIN && !sys_auth_record_login(li->username,li->hostname,li->line, &loginmsg)) logit("Writing login record failed for %s", li->username); #endif #ifdef SSH_AUDIT_EVENTS if (li->type == LTYPE_LOGIN) audit_session_open(li->line); else if (li->type == LTYPE_LOGOUT) audit_session_close(li->line); #endif return (0); }
int login_utmp_only(struct logininfo *li) { li->type = LTYPE_LOGIN; login_set_current_time(li); # ifdef USE_UTMP utmp_write_entry(li); # endif # ifdef USE_WTMP wtmp_write_entry(li); # endif # ifdef USE_UTMPX utmpx_write_entry(li); # endif # ifdef USE_WTMPX wtmpx_write_entry(li); # endif return 0; }