int csa_donewpw(void *source, int cargc, char **cargv) {
reguser *rup;
nick *sender=source;
+ int i, cntweak = 0, cntdigits = 0 , cntletters = 0;
if (cargc<3) {
chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "newpass");
return CMD_ERROR;
}
+ for ( i = 0; cargv[1][i] && i < PASSLEN; i++ ) {
+ if ( cargv[1][i] == cargv[1][i+1] || cargv[1][i] + 1 == cargv[1][i+1] || cargv[1][i] - 1 == cargv[1][i+1] )
+ cntweak++;
+ if(isdigit(cargv[1][i]))
+ cntdigits++;
+ if(islower(cargv[1][i]) || isupper(cargv[1][i]))
+ cntletters++;
+ }
+
+ if( cntweak > 3 || !cntdigits || !cntletters) {
+ chanservstdmessage(sender, QM_PWTOWEAK); /* new password is weak */
+ cs_log(sender,"NEWPASS FAIL username %s password to weak %s",rup->username,cargv[1]);
+ return CMD_ERROR;
+ }
+
setpassword(rup, cargv[1]);
rup->lastauth=time(NULL);
chanservstdmessage(sender, QM_PWCHANGED);