version 1.9, 2004/07/03 05:11:33 |
version 1.10, 2004/07/17 05:31:41 |
|
|
#include <utmp.h> |
#include <utmp.h> |
#include "sshlogin.h" |
#include "sshlogin.h" |
#include "log.h" |
#include "log.h" |
|
#include "buffer.h" |
|
#include "servconf.h" |
|
|
|
extern Buffer loginmsg; |
|
extern ServerOptions options; |
|
|
/* |
/* |
* Returns the time when the user last logged in. Returns 0 if the |
* Returns the time when the user last logged in. Returns 0 if the |
* information is not available. This must be called before record_login. |
* information is not available. This must be called before record_login. |
|
|
} |
} |
|
|
/* |
/* |
|
* Generate and store last login message. This must be done before |
|
* login_login() is called and lastlog is updated. |
|
*/ |
|
void |
|
store_lastlog_message(const char *user, uid_t uid) |
|
{ |
|
char *time_string, hostname[MAXHOSTNAMELEN] = "", buf[512]; |
|
time_t last_login_time; |
|
|
|
if (!options.print_lastlog) |
|
return; |
|
|
|
last_login_time = get_last_login_time(uid, user, hostname, |
|
sizeof(hostname)); |
|
|
|
if (last_login_time != 0) { |
|
time_string = ctime(&last_login_time); |
|
if (strchr(time_string, '\n')) |
|
*strchr(time_string, '\n') = '\0'; |
|
if (strcmp(hostname, "") == 0) |
|
snprintf(buf, sizeof(buf), "Last login: %s\r\n", |
|
time_string); |
|
else |
|
snprintf(buf, sizeof(buf), "Last login: %s from %s\r\n", |
|
time_string, hostname); |
|
buffer_append(&loginmsg, buf, strlen(buf)); |
|
} |
|
} |
|
|
|
/* |
* Records that the user has logged in. I wish these parts of operating |
* Records that the user has logged in. I wish these parts of operating |
* systems were more standardized. |
* systems were more standardized. |
*/ |
*/ |
|
|
struct lastlog ll; |
struct lastlog ll; |
char *lastlog; |
char *lastlog; |
struct utmp u; |
struct utmp u; |
|
|
|
/* save previous login details before writing new */ |
|
store_lastlog_message(user, uid); |
|
|
/* Construct an utmp/wtmp entry. */ |
/* Construct an utmp/wtmp entry. */ |
memset(&u, 0, sizeof(u)); |
memset(&u, 0, sizeof(u)); |