*
* Copyright (C) 2006 charybdis development team
* All rights reserved
- *
- * $Id: hurt.c 3161 2007-01-25 07:23:01Z nenolod $
*/
#include "stdinc.h"
#include "modules.h"
/* }}} */
/* {{{ Prototypes */
-static int mo_hurt(struct Client *, struct Client *, int, const char **);
-static int me_hurt(struct Client *, struct Client *, int, const char **);
-static int mo_heal(struct Client *, struct Client *, int, const char **);
-static int me_heal(struct Client *, struct Client *, int, const char **);
+static void mo_hurt(struct MsgBuf *msgbuf_p, struct Client *, struct Client *, int, const char **);
+static void me_hurt(struct MsgBuf *msgbuf_p, struct Client *, struct Client *, int, const char **);
+static void mo_heal(struct MsgBuf *msgbuf_p, struct Client *, struct Client *, int, const char **);
+static void me_heal(struct MsgBuf *msgbuf_p, struct Client *, struct Client *, int, const char **);
static int modinit(void);
static void modfini(void);
static void hurt_remove(const char *ip);
static void hurt_destroy(void *hurt);
-static int heal_nick(struct Client *, struct Client *);
+static void heal_nick(struct Client *, struct Client *);
/* }}} */
/* {{{ Messages */
struct Message hurt_msgtab = {
- "HURT", 0, 0, 0, MFLG_SLOW, {
+ "HURT", 0, 0, 0, 0, {
mg_ignore, mg_ignore, mg_ignore,
mg_ignore, {me_hurt, 0}, {mo_hurt, 3}
}
};
struct Message heal_msgtab = {
- "HEAL", 0, 0, 0, MFLG_SLOW, {
+ "HEAL", 0, 0, 0, 0, {
mg_ignore, mg_ignore, mg_ignore,
mg_ignore, {me_heal, 0}, {mo_heal, 2}
}
mapi_clist_av1 hurt_clist[] = { &hurt_msgtab, &heal_msgtab, NULL };
-DECLARE_MODULE_AV1(
+static const char hurt_desc[] =
+ "Prevents \"hurt\" users from messaging anyone but operators or "
+ "services until they identify or are \"healed\"";
+
+DECLARE_MODULE_AV2(
hurt,
modinit,
modfini,
hurt_clist,
NULL,
hurt_hfnlist,
- "$Revision: 3161 $"
+ NULL,
+ NULL,
+ hurt_desc
);
/* }}} */
* Message handlers.
*/
-/* {{{ static int mo_hurt()
+/* {{{ static void mo_hurt()
*
* HURT [<expire>] <ip> <reason>
*
* parv[2] - ip or reason
* parv[3] - reason or NULL
*/
-static int
-mo_hurt(struct Client *client_p, struct Client *source_p,
+static void
+mo_hurt(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p,
int parc, const char **parv)
{
const char *ip, *expire, *reason;
if (!IsOperK(source_p)) {
sendto_one(source_p, form_str(ERR_NOPRIVS), me.name,
source_p->name, "kline");
- return 0;
+ return;
}
if (parc == 3)
expire_time = HURT_DEFAULT_EXPIRE;
if (expire && (expire_time = valid_temp_time(expire)) < 1) {
sendto_one_notice(source_p, ":Permanent HURTs are not supported");
- return 0;
+ return;
}
if (EmptyString(reason)) {
sendto_one_notice(source_p, ":Empty HURT reasons are bad for business");
- return 0;
+ return;
}
/* Is this a client? */
{
sendto_one_numeric(source_p, ERR_NOSUCHNICK,
form_str(ERR_NOSUCHNICK), ip);
- return 0;
+ return;
}
ip = target_p->orighost;
}
{
sendto_one_notice(source_p, ":Invalid HURT mask [%s]",
ip);
- return 0;
+ return;
}
}
if (hurt_find(ip) != NULL) {
sendto_one(source_p, ":[%s] already HURT", ip);
- return 0;
+ return;
}
/*
hurt = hurt_new(expire_time, ip, reason);
hurt_add(hurt);
hurt_propagate(NULL, source_p, hurt);
-
- return 0;
}
/* }}} */
-/* {{{ static int me_hurt()
+/* {{{ static void me_hurt()
*
* [ENCAP mask] HURT <target> <expire> <ip> <reason>
*
* parv[2] - ip
* parv[3] - reason
*/
-static int
-me_hurt(struct Client *client_p, struct Client *source_p,
+static void
+me_hurt(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p,
int parc, const char **parv)
{
time_t expire_time;
* dropping a server over.
*/
if (parc < 4 || !IsPerson(source_p))
- return 0;
+ return;
if ((expire_time = atoi(parv[1])) < 1)
- return 0;
+ return;
if (hurt_find(parv[2]) != NULL)
- return 0;
+ return;
if (EmptyString(parv[3]))
- return 0;
+ return;
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"%s added HURT on [%s] for %ld minutes with reason [%s]",
get_oper_name(source_p), parv[2], (long) expire_time / 60, parv[3]);
hurt = hurt_new(expire_time, parv[2], parv[3]);
hurt_add(hurt);
-
- return 0;
}
/* }}} */
-/* {{{ static int mo_heal()
+/* {{{ static void mo_heal()
*
* HURT <nick>|<ip>
*
* parv[1] - nick or ip
*/
-static int
-mo_heal(struct Client *client_p, struct Client *source_p,
+static void
+mo_heal(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p,
int parc, const char **parv)
{
struct Client *target_p;
{
sendto_one(source_p, form_str(ERR_NOPRIVS),
me.name, source_p->name, "unkline");
- return 0;
+ return;
}
- if (is_valid_nick(parv[1]))
+ if (clean_nick(parv[1], 0))
{
target_p = find_named_person(parv[1]);
if (target_p == NULL)
{
sendto_one_numeric(source_p, ERR_NOSUCHNICK,
form_str(ERR_NOSUCHNICK), parv[1]);
- return 0;
+ return;
}
if (MyConnect(target_p))
heal_nick(source_p, target_p);
if (hurt_find_exact(parv[1]) == NULL)
{
sendto_one_notice(source_p, ":Mask [%s] is not HURT", parv[1]);
- return 0;
+ return;
}
hurt_remove(parv[1]);
sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s removed HURT on %s",
else
{
sendto_one(source_p, ":[%s] is not a valid IP address/nick", parv[1]);
- return 0;
+ return;
}
-
- return 0;
}
/* }}} */
-static int
-me_heal(struct Client *client_p, struct Client *source_p,
+static void
+me_heal(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p,
int parc, const char **parv)
{
struct Client *target_p;
* *poof*, it's dropped...
*/
if (parc < 2)
- return 0;
+ return;
- if (is_valid_nick(parv[1]))
+ if (clean_nick(parv[1], 0))
{
target_p = find_person(parv[1]);
if (target_p != NULL && MyConnect(target_p))
else if (strchr(parv[1], '.')) /* host or mask to remove ban for */
{
if (hurt_find_exact(parv[1]) == NULL)
- return 0;
+ return;
hurt_remove(parv[1]);
sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s removed HURT on %s",
get_oper_name(source_p), parv[1]);
}
- else
- return 0;
-
- return 0;
}
/*
sendto_one_numeric(source_p, RPL_STATSKLINE,
form_str(RPL_STATSKLINE), 's',
"*", hurt->ip, hurt->reason, "", "");
- return;
}
return;
}
{
hurt = (hurt_t *) ptr->data;
- if (!strcasecmp(ip, hurt->ip))
+ if (!rb_strcasecmp(ip, hurt->ip))
return hurt;
}
hurt_destroy(hurt);
}
-/* {{{ static int heal_nick() */
-static int
+/* {{{ static void heal_nick() */
+static void
heal_nick(struct Client *source_p, struct Client *target_p)
{
if (rb_dlinkFindDestroy(target_p, &hurt_state.hurt_clients))
sendto_one_notice(target_p, ":HURT restriction temporarily removed by operator");
sendto_one_notice(source_p, ":HURT restriction on %s temporarily removed", target_p->name);
target_p->localClient->target_last = rb_current_time(); /* don't ask --nenolod */
- return 1;
}
else
{
sendto_one_notice(source_p, ":%s was not hurt", target_p->name);
- return 0;
}
}
/* }}} */