char *dupemail;
activeuser *aup;
maillock *mlp;
+ time_t t;
if (getreguserfromnick(sender))
return CMD_ERROR;
aup->helloattempts++;
+ t=time(NULL);
rup=getreguser();
rup->status=0;
rup->ID=++lastuserID;
strncpy(rup->username,sender->nick,NICKLEN); rup->username[NICKLEN]='\0';
- rup->created=time(NULL);
+ rup->created=t;
rup->lastauth=0;
- rup->lastemailchange=time(NULL);
+ rup->lastemailchange=t;
+ rup->lastpasschange=t;
rup->flags=QUFLAG_NOTICE;
rup->languageid=0;
rup->suspendby=0;
return CMD_ERROR;
}
+ t=time(NULL);
if(!UHasHelperPriv(rup)) {
- t=time(NULL);
if(rup->lockuntil && rup->lockuntil > t) {
chanservstdmessage(sender, QM_ACCOUNTLOCKED, rup->lockuntil);
return CMD_ERROR;
rup->lastemail=NULL;
}
+ rup->lastpasschange=t;
csdb_accounthistory_insert(sender, rup->password, cargv[1], NULL, NULL);
setpassword(rup, cargv[1]);
#include "../../lib/irc_string.h"
#include <stdio.h>
#include <string.h>
+#include <time.h>
int csa_doreset(void *source, int cargc, char **cargv) {
reguser *rup;
nick *sender=source;
char newpassword[PASSLEN+1];
-
+ time_t t;
+
if (cargc<2) {
chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "reset");
return CMD_ERROR;
if (!(rup=findreguser(sender, cargv[0])))
return CMD_ERROR;
- if(UHasHelperPriv(rup) || (!rup->lockuntil || rup->lockuntil <= time(NULL))) {
+ t=time(NULL);
+ if(UHasHelperPriv(rup) || (!rup->lockuntil || rup->lockuntil <= t)) {
chanservstdmessage(sender, QM_ACCOUNTNOTLOCKED);
return CMD_ERROR;
}
} else {
csdb_accounthistory_insert(sender, rup->password, newpassword, NULL, NULL);
}
-
setpassword(rup, newpassword);
rup->lockuntil=0;
+ rup->lastpasschange=t;
+
cs_log(sender,"RESET OK username %s", rup->username);
csdb_updateuser(rup);
csdb_createmail(rup, QMAIL_RESET);
int stealcount; /* How many times we've had to free the nick up */
nick *fakeuser; /* If we had to "take" the nick, here's the pointer */
+ time_t lastpasschange;
+
struct reguser *nextbydomain;
struct reguser *nextbyname;
struct reguser *nextbyID;
#define Q9_FORMAT_TIME "%d/%m/%y %H:%M"
-#define MAXMESSAGES 200
+#define MAXMESSAGES 250
#ifdef COMPILING_MESSAGES
#define msg(token, message, args) message, args
msg(QM_CHANLEV_SUSPENDSINCE, "Suspended since: $0", "T"),
msg(QM_CHANLEV_SUSPENDBY, "Suspended by: $0", "s"),
msg(QM_TRUNCATED, "Warning: list truncated to $0 items.", "d"),
+ msg(QM_WHOIS_PASSSET, "Pass last set : $0", "T"),
}
EndMessages()
#endif
dbquery("UPDATE chanserv.users SET lastauth=%lu, lastemailchng=%lu, flags=%u,"
"language=%u, suspendby=%u, suspendexp=%lu, suspendtime=%lu, lockuntil=%lu, password='%s', email='%s',"
- "lastuserhost='%s', suspendreason='%s', comment='%s', info='%s', lastemail='%s' WHERE ID=%u",
+ "lastuserhost='%s', suspendreason='%s', comment='%s', info='%s', lastemail='%s', lastpasschng=%lu "
+ " WHERE ID=%u",
rup->lastauth, rup->lastemailchange, rup->flags, rup->languageid, rup->suspendby, rup->suspendexp,
rup->suspendtime, rup->lockuntil, escpassword, escemail, esclastuserhost, escreason, esccomment, escinfo, esclastemail,
+ rup->lastpasschange,
rup->ID);
}
dbquery("INSERT INTO chanserv.users (ID, username, created, lastauth, lastemailchng, "
"flags, language, suspendby, suspendexp, suspendtime, lockuntil, password, email, lastuserhost, "
- "suspendreason, comment, info, lastemail) VALUES (%u,'%s',%lu,%lu,%lu,%u,%u,%u,%lu,%lu,%lu,'%s','%s',"
- "'%s','%s','%s','%s','%s')",
+ "suspendreason, comment, info, lastemail, lastpasschng)"
+ "VALUES (%u,'%s',%lu,%lu,%lu,%u,%u,%u,%lu,%lu,%lu,'%s','%s','%s','%s','%s','%s','%s',%lu)",
rup->ID, escusername, rup->created, rup->lastauth, rup->lastemailchange, rup->flags,
rup->languageid, rup->suspendby, rup->suspendexp, rup->suspendtime, rup->lockuntil,
- escpassword, escemail, esclastuserhost, escreason, esccomment, escinfo, esclastemail);
+ escpassword, escemail, esclastuserhost, escreason, esccomment, escinfo, esclastemail,
+ rup->lastpasschange);
}
rup->created=time(NULL);
rup->lastauth=0;
rup->lastemailchange=0;
+ rup->lastpasschange=0;
rup->flags=QUFLAG_NOTICE;
rup->languageid=0;
rup->suspendby=0;
"suspendreason VARCHAR(250),"
"comment VARCHAR(250),"
"info VARCHAR(100),"
+ "lastpasschng INT NOT NULL,"
"PRIMARY KEY (ID))");
dbcreatequery("CREATE INDEX user_username_index ON chanserv.users (username)");
return;
}
- if (dbnumfields(pgres)!=18) {
+ if (dbnumfields(pgres)!=19) {
Error("chanserv",ERR_ERROR,"User DB format error");
return;
}
rup->suspendreason=getsstring(dbgetvalue(pgres,15),250);
rup->comment=getsstring(dbgetvalue(pgres,16),250);
rup->info=getsstring(dbgetvalue(pgres,17),100);
+ rup->lastpasschange=strtoul(dbgetvalue(pgres,18),NULL,10);
rup->knownon=NULL;
rup->checkshd=NULL;
rup->stealcount=0;
if (target->email && (rup==target || cs_privcheck(QPRIV_VIEWEMAIL, sender))) {
chanservstdmessage(sender, QM_WHOIS_EMAIL, target->email->content);
chanservstdmessage(sender, QM_WHOIS_EMAILSET, target->lastemailchange);
+ chanservstdmessage(sender, QM_WHOIS_PASSSET, target->lastpasschange);
}
if (target->info && *target->info->content) {