X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/38e6acddad741b38a475fe3d10dfffb3c6d6c639..7e7c69536b1937762d04d71fbaad6fb204b5b2ef:/src/chmode.c diff --git a/src/chmode.c b/src/chmode.c index 9bf11c3..6c3fc36 100644 --- a/src/chmode.c +++ b/src/chmode.c @@ -26,14 +26,12 @@ */ #include "stdinc.h" -#include "tools.h" #include "channel.h" #include "client.h" #include "common.h" #include "hash.h" #include "hook.h" -#include "irc_string.h" -#include "sprintf_irc.h" +#include "match.h" #include "ircd.h" #include "numeric.h" #include "s_serv.h" /* captab */ @@ -42,10 +40,8 @@ #include "whowas.h" #include "s_conf.h" /* ConfigFileEntry, ConfigChannel */ #include "s_newconf.h" -#include "event.h" -#include "memory.h" -#include "balloc.h" -#include "s_log.h" +#include "logger.h" +#include "chmode.h" /* bitmasks for error returns, so we send once per call */ #define SM_ERR_NOTS 0x00000001 /* No TS on channel */ @@ -61,18 +57,12 @@ #define SM_ERR_RPL_Q 0x00000800 #define SM_ERR_RPL_F 0x00001000 -void set_channel_mode(struct Client *, struct Client *, - struct Channel *, struct membership *, int, const char **); - -int add_id(struct Client *source_p, struct Channel *chptr, - const char *banid, dlink_list * list, long mode_type); - static struct ChModeChange mode_changes[BUFSIZE]; static int mode_count; static int mode_limit; static int mask_pos; -int +static int get_channel_access(struct Client *source_p, struct membership *msptr) { if(!MyClient(source_p) || is_chanop(msptr)) @@ -89,26 +79,26 @@ get_channel_access(struct Client *source_p, struct membership *msptr) */ int add_id(struct Client *source_p, struct Channel *chptr, const char *banid, - dlink_list * list, long mode_type) + rb_dlink_list * list, long mode_type) { struct Ban *actualBan; static char who[USERHOST_REPLYLEN]; char *realban = LOCAL_COPY(banid); - dlink_node *ptr; + rb_dlink_node *ptr; /* dont let local clients overflow the banlist, or set redundant * bans */ if(MyClient(source_p)) { - if((dlink_list_length(&chptr->banlist) + dlink_list_length(&chptr->exceptlist) + dlink_list_length(&chptr->invexlist) + dlink_list_length(&chptr->quietlist)) >= (chptr->mode.mode & MODE_EXLIMIT ? ConfigChannel.max_bans_large : ConfigChannel.max_bans)) + if((rb_dlink_list_length(&chptr->banlist) + rb_dlink_list_length(&chptr->exceptlist) + rb_dlink_list_length(&chptr->invexlist) + rb_dlink_list_length(&chptr->quietlist)) >= (chptr->mode.mode & MODE_EXLIMIT ? ConfigChannel.max_bans_large : ConfigChannel.max_bans)) { sendto_one(source_p, form_str(ERR_BANLISTFULL), me.name, source_p->name, chptr->chname, realban); return 0; } - DLINK_FOREACH(ptr, list->head) + RB_DLINK_FOREACH(ptr, list->head) { actualBan = ptr->data; if(mask_match(actualBan->banstr, realban)) @@ -118,7 +108,7 @@ add_id(struct Client *source_p, struct Channel *chptr, const char *banid, /* dont let remotes set duplicates */ else { - DLINK_FOREACH(ptr, list->head) + RB_DLINK_FOREACH(ptr, list->head) { actualBan = ptr->data; if(!irccmp(actualBan->banstr, realban)) @@ -130,12 +120,12 @@ add_id(struct Client *source_p, struct Channel *chptr, const char *banid, if(IsPerson(source_p)) rb_sprintf(who, "%s!%s@%s", source_p->name, source_p->username, source_p->host); else - strlcpy(who, source_p->name, sizeof(who)); + rb_strlcpy(who, source_p->name, sizeof(who)); actualBan = allocate_ban(realban, who); - actualBan->when = CurrentTime; + actualBan->when = rb_current_time(); - dlinkAdd(actualBan, &actualBan->node, list); + rb_dlinkAdd(actualBan, &actualBan->node, list); /* invalidate the can_send() cache */ if(mode_type == CHFL_BAN || mode_type == CHFL_QUIET || mode_type == CHFL_EXCEPTION) @@ -151,21 +141,21 @@ add_id(struct Client *source_p, struct Channel *chptr, const char *banid, * side effects - given id is removed from the appropriate list */ int -del_id(struct Channel *chptr, const char *banid, dlink_list * list, long mode_type) +del_id(struct Channel *chptr, const char *banid, rb_dlink_list * list, long mode_type) { - dlink_node *ptr; + rb_dlink_node *ptr; struct Ban *banptr; if(EmptyString(banid)) return 0; - DLINK_FOREACH(ptr, list->head) + RB_DLINK_FOREACH(ptr, list->head) { banptr = ptr->data; if(irccmp(banid, banptr->banstr) == 0) { - dlinkDelete(&banptr->node, list); + rb_dlinkDelete(&banptr->node, list); free_ban(banptr); /* invalidate the can_send() cache */ @@ -492,8 +482,8 @@ chm_ban(struct Client *source_p, struct Channel *chptr, { const char *mask; const char *raw_mask; - dlink_list *list; - dlink_node *ptr; + rb_dlink_list *list; + rb_dlink_node *ptr; struct Ban *banptr; int errorval; int rpl_list; @@ -580,7 +570,7 @@ chm_ban(struct Client *source_p, struct Channel *chptr, return; } - DLINK_FOREACH(ptr, list->head) + RB_DLINK_FOREACH(ptr, list->head) { banptr = ptr->data; sendto_one(source_p, form_str(rpl_list), @@ -1039,7 +1029,7 @@ chm_forward(struct Client *source_p, struct Channel *chptr, } } - strlcpy(chptr->mode.forward, forward, sizeof(chptr->mode.forward)); + rb_strlcpy(chptr->mode.forward, forward, sizeof(chptr->mode.forward)); mode_changes[mode_count].letter = c; mode_changes[mode_count].dir = MODE_ADD; @@ -1099,7 +1089,7 @@ chm_key(struct Client *source_p, struct Channel *chptr, return; s_assert(key[0] != ' '); - strlcpy(chptr->mode.key, key, sizeof(chptr->mode.key)); + rb_strlcpy(chptr->mode.key, key, sizeof(chptr->mode.key)); mode_changes[mode_count].letter = c; mode_changes[mode_count].dir = MODE_ADD; @@ -1596,6 +1586,6 @@ set_channel_mode(struct Client *client_p, struct Client *source_p, } /* only propagate modes originating locally, or if we're hubbing */ - if(MyClient(source_p) || dlink_list_length(&serv_list) > 1) + if(MyClient(source_p) || rb_dlink_list_length(&serv_list) > 1) send_cap_mode_changes(client_p, source_p, chptr, mode_changes, mode_count); }