X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/5366977b4f3c7a50d170bf7a1e29b14c74944db7..b2c208be091670e3c5259eba77187bae6ac6eece:/modules/core/m_kill.c diff --git a/modules/core/m_kill.c b/modules/core/m_kill.c index c116b90f..99bbf5e7 100644 --- a/modules/core/m_kill.c +++ b/modules/core/m_kill.c @@ -21,7 +21,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: m_kill.c 3161 2007-01-25 07:23:01Z nenolod $ + * $Id: m_kill.c 3408 2007-04-14 20:58:56Z jilles $ */ #include "stdinc.h" @@ -29,18 +29,18 @@ #include "hash.h" /* for find_client() */ #include "ircd.h" #include "numeric.h" -#include "sprintf_irc.h" -#include "s_log.h" +#include "logger.h" #include "s_serv.h" #include "s_conf.h" #include "send.h" #include "whowas.h" -#include "irc_string.h" +#include "match.h" #include "msg.h" #include "parse.h" #include "modules.h" #include "s_newconf.h" +static int h_can_kill; static char buf[BUFSIZE]; static int ms_kill(struct Client *, struct Client *, int, const char **); @@ -55,11 +55,15 @@ struct Message kill_msgtab = { mapi_clist_av1 kill_clist[] = { &kill_msgtab, NULL }; -DECLARE_MODULE_AV1(kill, NULL, NULL, kill_clist, NULL, NULL, "$Revision: 3161 $"); +mapi_hlist_av1 kill_hlist[] = { + { "can_kill", &h_can_kill }, + { NULL, NULL}, +}; + +DECLARE_MODULE_AV1(kill, NULL, NULL, kill_clist, kill_hlist, NULL, "$Revision: 3408 $"); /* ** mo_kill -** parv[0] = sender prefix ** parv[1] = kill victim ** parv[2] = kill path */ @@ -70,6 +74,7 @@ mo_kill(struct Client *client_p, struct Client *source_p, int parc, const char * const char *inpath = client_p->name; const char *user; const char *reason; + hook_data_client_approval moduledata; user = parv[1]; @@ -117,6 +122,16 @@ mo_kill(struct Client *client_p, struct Client *source_p, int parc, const char * return 0; } + /* Last chance to stop the kill */ + moduledata.client = source_p; + moduledata.target = target_p; + moduledata.approved = 1; + call_hook(h_can_kill, &moduledata); + + if (moduledata.approved == 0) + /* The callee should have sent a message. */ + return 0; + if(MyConnect(target_p)) sendto_one(target_p, ":%s!%s@%s KILL %s :%s", source_p->name, source_p->username, source_p->host, @@ -125,13 +140,13 @@ mo_kill(struct Client *client_p, struct Client *source_p, int parc, const char * /* Do not change the format of this message. There's no point in changing messages * that have been around for ever, for no reason.. */ sendto_realops_snomask(SNO_GENERAL, L_ALL, - "Received KILL message for %s[%s@%s]. From %s Path: %s (%s)", - target_p->name, target_p->username, target_p->host, - parv[0], me.name, reason); + "Received KILL message for %s!%s@%s. From %s Path: %s (%s)", + target_p->name, target_p->username, target_p->orighost, + source_p->name, me.name, reason); ilog(L_KILL, "%c %s %s!%s@%s %s %s", MyConnect(target_p) ? 'L' : 'G', get_oper_name(source_p), - target_p->name, target_p->username, target_p->host, target_p->user->server, reason); + target_p->name, target_p->username, target_p->host, target_p->servptr->name, reason); /* ** And pass on the message to other servers. Note, that if KILL @@ -150,7 +165,7 @@ mo_kill(struct Client *client_p, struct Client *source_p, int parc, const char * target_p->flags |= FLAGS_KILLED; } - ircsprintf(buf, "Killed (%s (%s))", source_p->name, reason); + rb_sprintf(buf, "Killed (%s (%s))", source_p->name, reason); exit_client(client_p, target_p, source_p, buf); @@ -159,7 +174,6 @@ mo_kill(struct Client *client_p, struct Client *source_p, int parc, const char * /* * ms_kill - * parv[0] = sender prefix * parv[1] = kill victim * parv[2] = kill path and reason */ @@ -171,7 +185,6 @@ ms_kill(struct Client *client_p, struct Client *source_p, int parc, const char * const char *reason; char default_reason[] = ""; const char *path; - int chasing = 0; *buf = '\0'; @@ -215,7 +228,6 @@ ms_kill(struct Client *client_p, struct Client *source_p, int parc, const char * return 0; } sendto_one_notice(source_p, ":KILL changed from %s to %s", user, target_p->name); - chasing = 1; } if(IsServer(target_p) || IsMe(target_p)) @@ -245,26 +257,26 @@ ms_kill(struct Client *client_p, struct Client *source_p, int parc, const char * if(IsOper(source_p)) /* send it normally */ { sendto_realops_snomask(IsService(source_p) ? SNO_SKILL : SNO_GENERAL, L_ALL, - "Received KILL message for %s[%s@%s]. From %s Path: %s!%s!%s!%s %s", - target_p->name, target_p->username, target_p->host, parv[0], - source_p->user->server, source_p->host, source_p->username, + "Received KILL message for %s!%s@%s. From %s Path: %s!%s!%s!%s %s", + target_p->name, target_p->username, target_p->orighost, source_p->name, + source_p->servptr->name, source_p->host, source_p->username, source_p->name, reason); ilog(L_KILL, "%c %s %s!%s@%s %s %s", MyConnect(target_p) ? 'O' : 'R', get_oper_name(source_p), target_p->name, target_p->username, target_p->host, - target_p->user->server, reason); + target_p->servptr->name, reason); } else { sendto_realops_snomask(SNO_SKILL, L_ALL, - "Received KILL message for %s[%s@%s]. From %s %s", - target_p->name, target_p->username, target_p->host, - parv[0], reason); + "Received KILL message for %s!%s@%s. From %s %s", + target_p->name, target_p->username, target_p->orighost, + source_p->name, reason); ilog(L_KILL, "S %s %s!%s@%s %s %s", source_p->name, target_p->name, target_p->username, - target_p->host, target_p->user->server, reason); + target_p->host, target_p->servptr->name, reason); } relay_kill(client_p, source_p, target_p, path, reason); @@ -272,7 +284,7 @@ ms_kill(struct Client *client_p, struct Client *source_p, int parc, const char * /* FLAGS_KILLED prevents a quit being sent out */ target_p->flags |= FLAGS_KILLED; - ircsprintf(buf, "Killed (%s %s)", source_p->name, reason); + rb_sprintf(buf, "Killed (%s %s)", source_p->name, reason); exit_client(client_p, target_p, source_p, buf); @@ -284,17 +296,17 @@ relay_kill(struct Client *one, struct Client *source_p, struct Client *target_p, const char *inpath, const char *reason) { struct Client *client_p; - dlink_node *ptr; + rb_dlink_node *ptr; char buffer[BUFSIZE]; if(MyClient(source_p)) - ircsnprintf(buffer, sizeof(buffer), + rb_snprintf(buffer, sizeof(buffer), "%s!%s!%s!%s (%s)", me.name, source_p->host, source_p->username, source_p->name, reason); else - ircsnprintf(buffer, sizeof(buffer), "%s %s", inpath, reason); + rb_snprintf(buffer, sizeof(buffer), "%s %s", inpath, reason); - DLINK_FOREACH(ptr, serv_list.head) + RB_DLINK_FOREACH(ptr, serv_list.head) { client_p = ptr->data;