]> jfr.im git - irc/quakenet/newserv.git/commitdiff
Add last password change field.
authorChris Porter <redacted>
Mon, 10 Nov 2008 20:33:54 +0000 (20:33 +0000)
committerChris Porter <redacted>
Mon, 10 Nov 2008 20:33:54 +0000 (20:33 +0000)
chanserv/authcmds/hello.c
chanserv/authcmds/newpass.c
chanserv/authcmds/reset.c
chanserv/chanserv.h
chanserv/chanserv_messages.h
chanserv/chanservdb_updates.c
chanserv/chanservuser.c
chanserv/database/chanservdb.c
chanserv/usercmds/whois.c

index 80f7961605a482bd8d9b90b517b83cc5ca6334a1..a433b616e7685067be6bee045e328c119e0e4dec 100644 (file)
@@ -32,6 +32,7 @@ int csa_dohello(void *source, int cargc, char **cargv) {
   char *dupemail;
   activeuser *aup;
   maillock *mlp;
+  time_t t;
 
   if (getreguserfromnick(sender))
     return CMD_ERROR;
@@ -115,13 +116,15 @@ int csa_dohello(void *source, int cargc, char **cargv) {
 
   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;
index 01dc569a392c7d57bd116eb5c37404027a215caa..be212815c37ff249aea2e0eb9c29168633ae7ac6 100644 (file)
@@ -72,8 +72,8 @@ int csa_donewpw(void *source, int cargc, char **cargv) {
     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;
@@ -88,6 +88,7 @@ int csa_donewpw(void *source, int cargc, char **cargv) {
     rup->lastemail=NULL;
   }
 
+  rup->lastpasschange=t;
   csdb_accounthistory_insert(sender, rup->password, cargv[1], NULL, NULL);
   setpassword(rup, cargv[1]);
 
index 18e748d471f46e069f2adbf0a81dfe9cb78f9326..677e901ea2cf22bc40ecb9526e4069cc107d09eb 100644 (file)
 #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;
@@ -33,7 +35,8 @@ int csa_doreset(void *source, int cargc, char **cargv) {
   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;
   }
@@ -54,10 +57,11 @@ int csa_doreset(void *source, int cargc, char **cargv) {
   } 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);
index 8f291682e05eb3ab90cd6407d817786664fa8459..0ca8f992e139a8a5ff13cc2ff6cda677d6e15304 100644 (file)
@@ -549,6 +549,8 @@ typedef struct reguser {
   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;
index fd33f1f94f6e3e9d7a9d01606034178cc7a3ddf2..0ae9fea853f31f967d1c006855e639efaaca84f2 100644 (file)
@@ -3,7 +3,7 @@
 
 #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
@@ -216,6 +216,7 @@ BeginMessages() {
   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
index 43de9571e6dc460004aaaa0f5389bb8cc2c07bff..952cd335c0b84ed8eb6fa0f8a9f5309d67dcb264 100644 (file)
@@ -216,9 +216,11 @@ void csdb_updateuser(reguser *rup) {
 
   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);
 }  
 
@@ -267,11 +269,12 @@ void csdb_createuser(reguser *rup) {
 
   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);
 }  
 
 
index f848962c967dd43d8202c04d39ad7fe4593b1e88..3b8fba7e50f6fb5590ddf01608bbdeeec58b31dd 100644 (file)
@@ -586,6 +586,7 @@ void cs_checknick(nick *np) {
       rup->created=time(NULL);
       rup->lastauth=0;
       rup->lastemailchange=0;
+      rup->lastpasschange=0;
       rup->flags=QUFLAG_NOTICE;
       rup->languageid=0;
       rup->suspendby=0;
index 9aebdbc4cd49d52e509959d521118704b7e0e65f..97bae2e5132b1931586cd3b3ece29f14ab99f401 100644 (file)
@@ -88,6 +88,7 @@ static void setuptables() {
                "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)");
@@ -302,7 +303,7 @@ void loadsomeusers(DBConn *dbconn, void *arg) {
     return;
   }
 
-  if (dbnumfields(pgres)!=18) {
+  if (dbnumfields(pgres)!=19) {
     Error("chanserv",ERR_ERROR,"User DB format error");
     return;
   }
@@ -343,6 +344,7 @@ void loadsomeusers(DBConn *dbconn, void *arg) {
     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;
index 280f91823cc5813627f9c21534e045df9a431f80..bcd34ce9423f019afdabd7ec2253897eb51622b6 100644 (file)
@@ -173,6 +173,7 @@ int csu_dowhois(void *source, int cargc, char **cargv) {
   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) {