]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/authcmds/newpass.c
merge
[irc/quakenet/newserv.git] / chanserv / authcmds / newpass.c
1 /* Automatically generated by refactor.pl.
2 *
3 *
4 * CMDNAME: newpass
5 * CMDLEVEL: QCMD_AUTHED
6 * CMDARGS: 3
7 * CMDDESC: Change your password.
8 * CMDFUNC: csa_donewpw
9 * CMDPROTO: int csa_donewpw(void *source, int cargc, char **cargv);
10 */
11
12 #include "../chanserv.h"
13 #include "../authlib.h"
14 #include "../../lib/irc_string.h"
15 #include <stdio.h>
16 #include <string.h>
17
18 int csa_donewpw(void *source, int cargc, char **cargv) {
19 reguser *rup;
20 nick *sender=source;
21 int i, cntweak = 0, cntdigits = 0 , cntletters = 0;
22
23 if (cargc<3) {
24 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "newpass");
25 return CMD_ERROR;
26 }
27
28 if (!(rup=getreguserfromnick(sender)))
29 return CMD_ERROR;
30
31 if (!checkmasterpassword(rup, cargv[0])) {
32 chanservstdmessage(sender, QM_AUTHFAIL);
33 cs_log(sender,"NEWPASS FAIL username %s bad masterpassword %s",rup->username,cargv[0]);
34 return CMD_ERROR;
35 }
36
37 if (strcmp(cargv[1],cargv[2])) {
38 chanservstdmessage(sender, QM_PWDONTMATCH); /* Sorry, passwords do not match */
39 cs_log(sender,"NEWPASS FAIL username %s new passwords don't match (%s vs %s)",rup->username,cargv[1],cargv[2]);
40 return CMD_ERROR;
41 }
42
43 if (strlen(cargv[1]) < 6) {
44 chanservstdmessage(sender, QM_PWTOSHORT); /* new password to short */
45 cs_log(sender,"NEWPASS FAIL username %s password to short %s (%d characters)",rup->username,cargv[1],strlen(cargv[1]));
46 return CMD_ERROR;
47 }
48
49 for ( i = 0; cargv[1][i] && i < PASSLEN; i++ ) {
50 if ( cargv[1][i] == cargv[1][i+1] || cargv[1][i] + 1 == cargv[1][i+1] || cargv[1][i] - 1 == cargv[1][i+1] )
51 cntweak++;
52 if(isdigit(cargv[1][i]))
53 cntdigits++;
54 if(islower(cargv[1][i]) || isupper(cargv[1][i]))
55 cntletters++;
56 }
57
58 if( cntweak > 3 || !cntdigits || !cntletters) {
59 chanservstdmessage(sender, QM_PWTOWEAK); /* new password is weak */
60 cs_log(sender,"NEWPASS FAIL username %s password to weak %s",rup->username,cargv[1]);
61 return CMD_ERROR;
62 }
63
64 setpassword(rup, cargv[1]);
65 rup->lastauth=time(NULL);
66 chanservstdmessage(sender, QM_PWCHANGED);
67 cs_log(sender,"NEWPASS OK username %s", rup->username);
68 csdb_updateuser(rup);
69 csdb_createmail(rup, QMAIL_NEWPW);
70
71 return CMD_OK;
72 }