]>
jfr.im git - irc/quakenet/newserv.git/blob - chanserv/authcmds/newpass.c
69e78f2d7cf7c58b1970a124d96b4feb87f5d590
1 /* Automatically generated by refactor.pl.
5 * CMDALIASES: newpassword
6 * CMDLEVEL: QCMD_SECURE | QCMD_AUTHED
8 * CMDDESC: Change your password.
10 * CMDPROTO: int csa_donewpw(void *source, int cargc, char **cargv);
11 * CMDHELP: Usage: @UCOMMAND@ <oldpassword> <newpassword> <newpassword>
12 * CMDHELP: Changes your account password. Your new password must be at least 6 characters
13 * CMDHELP: long, contain at least one number and one letter, and may not contain sequences
14 * CMDHELP: of letters or numbers. Your new password will be sent to your registered email
15 * CMDHELP: address. Where:
16 * CMDHELP: oldpassword - your existing account password
17 * CMDHELP: newpassword - your desired new password. Must be entered the same both times.
18 * CMDHELP: Note: due to the sensitive nature of this command, you must send the message to
19 * CMDHELP: Q@CServe.quakenet.org when using it.
22 #include "../chanserv.h"
23 #include "../authlib.h"
24 #include "../../lib/irc_string.h"
25 #include "../../core/hooks.h"
30 int csa_donewpw ( void * source
, int cargc
, char ** cargv
) {
33 int i
, cntweak
= 0 , cntdigits
= 0 , cntletters
= 0 ;
38 chanservstdmessage ( sender
, QM_NOTENOUGHPARAMS
, "newpass" );
42 if (!( rup
= getreguserfromnick ( sender
)))
45 if (! checkpassword ( rup
, cargv
[ 0 ])) {
46 chanservstdmessage ( sender
, QM_AUTHFAIL
);
47 cs_log ( sender
, "NEWPASS FAIL username %s bad password %s " , rup
-> username
, cargv
[ 0 ]);
51 if ( strcmp ( cargv
[ 1 ], cargv
[ 2 ])) {
52 chanservstdmessage ( sender
, QM_PWDONTMATCH
); /* Sorry, passwords do not match */
53 cs_log ( sender
, "NEWPASS FAIL username %s new passwords don't match ( %s vs %s )" , rup
-> username
, cargv
[ 1 ], cargv
[ 2 ]);
57 if ( strlen ( cargv
[ 1 ]) < 6 ) {
58 chanservstdmessage ( sender
, QM_PWTOSHORT
); /* new password to short */
59 cs_log ( sender
, "NEWPASS FAIL username %s password to short %s ( %z u characters)" , rup
-> username
, cargv
[ 1 ], strlen ( cargv
[ 1 ]));
63 if (! strcmp ( cargv
[ 0 ], cargv
[ 1 ])) {
64 /* If they are the same then continue anyway but don't send the hook later. */
68 for ( i
= 0 ; cargv
[ 1 ][ i
] && i
< PASSLEN
; i
++ ) {
69 if ( cargv
[ 1 ][ i
] == cargv
[ 1 ][ i
+ 1 ] || cargv
[ 1 ][ i
] + 1 == cargv
[ 1 ][ i
+ 1 ] || cargv
[ 1 ][ i
] - 1 == cargv
[ 1 ][ i
+ 1 ] )
71 if ( isdigit ( cargv
[ 1 ][ i
]))
73 if ( islower ( cargv
[ 1 ][ i
]) || isupper ( cargv
[ 1 ][ i
]))
77 if ( cntweak
> 3 || ! cntdigits
|| ! cntletters
) {
78 chanservstdmessage ( sender
, QM_PWTOWEAK
); /* new password is weak */
79 cs_log ( sender
, "NEWPASS FAIL username %s password to weak %s " , rup
-> username
, cargv
[ 1 ]);
84 if (! UHasStaffPriv ( rup
)) {
85 if ( rup
-> lockuntil
&& rup
-> lockuntil
> t
) {
86 chanservstdmessage ( sender
, QM_ACCOUNTLOCKED
, rup
-> lockuntil
);
89 rup
-> lockuntil
= t
+ 7 * 24 * 3600 ;
95 freesstring ( rup
-> lastemail
);
99 rup
-> lastpasschange
= t
;
100 csdb_accounthistory_insert ( sender
, rup
-> password
, cargv
[ 1 ], NULL
, NULL
);
101 setpassword ( rup
, cargv
[ 1 ]);
103 rup
-> lastauth
= time ( NULL
);
104 chanservstdmessage ( sender
, QM_PWCHANGED
);
105 cs_log ( sender
, "NEWPASS OK username %s " , rup
-> username
);
107 #ifdef AUTHGATE_WARNINGS
108 if ( UHasOperPriv ( rup
))
109 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." );
112 csdb_updateuser ( rup
);
113 csdb_createmail ( rup
, QMAIL_NEWPW
);
116 triggerhook ( HOOK_CHANSERV_PWCHANGE
, sender
);