/** * Provide the user interface to add/remove a qdb ban from a nickname * @param u The user who executed this command * @return MOD_CONT if we want to process other commands in this command * stack, MOD_STOP if we dont **/ int myAddQDBBan(User * u) { char *text; char *nick; char *command; char *setting; int stop = 0; NickCore *nc; NickAlias *na; text = moduleGetLastBuffer(); if (text) { nick = myStrGetToken(text, ' ', 0); if (nick) { command = myStrGetToken(text, ' ', 1); if (command) { if (stricmp(command, "QDBBAN") == 0) { setting = myStrGetToken(text, ' ', 2); if (setting) { if (!(na = findnick(nick))) { notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick); } else { nc = na->nc; if (stricmp(setting, "ON") == 0) { moduleAddData(&nc->moduleData, "qdbban", "on"); moduleNoticeLang(s_NickServ, u, QDBBAN_ADD_SUCCESS, nc->display); alog("ns_qdbban: %s!%s@%s banned %s from using the QDB", u->nick, u->username, u->host, nc->display); } else if (stricmp(setting, "OFF") == 0) { moduleDelData(&nc->moduleData, "qdbban"); moduleNoticeLang(s_NickServ, u, QDBBAN_DEL_SUCCESS, nc->display); alog("ns_qdbban: %s!%s@%s unbanned %s from using the QDB", u->nick, u->username, u->host, nc->display); } else { moduleNoticeLang(s_NickServ, u, QDBBAN_HELP); } } free(setting); } else { moduleNoticeLang(s_NickServ, u, QDBBAN_HELP); } stop = 1; } free(command); } free(nick); } } if (stop == 0) { return MOD_CONT; } else { return MOD_STOP; } }
int do_resendcode(User * u) { char *buffer = NULL; char *nick = NULL; NickAlias *na = NULL; buffer = moduleGetLastBuffer(); if (buffer) nick = myStrGetToken(buffer, ' ', 0); if (!nick) { moduleNoticeLang(s_NickServ, u, RESENDCODE_SYNTAX); } else if (!anope_valid_nick(nick)) { notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick); } else if (!(na = findnick(nick))) { notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick); } else if (nick_identified(na->u)) { notice_lang(s_NickServ, u, NICK_ALREADY_IDENTIFIED); } else if (!(moduleGetData(&na->nc->moduleData, MODULEDATAKEY))) { moduleNoticeLang(s_NickServ, u, RESETPASS_NOT_REQUESTED, u->nick); } else { if (do_sendmail(u, na) != 0) { alog(LOG_COULDNT_SENDMAIL, MYNAME, na->nick); } else { moduleNoticeLang(s_NickServ, u, RESETPASS_SUCCESS, na->nick); moduleNoticeLang(s_NickServ, u, RESETPASS_INSTRUC); } } return MOD_CONT; }
static int my_cs_help_appendtopic(User * u) { moduleNoticeLang(s_ChanServ, u, LNG_APPENDTOPIC_SYNTAX); notice(s_ChanServ, u->nick, " "); moduleNoticeLang(s_ChanServ, u, LNG_CHAN_HELP_APPENDTOPIC); return MOD_STOP; }
int myChanServAvoiceHelp(User *u) { moduleNoticeLang(s_ChanServ, u, CS_AUTOVOICE_SYNTAX); anope_cmd_notice(s_ChanServ, u->nick, " "); moduleNoticeLang(s_ChanServ, u, CS_AUTOVOICE_HELP_FULL); return MOD_CONT; }
static int hs_help_request(User * u) { moduleNoticeLang(s_HostServ, u, LNG_REQUEST_SYNTAX); notice(s_HostServ, u->nick, " "); moduleNoticeLang(s_HostServ, u, LNG_HELP_REQUEST); return MOD_CONT; }
static int hs_help_waiting(User * u) { if (is_host_setter(u)) { moduleNoticeLang(s_HostServ, u, LNG_WAITING_SYNTAX); notice(s_HostServ, u->nick, " "); moduleNoticeLang(s_HostServ, u, LNG_HELP_WAITING); } else { notice_lang(s_HostServ, u, NO_HELP_AVAILABLE, "WAITING"); } return MOD_CONT; }
static int my_cs_help_enforce(User * u) { moduleNoticeLang(s_ChanServ, u, LNG_ENFORCE_SYNTAX); notice(s_ChanServ, u->nick, " "); moduleNoticeLang(s_ChanServ, u, LNG_CHAN_HELP_ENFORCE); notice(s_ChanServ, u->nick, " "); if (cbmodes['R'].flag != 0) moduleNoticeLang(s_ChanServ, u, LNG_CHAN_HELP_ENFORCE_R_ENABLED); else moduleNoticeLang(s_ChanServ, u, LNG_CHAN_HELP_ENFORCE_R_DISABLED); return MOD_STOP; }
/** * The suspend command. * @param u The user who issued the command * @param ci The channel we will be suspending. * @param reason The reason given for suspending the channel. * @param MOD_CONT to continue processing other modules, MOD_STOP to stop processing. **/ int do_suspend(User * u, ChannelInfo *ci, char *reason) { Channel *c; if (!ci) { moduleNoticeLang(ci->bi->nick, u, LANG_SUSPEND_SYNTAX); return MOD_CONT; } if (ForceForbidReason && !reason) { moduleNoticeLang(ci->bi->nick, u, LANG_SUSPEND_NO_REASON); return MOD_CONT; } if (readonly) { notice_lang(ci->bi->nick, u, READ_ONLY_MODE); return MOD_CONT; } ci->flags |= CI_SUSPENDED; ci->forbidby = sstrdup(u->nick); if (reason) ci->forbidreason = sstrdup(reason); if ((c = findchan(ci->name))) { struct c_userlist *cu, *next; char *av[3]; for (cu = c->users; cu; cu = next) { next = cu->next; if (is_oper(cu->user)) continue; av[0] = c->name; av[1] = cu->user->nick; av[2] = reason ? reason : "CHAN_SUSPEND_REASON"; xanadu_cmd_kick(ci->bi->nick, av[0], av[1], av[2]); do_kick(ci->bi->nick, 3, av); } } if (WallForbid) xanadu_cmd_global(ci->bi->nick, "\2%s\2 used SUSPEND on channel \2%s\2", u->nick, ci->name); alog("%s: %s set SUSPEND for channel %s", ci->bi->nick, u->nick, ci->name); notice_lang(ci->bi->nick, u, CHAN_SUSPEND_SUCCEEDED, ci->name); send_event(EVENT_CHAN_SUSPENDED, 1, ci->name); return MOD_CONT; }
static int hs_help_reject(User * u) { if (is_host_setter(u)) { moduleNoticeLang(s_HostServ, u, LNG_REJECT_SYNTAX); notice(s_HostServ, u->nick, " "); moduleNoticeLang(s_HostServ, u, LNG_HELP_REJECT); if (HSRequestMemoUser) moduleNoticeLang(s_HostServ, u, LNG_HELP_REJECT_MEMO); } else { notice_lang(s_HostServ, u, NO_HELP_AVAILABLE, "REJECT"); } return MOD_CONT; }
static int hs_help_activate(User * u) { if (is_host_setter(u)) { moduleNoticeLang(s_HostServ, u, LNG_ACTIVATE_SYNTAX); notice(s_HostServ, u->nick, " "); moduleNoticeLang(s_HostServ, u, LNG_HELP_ACTIVATE); if (HSRequestMemoUser) moduleNoticeLang(s_HostServ, u, LNG_HELP_ACTIVATE_MEMO); } else { notice_lang(s_HostServ, u, NO_HELP_AVAILABLE, "ACTIVATE"); } return MOD_CONT; }
static int hs_do_reject(User * u) { char *cur_buffer; char *nick; char *reason; HostCore *tmp, *hc; boolean found = false; cur_buffer = moduleGetLastBuffer(); nick = myStrGetToken(cur_buffer, ' ', 0); reason = myStrGetTokenRemainder(cur_buffer, ' ', 1); if (!nick) { moduleNoticeLang(s_HostServ, u, LNG_REJECT_SYNTAX); if (reason) free(reason); return MOD_CONT; } tmp = findHostCore(hs_request_head, nick, &found); if (found) { if (!tmp) hc = hs_request_head; else hc = tmp->next; if (HSRequestMemoUser) { if (reason) my_memo_lang(u, hc->nick, 2, NULL, LNG_REJECT_MEMO_REASON, reason); else my_memo_lang(u, hc->nick, 2, NULL, LNG_REJECT_MEMO); } hs_request_head = deleteHostCore(hs_request_head, tmp); moduleNoticeLang(s_HostServ, u, LNG_REJECTED, nick); alog("Host Request for %s rejected by %s (%s)", nick, u->nick, reason ? reason : ""); } else { moduleNoticeLang(s_HostServ, u, LNG_NO_REQUEST, nick); } free(nick); if (reason) free(reason); return MOD_CONT; }
/** * Handle seen fantasy command. **/ int do_fantasy_seen(int argc, char **argv) { User *u; char *target = NULL; ChannelStats *cs; char *message = NULL; if (denora->debug) protocol_debug(NULL, argc, argv); if (argc >= 3 && stricmp(argv[0], "seen") == 0) { u = finduser(argv[1]); cs = find_cs(argv[2]); if (argc == 3) { if (cs->flags & CS_NOTICE) moduleNoticeLang(s_StatServ, u, SEEN_USAGE, ChanStatsTrigger); else moduleNoticeChanLang(s_StatServ, cs, SEEN_USAGE, ChanStatsTrigger); } else { target = myStrGetToken(argv[3], ' ', 0); message = do_seen(u, target); if (cs->flags & CS_NOTICE) notice(s_StatServ, u->nick, message); else denora_cmd_privmsg(s_StatServ, cs->name, message); } } return MOD_CONT; }
int check_email_limit_reached(char *email, User * u) { if ((NSEmailMax < 1) || !email || is_services_admin(u)) return MOD_CONT; if (count_email_in_use(email, u) < NSEmailMax) return MOD_CONT; if (NSEmailMax == 1) moduleNoticeLang(s_NickServ, u, LNG_NSEMAILMAX_REACHED_ONE); else moduleNoticeLang(s_NickServ, u, LNG_NSEMAILMAX_REACHED, NSEmailMax); return MOD_STOP; }
static int myFullHelp(User * u) { myFullHelpSyntax(u); notice(s_ChanServ, u->nick, ""); moduleNoticeLang(s_ChanServ, u, TBAN_HELP_DETAIL); return MOD_CONT; }
int cs_version(User * u, int ac, char **av) { if (Log_ConnectServ) { alog(LOG_NORMAL, "%s : %s used VERSION", s_ConnectServ, u->nick); } moduleNoticeLang(s_ConnectServ, u, CS_DISPLAY_VERSION, s_ConnectServ, VERSION); return MOD_CONT; }
int cs_about(User * u, int ac, char **av) { if (Log_ConnectServ) { alog(LOG_NORMAL, "%s : %s used ABOUT", s_ConnectServ, u->nick); } moduleNoticeLang(s_ConnectServ, u, CS_HELP_ABOUT); return MOD_CONT; }
static int hs_do_activate(User * u) { char *cur_buffer; char *nick; NickAlias *na; HostCore *tmp, *hc; boolean found = false; cur_buffer = moduleGetLastBuffer(); nick = myStrGetToken(cur_buffer, ' ', 0); if (!nick) { moduleNoticeLang(s_HostServ, u, LNG_ACTIVATE_SYNTAX); return MOD_CONT; } if ((na = findnick(nick))) { tmp = findHostCore(hs_request_head, nick, &found); if (found) { if (!tmp) hc = hs_request_head; else hc = tmp->next; addHostCore(hc->nick, hc->vIdent, hc->vHost, u->nick, time(NULL)); if (HSRequestMemoUser) my_memo_lang(u, hc->nick, 2, NULL, LNG_ACTIVATE_MEMO); hs_request_head = deleteHostCore(hs_request_head, tmp); moduleNoticeLang(s_HostServ, u, LNG_ACTIVATED, nick); alog("Host Request for %s activated by %s", nick, u->nick); } else { moduleNoticeLang(s_HostServ, u, LNG_NO_REQUEST, nick); } } else { notice_lang(s_HostServ, u, NICK_X_NOT_REGISTERED, nick); } free(nick); return MOD_CONT; }
int do_confirm(User * u) { char *buffer = NULL; char *nick = NULL; char *passcode = NULL; char *moduledata = NULL; NickAlias *na = NULL; buffer = moduleGetLastBuffer(); if (buffer) { nick = myStrGetToken(buffer, ' ', 0); passcode = myStrGetToken(buffer, ' ', 1); } if (!nick) { moduleNoticeLang(s_NickServ, u, ENTERCODE_SYNTAX); } else if (!anope_valid_nick(nick)) { notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick); } else if (!(na = findnick(nick))) { notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick); } else if (nick_identified(na->u)) { notice_lang(s_NickServ, u, NICK_ALREADY_IDENTIFIED); } else if (!passcode) { moduleNoticeLang(s_NickServ, u, ENTERCODE_SYNTAX); } else { if (!(moduledata = moduleGetData(&na->nc->moduleData, MODULEDATAKEY))) { moduleNoticeLang(s_NickServ, u, RESETPASS_NOT_REQUESTED, nick); } else if (strcmp(passcode, moduledata) != 0) { moduleNoticeLang(s_NickServ, u, ENTERCODE_WRONG_PASSCODE); free(moduledata); } else { ns_setpassword(u, na->nc); moduleDelData(&na->nc->moduleData, MODULEDATAKEY); free(moduledata); } } return MOD_CONT; }
/** * Handle msg fantasy command. **/ int do_msg_seen(User * u, int argc, char **argv) { char *target = NULL; char *message = NULL; if (denora->debug) protocol_debug(NULL, argc, argv); if (argc < 1 || BadChar(argv[0])) { moduleNoticeLang(s_StatServ, u, SEEN_USAGE, ""); } else { target = myStrGetToken(argv[0], ' ', 0); message = do_seen(u, target); notice(s_StatServ, u->nick, message); } return MOD_CONT; }
static int my_cs_enforce(User * u) { char *cur_buffer; char *chan=NULL; char *what=NULL; Channel *c; ChannelInfo *ci; cur_buffer = moduleGetLastBuffer(); chan = myStrGetToken(cur_buffer, ' ', 0); if (!chan) { moduleNoticeLang(s_ChanServ, u, LNG_ENFORCE_SYNTAX); } else if (!(c = findchan(chan))) { notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan); } else if (!(ci = c->ci)) { notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan); } else if (ci->flags & CI_VERBOTEN) { notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name); } else if (!is_services_admin(u) && !check_access(u, ci, CA_AKICK)) { notice_lang(s_ChanServ, u, PERMISSION_DENIED); } else { what = myStrGetToken(cur_buffer, ' ', 1); if (!what || (stricmp(what, "SET") == 0)) { do_enforce_set(c); moduleNoticeLang(s_ChanServ,u,LNG_CHAN_RESPONSE, what ? what : "SET"); } else if (stricmp(what, "MODES") == 0) { do_enforce_modes(c); moduleNoticeLang(s_ChanServ,u,LNG_CHAN_RESPONSE,what); } else if (stricmp(what, "SECUREOPS") == 0) { do_enforce_secureops(c); moduleNoticeLang(s_ChanServ,u,LNG_CHAN_RESPONSE,what); } else if (stricmp(what, "RESTRICTED") == 0) { do_enforce_restricted(c); moduleNoticeLang(s_ChanServ,u,LNG_CHAN_RESPONSE,what); } else if (stricmp(what, "+R") == 0) { do_enforce_cmode_R(c); moduleNoticeLang(s_ChanServ,u,LNG_CHAN_RESPONSE,what); } else { moduleNoticeLang(s_ChanServ, u, LNG_ENFORCE_SYNTAX); } } if(chan) free(chan); if(what) free(what); return MOD_CONT; }
static void mySendResponse(User * u, char *channel, char *mask, char *time) { moduleNoticeLang(s_ChanServ, u, TBAN_RESPONSE, mask, channel, time); }
static void myFullHelpSyntax(User * u) { moduleNoticeLang(s_ChanServ, u, TBAN_SYNTAX); }
static void myHelp(User * u) { moduleNoticeLang(s_ChanServ, u, TBAN_HELP); }
/* This help will be added to the main NickServ list */ void mMainNickHelp(User * u) { moduleNoticeLang(s_NickServ, u, RESETPASS_HELP_CMD); moduleNoticeLang(s_NickServ, u, ENTERCODE_HELP_CMD); moduleNoticeLang(s_NickServ, u, RESENDCODE_HELP_CMD); }
int ResendPassCodeHelp(User * u) { moduleNoticeLang(s_NickServ, u, RESENDCODE_HELP); return MOD_CONT; }
void myChanServHelp(User *u) { moduleNoticeLang(s_ChanServ, u, CS_AUTOVOICE_HELP); }
int ResetPassHelp(User * u) { moduleNoticeLang(s_NickServ, u, RESETPASS_HELP); return MOD_CONT; }
int do_resetpass(User * u) { char *buffer = NULL; char *nick = NULL; char *email = NULL; char passcode[PASSCODELEN]; char *callBackinfo[1]; NickAlias *na = NULL; if ((RestrictReset == 1) && !(is_oper(u))) { notice_lang(s_NickServ, u, ACCESS_DENIED); return MOD_CONT; } buffer = moduleGetLastBuffer(); nick = myStrGetToken(buffer, ' ', 0); email = myStrGetToken(buffer, ' ', 1); if (!nick) { moduleNoticeLang(s_NickServ, u, RESETPASS_SYNTAX); } else if (!anope_valid_nick(nick)) { notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick); } else if (!(na = findnick(nick))) { notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick); } else if (na->status & NS_VERBOTEN) { notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick); } else if (na->nc->flags & NI_SUSPENDED) { notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick); } else if (!na->nc->email) { notice_user(s_NickServ, u, "%s has no email associated with their account.", na->nick); } else if (moduleGetData(&na->nc->moduleData, MODULEDATAKEY)) { moduleNoticeLang(s_NickServ, u, RESETPASS_ALREADY_REQUESTED1, na->nick); moduleNoticeLang(s_NickServ, u, RESETPASS_ALREADY_REQUESTED2); } else if (!email && !is_oper(u) && !is_helpop(u)) { notice(s_NickServ, u->nick, "You need to provide the e-mail address associated with the account you are trying to reset the password on."); notice(s_NickServ, u->nick, "Syntax: /ns resetpass <nickname> <e-mail>"); } else if (!is_oper(u) && !is_helpop(u) && strcasecmp(email, na->nc->email)) { notice(s_NickServ, u->nick, "The e-mail address %s does not match the one associated with account %s.", email, na->nc->display); } else { generatePassCode(passcode); moduleAddData(&na->nc->moduleData, MODULEDATAKEY, passcode); if (do_sendmail(u, na) != 0) { alog(LOG_COULDNT_SENDMAIL, MYNAME, na->nick); moduleDelData(&na->nc->moduleData, MODULEDATAKEY); } else { callBackinfo[0] = na->nick; moduleAddCallback(MYNAME, time(NULL) + ExpirePassCode, expirePassCode, 1, callBackinfo); alog(LOG_RESETPASS_REQUESTED, MYNAME, u->nick, na->nick); moduleNoticeLang(s_NickServ, u, RESETPASS_SUCCESS, na->nick); moduleNoticeLang(s_NickServ, u, RESETPASS_INSTRUC); } } if (nick) free(nick); if (email) free(email); return MOD_CONT; }
int EntercodeResetHelp(User * u) { moduleNoticeLang(s_NickServ, u, ENTERCODE_HELP); return MOD_CONT; }
int do_avoice(User *u) { char *buf = moduleGetLastBuffer(); char *chan = myStrGetToken(buf, ' ', 0); char *option = myStrGetTokenRemainder(buf, ' ', 1); char *data; ChannelInfo *ci; if (!chan) { moduleNoticeLang(s_ChanServ, u, CS_AUTOVOICE_SYNTAX); return MOD_CONT; } if ((ci = cs_findchan(chan))) { if (!check_access(u, ci, CA_PROTECT)) { notice_lang(s_ChanServ, u, PERMISSION_DENIED); if (chan) free(chan); if (option) free(option); return MOD_CONT; } if (!option) { if ((data = moduleGetData(&ci->moduleData, "avoice"))) { if (stricmp(data, "REG") == 0) { moduleNoticeLang(s_ChanServ, u, CS_AUTOVOICE_STATUS_REG, chan); } else if (stricmp(data, "ALL") == 0) { moduleNoticeLang(s_ChanServ, u, CS_AUTOVOICE_STATUS_ALL, chan); } free(data); } else { moduleNoticeLang(s_ChanServ, u, CS_AUTOVOICE_STATUS_OFF, chan); } } else { if (stricmp(option, "REG") == 0) { moduleAddData(&ci->moduleData, "avoice", "REG"); moduleNoticeLang(s_ChanServ, u, CS_AUTOVOICE_SET_REG, chan); } else if (stricmp(option, "ALL") == 0) { moduleAddData(&ci->moduleData, "avoice", "ALL"); moduleNoticeLang(s_ChanServ, u, CS_AUTOVOICE_SET_ALL, chan); } else if (stricmp(option, "OFF") == 0) { moduleDelData(&ci->moduleData, "avoice"); moduleNoticeLang(s_ChanServ, u, CS_AUTOVOICE_SET_OFF, chan); } else if (stricmp(option, "STATUS") == 0) { if ((data = moduleGetData(&ci->moduleData, "avoice"))) { if (stricmp(data, "REG") == 0) { moduleNoticeLang(s_ChanServ, u, CS_AUTOVOICE_STATUS_REG, chan); } else if (stricmp(data, "ALL") == 0) { moduleNoticeLang(s_ChanServ, u, CS_AUTOVOICE_STATUS_ALL, chan); } free(data); } else { moduleNoticeLang(s_ChanServ, u, CS_AUTOVOICE_STATUS_OFF, chan); } } else { moduleNoticeLang(s_ChanServ, u, CS_AUTOVOICE_SYNTAX); } } } else { notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan); } if (chan) free(chan); if (option) free(option); return MOD_CONT; }