]> jfr.im git - irc/quakenet/newserv.git/blame - chanserv/authcmds/setemail.c
CHANSERV: require reasons for getpassword, setemail, setpassword, unsuspendchan,...
[irc/quakenet/newserv.git] / chanserv / authcmds / setemail.c
CommitLineData
1dd6d55d 1/* Automatically generated by refactor.pl.
2 *
3 *
4 * CMDNAME: setemail
5 * CMDLEVEL: QCMD_OPER
dae08100 6 * CMDARGS: 3
1dd6d55d 7 * CMDDESC: Set the email address.
8 * CMDFUNC: csa_dosetmail
9 * CMDPROTO: int csa_dosetmail(void *source, int cargc, char **cargv);
dae08100 10 * CMDHELP: Usage: setemail <username> <email address> <reason for modification>
85174237 11 * CMDHELP: Sets the email address for the specified username.
1dd6d55d 12 */
13
14#include "../chanserv.h"
15#include "../authlib.h"
16#include "../../lib/irc_string.h"
17#include <stdio.h>
18#include <string.h>
19
20int csa_dosetmail(void *source, int cargc, char **cargv) {
1dd6d55d 21 nick *sender=source;
30dd0aec 22 reguser *rup, *vrup = getreguserfromnick(sender);
bbc9e3a6 23 char *dupemail;
80d2de64 24 char *local;
dae08100 25 char *reason;
1dd6d55d 26
dae08100 27 if (cargc<3) {
1dd6d55d 28 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "setemail");
29 return CMD_ERROR;
30 }
31
32 if (!(rup=findreguser(sender, cargv[0])))
33 return CMD_ERROR;
34
e2792f61
CP
35 if(rup->email && !strcasecmp(cargv[1], rup->email->content)) {
36 chanservstdmessage(sender, QM_EMAILMATCHESOLD);
37 return CMD_ERROR;
38 }
39
1dd6d55d 40 if (csa_checkeboy(sender, cargv[1]))
41 return CMD_ERROR;
42
dae08100
CP
43 reason = cargv[2];
44 if(!checkreason(sender, reason))
45 return CMD_ERROR;
46
372e4f1d 47 if(UHasStaffPriv(rup)) {
dae08100
CP
48 cs_log(sender,"SETEMAIL FAILED username %s (reason: %s)",rup->username, reason);
49 chanservwallmessage("%s (%s) just FAILED using SETEMAIL on %s: %s (reason: %s)", sender->nick, vrup->username, rup->username, cargv[1], reason);
30dd0aec
CP
50 chanservsendmessage(sender, "Sorry, that user is privileged.");
51 return CMD_ERROR;
52 }
53
0f32b411 54 csdb_accounthistory_insert(sender, NULL, NULL, rup->email?rup->email->content:NULL, cargv[1]);
e3805f60 55 delreguserfrommaildomain(rup,rup->domain);
1dd6d55d 56 freesstring(rup->email);
57 rup->email=getsstring(cargv[1],EMAILLEN);
58 rup->lastemailchange=time(NULL);
30a66d6c
CP
59 if(rup->lastemail) {
60 freesstring(rup->lastemail);
61 rup->lastemail=NULL;
62 }
63 rup->lockuntil=0;
e3805f60
P
64 rup->domain=findorcreatemaildomain(rup->email->content);
65 addregusertomaildomain(rup, rup->domain);
bbc9e3a6 66 dupemail = strdup(rup->email->content);
80d2de64 67 if((local=strchr(dupemail, '@'))) {
e3805f60 68 *(local++)='\0';
96e1f81d 69 rup->localpart=getsstring(dupemail,EMAILLEN);
e3805f60
P
70 } else {
71 rup->localpart=NULL;
72 }
c7970ab7 73 free(dupemail);
e3805f60 74
1dd6d55d 75 chanservstdmessage(sender, QM_EMAILCHANGED, cargv[1]);
dae08100
CP
76 cs_log(sender,"SETEMAIL OK username %s <%s> (reason: %s)",rup->username,rup->email->content, reason);
77 chanservwallmessage("%s (%s) just used SETEMAIL on %s: %s (reason: %s)", sender->nick, vrup->username, rup->username, rup->email->content, reason);
30dd0aec 78
1dd6d55d 79 csdb_updateuser(rup);
80
81 return CMD_OK;
82}