]> jfr.im git - irc/quakenet/newserv.git/blame - chanserv/authcmds/email.c
Add authgate warnings.
[irc/quakenet/newserv.git] / chanserv / authcmds / email.c
CommitLineData
1dd6d55d 1/* Automatically generated by refactor.pl.
1dd6d55d 2 *
3 * CMDNAME: email
bace4964 4 * CMDLEVEL: QCMD_SECURE | QCMD_AUTHED
1dd6d55d 5 * CMDARGS: 3
6 * CMDDESC: Change your email address.
7 * CMDFUNC: csa_doemail
8 * CMDPROTO: int csa_doemail(void *source, int cargc, char **cargv);
50cd26d6 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
14 * CMDHELP: mistakes.
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.
1dd6d55d 17 */
18
19#include "../chanserv.h"
20#include "../authlib.h"
21#include "../../lib/irc_string.h"
22#include <stdio.h>
23#include <string.h>
24
25int csa_doemail(void *source, int cargc, char **cargv) {
96e1f81d 26 reguser *rup, *ruh;
1dd6d55d 27 nick *sender=source;
e3805f60
P
28 maildomain *mdp, *smdp;
29 char *local;
bbc9e3a6 30 char *dupemail;
96e1f81d 31 int found = 0;
30a66d6c 32 time_t t = time(NULL);
97390b65 33 maillock *mlp;
1dd6d55d 34
35 if (cargc<3) {
36 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "email");
37 return CMD_ERROR;
38 }
39
40 if (!(rup=getreguserfromnick(sender)))
41 return CMD_ERROR;
42
2271ea8c 43 if (!checkpassword(rup, cargv[0])) {
1dd6d55d 44 chanservstdmessage(sender, QM_AUTHFAIL);
2271ea8c 45 cs_log(sender,"EMAIL FAIL username %s bad password %s",rup->username,cargv[0]);
1dd6d55d 46 return CMD_ERROR;
47 }
48
49 if (strcmp(cargv[1],cargv[2])) {
50 chanservstdmessage(sender, QM_EMAILDONTMATCH);
51 cs_log(sender,"EMAIL FAIL username %s email don't match (%s vs %s)",rup->username,cargv[1],cargv[2]);
52 return CMD_ERROR;
53 }
54
59687380 55 if(!UHasHelperPriv(rup) && (rup->lockuntil && rup->lockuntil > t)) {
30a66d6c
CP
56 char buf[100];
57 strftime(buf, 15, "%d/%m/%y %H:%M", gmtime(&(rup->lockuntil)));
58 chanservstdmessage(sender, QM_ACCOUNTLOCKED, buf);
59 return CMD_ERROR;
60 }
61
e2792f61
CP
62 if(rup->email && !strcasecmp(cargv[1], rup->email->content)) {
63 chanservstdmessage(sender, QM_EMAILMATCHESOLD);
64 return CMD_ERROR;
65 }
66
1dd6d55d 67 if (csa_checkeboy(sender, cargv[1]))
68 return CMD_ERROR;
69
97390b65
CP
70 for(mlp=maillocks;mlp;mlp=mlp->next) {
71 if(!match(mlp->pattern->content, cargv[1])) {
72 chanservstdmessage(sender, QM_MAILLOCKED);
73 return CMD_ERROR;
74 }
75 }
76
96e1f81d
CP
77 dupemail = strdup(cargv[1]);
78 local=strchr(dupemail, '@');
79 if(!local)
80 return CMD_ERROR;
81 *(local++)='\0';
82
83 mdp=findnearestmaildomain(local);
84 if(mdp) {
85 for(smdp=mdp; smdp; smdp=smdp->parent) {
86 if(MDIsBanned(smdp)) {
87 free(dupemail);
88 chanservstdmessage(sender, QM_DOMAINBANNED);
89 return CMD_ERROR;
90 }
91 if((smdp->count >= smdp->limit) && (smdp->limit > 0)) {
92 free(dupemail);
93 chanservstdmessage(sender, QM_DOMAINLIMIT);
94 return CMD_ERROR;
95 }
96 }
97 }
98
99 mdp=findmaildomainbydomain(local);
100 if(mdp) {
101 for (ruh=mdp->users; ruh; ruh=ruh->nextbydomain) {
102 if (ruh->localpart)
103 if (!strcasecmp(dupemail, ruh->localpart->content)) {
104 found++;
105 }
106 }
107
108 if((found >= mdp->actlimit) && (mdp->actlimit > 0)) {
109 free(dupemail);
110 chanservstdmessage(sender, QM_ADDRESSLIMIT);
e3805f60
P
111 return CMD_ERROR;
112 }
113 }
1dd6d55d 114
96e1f81d
CP
115 mdp=findorcreatemaildomain(cargv[1]);
116
1dd6d55d 117 csdb_createmail(rup, QMAIL_NEWEMAIL);
183b8e2f 118 csdb_accounthistory_insert(sender, NULL, NULL, rup->email, getsstring(cargv[1], EMAILLEN));
e3805f60 119 delreguserfrommaildomain(rup,rup->domain);
30a66d6c
CP
120
121 if(rup->lastemail)
122 freesstring(rup->lastemail);
123 rup->lastemail=rup->email;
1dd6d55d 124 rup->email=getsstring(cargv[1],EMAILLEN);
30a66d6c 125 rup->lastemailchange=t;
e3805f60 126 rup->domain=findorcreatemaildomain(rup->email->content);
59687380
CP
127 if(!UHasHelperPriv(rup))
128 rup->lockuntil=t+7*24*3600;
e3805f60 129 addregusertomaildomain(rup, rup->domain);
96e1f81d
CP
130
131 if(local) {
132 rup->localpart=getsstring(dupemail,EMAILLEN);
e3805f60
P
133 } else {
134 rup->localpart=NULL;
135 }
c7970ab7
P
136 free(dupemail);
137
1dd6d55d 138 chanservstdmessage(sender, QM_EMAILCHANGED, cargv[1]);
139 cs_log(sender,"EMAIL OK username %s",rup->username);
e9f49ea9
CP
140
141#ifdef AUTHGATE_WARNINGS
142 if(UHasHelperPriv(rup))
143 chanservsendmessage(sender, "You MUST go to https://auth.quakenet.org and login successfully to update the cache.");
144#endif
145
1dd6d55d 146 csdb_updateuser(rup);
147
148 return CMD_OK;
149}