*
* 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 <username> <email address> <reason for modification>
+ * CMDHELP: Sets the email address for the specified username.
*/
#include "../chanserv.h"
#include <string.h>
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;
}
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);
- char *dupemail = strdup(rup->email->content);
- if(local=strchr(strdup(dupemail), '@')) {
+ dupemail = strdup(rup->email->content);
+ if((local=strchr(dupemail, '@'))) {
*(local++)='\0';
- rup->localpart=getsstring(local,EMAILLEN);
+ rup->localpart=getsstring(dupemail,EMAILLEN);
} else {
rup->localpart=NULL;
}
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;