]>
jfr.im git - irc/quakenet/newserv.git/blob - chanserv/authcmds/email.c
1 /* Automatically generated by refactor.pl.
4 * CMDLEVEL: QCMD_SECURE | QCMD_AUTHED
6 * CMDDESC: Change your email address.
8 * CMDPROTO: int csa_doemail(void *source, int cargc, char **cargv);
9 * CMDHELP: Usage: EMAIL <password> <email> <email>
10 * CMDHELP: Changes your register email address. Confirmation of the change will be sent
11 * CMDHELP: both old and new addresses. Where:
12 * CMDHELP: password - your password
13 * CMDHELP: email - new email address. Must be entered exactly the same way twice to avoid
15 * CMDHELP: Note: due to the sensitive nature of this command, you must send the message
16 * CMDHELP: to Q@CServe.quakenet.org when using it.
19 #include "../chanserv.h"
20 #include "../authlib.h"
21 #include "../../lib/irc_string.h"
25 int csa_doemail(void *source
, int cargc
, char **cargv
) {
28 maildomain
*mdp
, *smdp
;
34 chanservstdmessage(sender
, QM_NOTENOUGHPARAMS
, "email");
38 if (!(rup
=getreguserfromnick(sender
)))
41 if (!checkpassword(rup
, cargv
[0])) {
42 chanservstdmessage(sender
, QM_AUTHFAIL
);
43 cs_log(sender
,"EMAIL FAIL username %s bad password %s",rup
->username
,cargv
[0]);
47 if (strcmp(cargv
[1],cargv
[2])) {
48 chanservstdmessage(sender
, QM_EMAILDONTMATCH
);
49 cs_log(sender
,"EMAIL FAIL username %s email don't match (%s vs %s)",rup
->username
,cargv
[1],cargv
[2]);
53 if(rup
->email
&& !strcasecmp(cargv
[1], rup
->email
->content
)) {
54 chanservstdmessage(sender
, QM_EMAILMATCHESOLD
);
58 if (csa_checkeboy(sender
, cargv
[1]))
61 dupemail
= strdup(cargv
[1]);
62 local
=strchr(dupemail
, '@');
67 mdp
=findnearestmaildomain(local
);
69 for(smdp
=mdp
; smdp
; smdp
=smdp
->parent
) {
70 if(MDIsBanned(smdp
)) {
72 chanservstdmessage(sender
, QM_DOMAINBANNED
);
75 if((smdp
->count
>= smdp
->limit
) && (smdp
->limit
> 0)) {
77 chanservstdmessage(sender
, QM_DOMAINLIMIT
);
83 mdp
=findmaildomainbydomain(local
);
85 for (ruh
=mdp
->users
; ruh
; ruh
=ruh
->nextbydomain
) {
87 if (!strcasecmp(dupemail
, ruh
->localpart
->content
)) {
92 if((found
>= mdp
->actlimit
) && (mdp
->actlimit
> 0)) {
94 chanservstdmessage(sender
, QM_ADDRESSLIMIT
);
99 mdp
=findorcreatemaildomain(cargv
[1]);
101 csdb_createmail(rup
, QMAIL_NEWEMAIL
);
102 csdb_accounthistory_insert(sender
, NULL
, NULL
, rup
->email
, getsstring(cargv
[1], EMAILLEN
));
103 delreguserfrommaildomain(rup
,rup
->domain
);
104 freesstring(rup
->email
);
105 rup
->email
=getsstring(cargv
[1],EMAILLEN
);
106 rup
->lastemailchange
=time(NULL
);
107 rup
->domain
=findorcreatemaildomain(rup
->email
->content
);
108 addregusertomaildomain(rup
, rup
->domain
);
111 rup
->localpart
=getsstring(dupemail
,EMAILLEN
);
117 chanservstdmessage(sender
, QM_EMAILCHANGED
, cargv
[1]);
118 cs_log(sender
,"EMAIL OK username %s",rup
->username
);
119 csdb_updateuser(rup
);