]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/authcmds/email.c
Merged.
[irc/quakenet/newserv.git] / chanserv / authcmds / email.c
1 /* Automatically generated by refactor.pl.
2 *
3 *
4 * CMDNAME: email
5 * CMDLEVEL: QCMD_AUTHED
6 * CMDARGS: 3
7 * CMDDESC: Change your email address.
8 * CMDFUNC: csa_doemail
9 * CMDPROTO: int csa_doemail(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_doemail(void *source, int cargc, char **cargv) {
19 reguser *rup;
20 nick *sender=source;
21 maildomain *mdp, *smdp;
22 char *local;
23 char *dupemail;
24
25 if (cargc<3) {
26 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "email");
27 return CMD_ERROR;
28 }
29
30 if (!(rup=getreguserfromnick(sender)))
31 return CMD_ERROR;
32
33 if (!checkmasterpassword(rup, cargv[0])) {
34 chanservstdmessage(sender, QM_AUTHFAIL);
35 cs_log(sender,"EMAIL FAIL username %s bad masterpass %s",rup->username,cargv[0]);
36 return CMD_ERROR;
37 }
38
39 if (strcmp(cargv[1],cargv[2])) {
40 chanservstdmessage(sender, QM_EMAILDONTMATCH);
41 cs_log(sender,"EMAIL FAIL username %s email don't match (%s vs %s)",rup->username,cargv[1],cargv[2]);
42 return CMD_ERROR;
43 }
44
45 if (csa_checkeboy(sender, cargv[1]))
46 return CMD_ERROR;
47
48 mdp=findorcreatemaildomain(cargv[1]);
49 for(smdp=mdp; smdp; smdp=smdp->parent) {
50 if((smdp->count >= smdp->limit) && (smdp->limit > 0)) {
51 chanservstdmessage(sender, QM_DOMAINLIMIT);
52 return CMD_ERROR;
53 }
54 }
55
56 csdb_createmail(rup, QMAIL_NEWEMAIL);
57 csdb_accounthistory_insert(sender, NULL, NULL, rup->email, getsstring(cargv[1], EMAILLEN));
58 delreguserfrommaildomain(rup,rup->domain);
59 freesstring(rup->email);
60 rup->email=getsstring(cargv[1],EMAILLEN);
61 rup->lastemailchange=time(NULL);
62 rup->domain=findorcreatemaildomain(rup->email->content);
63 addregusertomaildomain(rup, rup->domain);
64 dupemail = strdup(rup->email->content);
65 if((local=strchr(dupemail, '@'))) {
66 *(local++)='\0';
67 rup->localpart=getsstring(local,EMAILLEN);
68 } else {
69 rup->localpart=NULL;
70 }
71 free(dupemail);
72
73 chanservstdmessage(sender, QM_EMAILCHANGED, cargv[1]);
74 cs_log(sender,"EMAIL OK username %s",rup->username);
75 csdb_updateuser(rup);
76
77 return CMD_OK;
78 }