/* Do not remove the headers from this file! see /USAGE for more info. */
/*
** loginfail.c -- record/manage login/su failure information
**
** 10-Jun-95. Deathblade. Created.
*/
#include <log.h>
varargs mixed unguarded(mixed priv, function code);
string query_userid();
void save_me();
private mixed * failures = ({ });
private int notify_time; /* time user notified of bad logins */
protected nomask void register_failure(string addr)
{
string s;
if(!arrayp(failures))
failures = ({});
failures += ({ ({ time(), addr }) });
save_me();
s = sprintf("%s: %s from %s\n", query_userid(), ctime(time()), addr);
LOG_D->log(LOG_LOGIN_FAILURE, s);
}
nomask mixed * query_failures()
{
return copy(failures);
}
nomask void clear_failures()
{
#ifdef NEED_UNRESTRICTED_PLAYER_CMD
if ( !check_privilege(query_userid()) )
#endif
if ( this_user() != this_object() )
{
error("* Security violation: you cannot clear this info\n");
}
failures = ({ });
save_me();
}
protected nomask void report_login_failures()
{
int count;
if ( !sizeof(failures) )
return;
count = sizeof(filter_array(failures, (: $1[0] > $(notify_time) :)));
if ( !count )
return;
//### hmm... this count is total, not since last login
printf("You had " +
M_GRAMMAR->number_of(count, "failed login attempt") +
" since your last login.\n");
notify_time = time();
save_me();
}