X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/96e1f81dee14838406497f39ecbaf7eff860d424..28aa186de14dc4fa7488866e70beb6ae933dde79:/chanserv/authcmds/setemail.c diff --git a/chanserv/authcmds/setemail.c b/chanserv/authcmds/setemail.c index 8dbf0d45..35dde83a 100644 --- a/chanserv/authcmds/setemail.c +++ b/chanserv/authcmds/setemail.c @@ -3,10 +3,12 @@ * * CMDNAME: setemail * CMDLEVEL: QCMD_OPER - * CMDARGS: 2 + * CMDARGS: 3 * CMDDESC: Set the email address. * CMDFUNC: csa_dosetmail * CMDPROTO: int csa_dosetmail(void *source, int cargc, char **cargv); + * CMDHELP: Usage: setemail + * CMDHELP: Sets the email address for the specified username. */ #include "../chanserv.h" @@ -16,12 +18,13 @@ #include int csa_dosetmail(void *source, int cargc, char **cargv) { - reguser *rup; nick *sender=source; + reguser *rup, *vrup = getreguserfromnick(sender); char *dupemail; char *local; + char *reason; - if (cargc<2) { + if (cargc<3) { chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "setemail"); return CMD_ERROR; } @@ -29,14 +32,35 @@ int csa_dosetmail(void *source, int cargc, char **cargv) { if (!(rup=findreguser(sender, cargv[0]))) return CMD_ERROR; + if(rup->email && !strcasecmp(cargv[1], rup->email->content)) { + chanservstdmessage(sender, QM_EMAILMATCHESOLD); + return CMD_ERROR; + } + if (csa_checkeboy(sender, cargv[1])) return CMD_ERROR; - csdb_accounthistory_insert(sender, NULL, NULL, rup->email, getsstring(cargv[1], EMAILLEN)); + reason = cargv[2]; + if(!checkreason(sender, reason)) + return CMD_ERROR; + + if(UHasStaffPriv(rup)) { + cs_log(sender,"SETEMAIL FAILED username %s (reason: %s)",rup->username, reason); + chanservwallmessage("%s (%s) just FAILED using SETEMAIL on %s: %s (reason: %s)", sender->nick, vrup->username, rup->username, cargv[1], reason); + chanservsendmessage(sender, "Sorry, that user is privileged."); + return CMD_ERROR; + } + + csdb_accounthistory_insert(sender, NULL, NULL, rup->email?rup->email->content:NULL, cargv[1]); delreguserfrommaildomain(rup,rup->domain); freesstring(rup->email); rup->email=getsstring(cargv[1],EMAILLEN); rup->lastemailchange=time(NULL); + if(rup->lastemail) { + freesstring(rup->lastemail); + rup->lastemail=NULL; + } + rup->lockuntil=0; rup->domain=findorcreatemaildomain(rup->email->content); addregusertomaildomain(rup, rup->domain); dupemail = strdup(rup->email->content); @@ -49,7 +73,9 @@ int csa_dosetmail(void *source, int cargc, char **cargv) { free(dupemail); chanservstdmessage(sender, QM_EMAILCHANGED, cargv[1]); - cs_log(sender,"SETEMAIL OK username %s <%s>",rup->username,rup->email->content); + cs_log(sender,"SETEMAIL OK username %s <%s> (reason: %s)",rup->username,rup->email->content, reason); + chanservwallmessage("%s (%s) just used SETEMAIL on %s: %s (reason: %s)", sender->nick, vrup->username, rup->username, rup->email->content, reason); + csdb_updateuser(rup); return CMD_OK;