+int csa_dosetemail(void *source, int cargc, char **cargv) {
+ char *email;
+ char *error;
+ reguser *rup;
+ nick *sender=(nick *)source;
+
+ if(cargc<3) {
+ controlreply(sender, "SETEMAIL FALSE args");
+ return CMD_ERROR;
+ }
+
+ rup = findreguserbyID(atoi(cargv[0]));
+ if(rup == NULL) {
+ controlreply(sender, "SETEMAIL FALSE useridnotexist");
+ return CMD_ERROR;
+ }
+
+ if(UHasStaffPriv(rup)) {
+ controlreply(sender, "SETEMAIL FALSE privuser");
+ return CMD_ERROR;
+ }
+
+ if(UHasSuspension(rup)) {
+ controlreply(sender, "SETEMAIL FALSE suspended");
+ return CMD_ERROR;
+ }
+
+ if(rup->lastpasschange > atoi(cargv[1])) {
+ controlreply(sender, "SETEMAIL FALSE passwordchanged");
+ return CMD_ERROR;
+ }
+
+ email = cargv[2];
+ error = email_to_error(email);
+ if(error) {
+ controlreply(sender, "SETEMAIL FALSE %s", error);
+ return CMD_ERROR;
+ }
+
+ freesstring(rup->email);
+ rup->email=getsstring(email,EMAILLEN);
+ cs_log(sender,"SETEMAIL OK username %s email %s",rup->username, rup->email->content);
+
+ csdb_updateuser(rup);
+ sendemail(rup);
+
+ controlreply(sender, "SETEMAIL TRUE");
+
+ return CMD_OK;
+}
+