]> jfr.im git - irc/quakenet/newserv.git/blame - chanserv/authcmds/newpass.c
*sigh*
[irc/quakenet/newserv.git] / chanserv / authcmds / newpass.c
CommitLineData
1dd6d55d 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
18int csa_donewpw(void *source, int cargc, char **cargv) {
19 reguser *rup;
20 nick *sender=source;
cb7fb82d 21 int i, cntweak = 0, cntdigits = 0 , cntletters = 0;
1dd6d55d 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
cb7fb82d
P
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
1dd6d55d 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}