#include "unrealircd.h" #define MSG_CAP "CAP" long CAP_POISON = 0L; ModuleHeader MOD_HEADER = { "third/cap-poison", /* Name of module */ "5.0", /* Version */ "Reject clients requesting invalid caps", /* Short description of module */ "k4be@PIRC", "unrealircd-5", }; CMD_OVERRIDE_FUNC(cmd_cap); MOD_INIT(){ ClientCapabilityInfo cap; ClientCapability *c; memset(&cap, 0, sizeof(cap)); cap.name = "pirc.pl/killme"; c = ClientCapabilityAdd(modinfo->handle, &cap, &CAP_POISON); return MOD_SUCCESS; } MOD_LOAD(){ if(!CommandOverrideAddEx(modinfo->handle, MSG_CAP, 0, cmd_cap)){ config_error("[%s] Critical: Failed to request command override for CAP: %s", MOD_HEADER.name, ModuleGetErrorStr(modinfo->handle)); } return MOD_SUCCESS; } MOD_UNLOAD(){ return MOD_SUCCESS; } CMD_OVERRIDE_FUNC(cmd_cap){ CallCommandOverride(ovr, client, recv_mtags, parc, parv); // the original command if (HasCapabilityFast(client, CAP_POISON)) { sendnotice(client, "Your client has requested an invalid capability. Values unknown to the client should be ALL ignored! Please see the spec at https://ircv3.net/specs/extensions/capability-negotiation.html"); sendnotice(client, "Twój klient zażądał niepoprawnego parametru CAP. Wszystkie nieznane funkcje powinny być ignorowane! Pełna specyfikacja jest dostępna pod adresem https://ircv3.net/specs/extensions/capability-negotiation.html"); exit_client(client, NULL, "Requested invalid capability"); } }