int csa_docheckhashpass(void *source, int cargc, char **cargv) { nick *sender=(nick *)source; reguser *rup; char *flags; if(cargc<3) { controlreply(sender, "CHECKHASHPASS FAIL args"); return CMD_ERROR; } if (!(rup=findreguserbynick(cargv[0]))) { controlreply(sender, "CHECKHASHPASS FAIL user"); return CMD_OK; } flags = printflags(QUFLAG_ALL & rup->flags, ruflags); if(UHasSuspension(rup)) { controlreply(sender, "CHECKHASHPASS FAIL suspended %s %s %u", rup->username, flags, rup->ID); } else if(UIsInactive(rup)) { controlreply(sender, "CHECKHASHPASS FAIL inactive %s %s %u", rup->username, flags, rup->ID); } else if(!checkhashpass(rup, cargc<3?NULL:cargv[2], cargv[1])) { controlreply(sender, "CHECKHASHPASS FAIL digest %s %s %u", rup->username, flags, rup->ID); } else { controlreply(sender, "CHECKHASHPASS OK %s %s %u %s", rup->username, flags, rup->ID, rup->email?rup->email->content:"-"); } return CMD_OK; }
void *qsuspendreason_exe(searchCtx *ctx, struct searchNode *thenode, void *theinput) { authname *ap = (authname *)theinput; reguser *rup = ap->exts[chanservaext]; if(!rup || !UHasSuspension(rup) || !rup->suspendreason) return ""; return rup->suspendreason->content; }
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]; if(!strcmp(email, rup->email->content)) { /* setting to the same thing? fine! */ controlreply(sender, "SETEMAIL TRUE"); return CMD_OK; } 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; }
int csu_dosuspenduserlist(void *source, int cargc, char **cargv) { nick *sender=source; reguser *rup=getreguserfromnick(sender); reguser *dbrup, *trup; int i, seewhom; unsigned int count=0; char buf[TIMELEN], buf2[TIMELEN], *bywhom; time_t now=time(NULL); if (!rup) return CMD_ERROR; if (cargc < 1) { chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "suspenduserlist"); return CMD_ERROR; } seewhom = cs_privcheck(QPRIV_VIEWSUSPENDEDBY, sender); if(!seewhom) bywhom = "(hidden)"; /* @TIMELEN */ chanservstdmessage(sender, QM_SUSPENDUSERLISTHEADER); for (i=0;i<REGUSERHASHSIZE;i++) { for (dbrup=regusernicktable[i]; dbrup; dbrup=dbrup->nextbyname) { if (!UHasSuspension(dbrup)) continue; if (!match(cargv[0], dbrup->username)) { char suspendtype[100]; if (UIsDelayedGline(dbrup)) strcpy(suspendtype, "delayed gline"); else if (UIsGline(dbrup)) strcpy(suspendtype, "instant gline"); else if (UIsSuspended(dbrup)) strcpy(suspendtype, "suspended"); else strcpy(suspendtype, "not used"); if(seewhom) { trup=findreguserbyID(dbrup->suspendby); if (trup) bywhom=trup->username; else bywhom="(unknown)"; } if (dbrup->suspendexp) q9strftime(buf,sizeof(buf),dbrup->suspendexp); q9strftime(buf2,sizeof(buf2),dbrup->suspendtime); count++; /* @TIMELEN */ chanservsendmessage(sender, "%-15s %-13s %-15s %-19s %-19s %s", dbrup->username, suspendtype, bywhom, buf2, (dbrup->suspendexp)?((now >= dbrup->suspendexp)?"next auth":buf):"never", dbrup->suspendreason?dbrup->suspendreason->content:"(none)"); if (count >= 2000) { chanservstdmessage(sender, QM_TOOMANYRESULTS, 2000, "users"); return CMD_ERROR; } } } } chanservstdmessage(sender, QM_RESULTCOUNT, count, "user", (count==1)?"":"s"); return CMD_OK; }