]> jfr.im git - irc/quakenet/newserv.git/blobdiff - chanserv/authcmds/newpass.c
Merge.
[irc/quakenet/newserv.git] / chanserv / authcmds / newpass.c
index 7c7dd48b28bacab67d784c03e4b7d32a01d254d0..01dc569a392c7d57bd116eb5c37404027a215caa 100644 (file)
@@ -7,6 +7,15 @@
  * CMDDESC: Change your password.
  * CMDFUNC: csa_donewpw
  * CMDPROTO: int csa_donewpw(void *source, int cargc, char **cargv);
+ * CMDHELP: Usage: NEWPASS <oldpassword> <newpassword> <newpassword>
+ * CMDHELP: Changes your account password.  Your new password must be at least 6 characters
+ * CMDHELP: long, contain at least one number and one letter, and may not contain sequences
+ * CMDHELP: of letters or numbers.  Your new password will be sent to your registered email
+ * CMDHELP: address.  Where:
+ * CMDHELP: oldpassword - your existing account password
+ * CMDHELP: newpassword - your desired new password.  Must be entered the same both times.
+ * CMDHELP: Note: due to the sensitive nature of this command, you must send the message to
+ * CMDHELP: Q@CServe.quakenet.org when using it.
  */
 
 #include "../chanserv.h"
@@ -20,6 +29,7 @@ int csa_donewpw(void *source, int cargc, char **cargv) {
   reguser *rup;
   nick *sender=source;
   int i, cntweak = 0, cntdigits = 0, cntletters = 0;
+  time_t t;
 
   if (cargc<3) {
     chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "newpass");
@@ -43,7 +53,7 @@ int csa_donewpw(void *source, int cargc, char **cargv) {
 
   if (strlen(cargv[1]) < 6) {
     chanservstdmessage(sender, QM_PWTOSHORT); /* new password to short */
-    cs_log(sender,"NEWPASS FAIL username %s password to short %s (%d characters)",rup->username,cargv[1],strlen(cargv[1]));
+    cs_log(sender,"NEWPASS FAIL username %s password to short %s (%zu characters)",rup->username,cargv[1],strlen(cargv[1]));
     return CMD_ERROR;
   }
 
@@ -62,10 +72,34 @@ int csa_donewpw(void *source, int cargc, char **cargv) {
     return CMD_ERROR;
   }
 
+  if(!UHasHelperPriv(rup)) {
+    t=time(NULL);
+    if(rup->lockuntil && rup->lockuntil > t) {
+      chanservstdmessage(sender, QM_ACCOUNTLOCKED, rup->lockuntil);
+      return CMD_ERROR;
+    }
+    rup->lockuntil=t+7*24*3600;
+  } else {
+    rup->lockuntil=0;
+  }
+
+  if(rup->lastemail) {
+    freesstring(rup->lastemail);
+    rup->lastemail=NULL;
+  }
+
+  csdb_accounthistory_insert(sender, rup->password, cargv[1], NULL, NULL);
   setpassword(rup, cargv[1]);
+
   rup->lastauth=time(NULL);
   chanservstdmessage(sender, QM_PWCHANGED);
   cs_log(sender,"NEWPASS OK username %s", rup->username);
+
+#ifdef AUTHGATE_WARNINGS
+  if(UHasOperPriv(rup))
+    chanservsendmessage(sender, "WARNING FOR PRIVILEGED USERS: you MUST go to https://auth.quakenet.org and login successfully to update the cache, if you do not your old password will still be usable in certain circumstances.");
+#endif
+
   csdb_updateuser(rup);
   csdb_createmail(rup, QMAIL_NEWPW);