/* * ms_desynch - server message handler * * Writes to all +g users; for sending wall type debugging/anti-hack info. * Added 23 Apr 1998 --Run * * parv[0] - sender prefix * parv[parc-1] - message text */ int ms_desynch(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { if (parc >= 2) sendwallto_group_butone(sptr, WALL_DESYNCH, cptr, "%s", parv[parc - 1]); else need_more_params(sptr,"DESYNCH"); return 0; }
/* * mo_wallusers - oper message handler */ int mo_wallusers(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { char *message; message = parc > 1 ? parv[1] : 0; if (EmptyString(message)) return need_more_params(sptr, "WALLUSERS"); sendwallto_group_butone(sptr, WALL_WALLUSERS, 0, "%s", message); return 0; }
/* * ms_wallusers - server message handler */ int ms_wallusers(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { char *message; message = parc > 1 ? parv[1] : 0; /* * XXX - PROTOCOL ERROR (shouldn't happen) */ if (EmptyString(message)) return need_more_params(sptr, "WALLUSERS"); sendwallto_group_butone(sptr, WALL_WALLUSERS, cptr, "%s", message); return 0; }
/** Report a protocol violation warning to anyone listening. This can * be easily used to clean up the last couple of parts of the code. * @param[in] cptr Client that violated the protocol. * @param[in] pattern Description of how the protocol was violated. * @return Zero. */ int protocol_violation(struct Client* cptr, const char* pattern, ...) { struct VarData vd; assert(pattern); assert(cptr); vd.vd_format = pattern; va_start(vd.vd_args, pattern); sendwallto_group_butone(&me, WALL_DESYNCH, NULL, "Protocol Violation from %s: %v", cli_name(cptr), &vd); va_end(vd.vd_args); return 0; }
int ms_mode(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) { struct Channel *chptr = 0; struct ModeBuf mbuf; struct Membership *member; if (parc < 3) return need_more_params(sptr, "MODE"); if (IsLocalChannel(parv[1])) return 0; if (!(chptr = FindChannel(parv[1]))) { struct Client *acptr; acptr = FindUser(parv[1]); if (!acptr) { return 0; } else if (sptr != acptr) { sendwallto_group_butone(&me, WALL_WALLOPS, 0, "MODE for User %s from %s!%s", parv[1], cli_name(cptr), cli_name(sptr)); return 0; } return set_user_mode(cptr, sptr, parc, parv, ALLOWMODES_ANY); } ClrFlag(sptr, FLAG_TS8); if (IsServer(sptr)) { if (find_conf_byhost(cli_confs(cptr), cli_name(sptr), CONF_UWORLD)) modebuf_init(&mbuf, sptr, cptr, chptr, (MODEBUF_DEST_CHANNEL | /* Send mode to clients */ MODEBUF_DEST_SERVER | /* Send mode to servers */ MODEBUF_DEST_HACK4)); /* Send a HACK(4) message */ else if (!feature_bool(FEAT_OPLEVELS)) modebuf_init(&mbuf, sptr, cptr, chptr, (MODEBUF_DEST_CHANNEL | /* Send mode to clients */ MODEBUF_DEST_SERVER | /* Send mode to servers */ MODEBUF_DEST_HACK3)); /* Send a HACK(3) message */ else /* Servers need to be able to op people who join using the Apass * or upass, as well as people joining a zannel, therefore we do * not generate HACK3 when oplevels are on. */ modebuf_init(&mbuf, sptr, cptr, chptr, (MODEBUF_DEST_CHANNEL | /* Send mode to clients */ MODEBUF_DEST_SERVER)); /* Send mode to servers */ mode_parse(&mbuf, cptr, sptr, chptr, parc - 2, parv + 2, (MODE_PARSE_SET | /* Set the mode */ MODE_PARSE_STRICT | /* Interpret it strictly */ MODE_PARSE_FORCE), /* And force it to be accepted */ NULL); } else { if (!(member = find_member_link(chptr, sptr)) || !IsChanOp(member)) { modebuf_init(&mbuf, sptr, cptr, chptr, (MODEBUF_DEST_SERVER | /* Send mode to server */ MODEBUF_DEST_HACK2 | /* Send a HACK(2) message */ MODEBUF_DEST_DEOP | /* Deop the source */ MODEBUF_DEST_BOUNCE)); /* And bounce the MODE */ mode_parse(&mbuf, cptr, sptr, chptr, parc - 2, parv + 2, (MODE_PARSE_STRICT | /* Interpret it strictly */ MODE_PARSE_BOUNCE), /* And bounce the MODE */ member); } else { modebuf_init(&mbuf, sptr, cptr, chptr, (MODEBUF_DEST_CHANNEL | /* Send mode to clients */ MODEBUF_DEST_SERVER)); /* Send mode to servers */ mode_parse(&mbuf, cptr, sptr, chptr, parc - 2, parv + 2, (MODE_PARSE_SET | /* Set the mode */ MODE_PARSE_STRICT | /* Interpret it strictly */ MODE_PARSE_FORCE), /* And force it to be accepted */ member); } } return modebuf_flush(&mbuf); }