X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/b42e202d6b62ba4eaeccc5dcd5fb65d65ec394e2..9dd128b4da6e54ca9f97cfcd48e345a57790ffbe:/extensions/hurt.c diff --git a/extensions/hurt.c b/extensions/hurt.c index e6ec64fa..2baf3c58 100644 --- a/extensions/hurt.c +++ b/extensions/hurt.c @@ -3,8 +3,6 @@ * * 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" @@ -17,6 +15,8 @@ #include "s_conf.h" #include "s_newconf.h" #include "hash.h" +#include "messages.h" +#include "s_assert.h" /* {{{ Structures */ #define HURT_CUTOFF (10) /* protocol messages. */ @@ -47,10 +47,10 @@ typedef struct _hurt { /* }}} */ /* {{{ 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); @@ -70,9 +70,8 @@ static hurt_t *hurt_find_exact(const char *ip); 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 *); -static int nick_is_valid(const char *); /* }}} */ /* {{{ State containers */ @@ -83,14 +82,14 @@ rb_dlink_list hurt_confs = { NULL, NULL, 0 }; /* {{{ 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} } @@ -107,14 +106,20 @@ mapi_hfn_list_av1 hurt_hfnlist[] = { 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 ); /* }}} */ @@ -137,7 +142,7 @@ static int modinit(void) { /* set-up hurt_state. */ - hurt_state.start_time = CurrentTime; + hurt_state.start_time = rb_current_time(); /* add our event handlers. */ hurt_expire_ev = rb_event_add("hurt_expire", hurt_expire_event, NULL, 60); @@ -168,16 +173,16 @@ modfini(void) * Message handlers. */ -/* {{{ static int mo_hurt() +/* {{{ static void mo_hurt() * * HURT [] - * + * * parv[1] - expire or ip * 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; @@ -188,7 +193,7 @@ mo_hurt(struct Client *client_p, struct Client *source_p, if (!IsOperK(source_p)) { sendto_one(source_p, form_str(ERR_NOPRIVS), me.name, source_p->name, "kline"); - return 0; + return; } if (parc == 3) @@ -200,11 +205,11 @@ mo_hurt(struct Client *client_p, struct Client *source_p, 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? */ @@ -215,7 +220,7 @@ mo_hurt(struct Client *client_p, struct Client *source_p, { sendto_one_numeric(source_p, ERR_NOSUCHNICK, form_str(ERR_NOSUCHNICK), ip); - return 0; + return; } ip = target_p->orighost; } @@ -227,13 +232,13 @@ mo_hurt(struct Client *client_p, struct Client *source_p, { 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; } /* @@ -247,12 +252,10 @@ mo_hurt(struct Client *client_p, struct Client *source_p, 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 * @@ -260,8 +263,8 @@ mo_hurt(struct Client *client_p, struct Client *source_p, * 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; @@ -273,32 +276,30 @@ me_hurt(struct Client *client_p, struct Client *source_p, * 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 | * * 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; @@ -307,17 +308,17 @@ mo_heal(struct Client *client_p, struct Client *source_p, { sendto_one(source_p, form_str(ERR_NOPRIVS), me.name, source_p->name, "unkline"); - return 0; + return; } - if (nick_is_valid(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); @@ -332,7 +333,7 @@ mo_heal(struct Client *client_p, struct Client *source_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", @@ -343,15 +344,13 @@ mo_heal(struct Client *client_p, struct Client *source_p, 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; @@ -360,9 +359,9 @@ me_heal(struct Client *client_p, struct Client *source_p, * *poof*, it's dropped... */ if (parc < 2) - return 0; + return; - if (nick_is_valid(parv[1])) + if (clean_nick(parv[1], 0)) { target_p = find_person(parv[1]); if (target_p != NULL && MyConnect(target_p)) @@ -371,16 +370,12 @@ me_heal(struct Client *client_p, struct Client *source_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; } /* @@ -400,8 +395,7 @@ hurt_check_event(void *arg) { rb_dlinkDestroy(ptr, &hurt_state.hurt_clients); sendto_one_notice(client_p, ":HURT restriction removed for this session"); - USED_TARGETS(client_p) = 0; - client_p->localClient->target_last = CurrentTime; /* don't ask --nenolod */ + client_p->localClient->target_last = rb_current_time(); /* don't ask --nenolod */ } else if (client_p->localClient->receiveM > hurt_state.cutoff) exit_client(NULL, client_p, &me, hurt_state.exit_reason); @@ -420,7 +414,7 @@ hurt_expire_event(void *unused) { hurt = (hurt_t *) ptr->data; - if (hurt->expire <= CurrentTime) + if (hurt->expire <= rb_current_time()) { rb_dlinkFindDestroy(hurt, &hurt_confs); hurt_destroy(hurt); @@ -454,12 +448,11 @@ new_local_user_hook(struct Client *source_p) if (hurt_find(source_p->sockhost) || hurt_find(source_p->orighost)) { - USED_TARGETS(source_p) = 10; - source_p->localClient->target_last = CurrentTime + 600; /* don't ask --nenolod */ + source_p->localClient->target_last = rb_current_time() + 600; /* don't ask --nenolod */ SetTGChange(source_p); rb_dlinkAddAlloc(source_p, &hurt_state.hurt_clients); sendto_one_notice(source_p, ":You are hurt. Please identify to services immediately, or use /stats p for assistance."); - } + } } /* }}} */ @@ -477,9 +470,9 @@ doing_stats_hook(hook_data_int *hdata) source_p = hdata->client; if(hdata->arg2 != (int) 's') return; - if((ConfigFileEntry.stats_k_oper_only == 2) && !IsOper(source_p)) + if((ConfigFileEntry.stats_k_oper_only == 2) && !IsOperGeneral(source_p)) return; - if ((ConfigFileEntry.stats_k_oper_only == 1) && !IsOper(source_p)) + if ((ConfigFileEntry.stats_k_oper_only == 1) && !IsOperGeneral(source_p)) { hurt = hurt_find(source_p->sockhost); if (hurt != NULL) @@ -496,7 +489,6 @@ doing_stats_hook(hook_data_int *hdata) sendto_one_numeric(source_p, RPL_STATSKLINE, form_str(RPL_STATSKLINE), 's', "*", hurt->ip, hurt->reason, "", ""); - return; } return; } @@ -525,13 +517,13 @@ hurt_propagate(struct Client *client_p, struct Client *source_p, hurt_t *hurt) sendto_one(client_p, ":%s ENCAP %s HURT %ld %s :%s", source_p->name, client_p->name, - (long)(hurt->expire - CurrentTime), + (long)(hurt->expire - rb_current_time()), hurt->ip, hurt->reason); else sendto_server(&me, NULL, NOCAPS, NOCAPS, ":%s ENCAP * HURT %ld %s :%s", source_p->name, - (long)(hurt->expire - CurrentTime), + (long)(hurt->expire - rb_current_time()), hurt->ip, hurt->reason); } /* }}} */ @@ -546,7 +538,7 @@ hurt_new(time_t expire, const char *ip, const char *reason) hurt->ip = rb_strdup(ip); hurt->reason = rb_strdup(reason); - hurt->expire = CurrentTime + expire; + hurt->expire = rb_current_time() + expire; return hurt; } @@ -584,7 +576,7 @@ hurt_find_exact(const char *ip) { hurt = (hurt_t *) ptr->data; - if (!strcasecmp(ip, hurt->ip)) + if (!rb_strcasecmp(ip, hurt->ip)) return hurt; } @@ -617,8 +609,8 @@ hurt_remove(const char *ip) 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)) @@ -627,37 +619,15 @@ heal_nick(struct Client *source_p, struct Client *target_p) get_oper_name(source_p), get_client_name(target_p, HIDE_IP)); 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); - USED_TARGETS(target_p) = 0; - target_p->localClient->target_last = CurrentTime; /* don't ask --nenolod */ - return 1; + target_p->localClient->target_last = rb_current_time(); /* don't ask --nenolod */ } else { sendto_one_notice(source_p, ":%s was not hurt", target_p->name); - return 0; } } /* }}} */ -/* - * Anything else... - */ - -/* {{{ static int nick_is_valid() */ -static int -nick_is_valid(const char *nick) -{ - const char *s = nick; - - for (; *s != '\0'; s++) { - if (!IsNickChar(*s)) - return 0; - } - - return 1; -} -/* }}} */ - /* * vim: ts=8 sw=8 noet fdm=marker tw=80 */