X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fchannel.c;h=9de97d3755d5f65c516c8e6bfc2eeab9e2a74d64;hb=73286bcf466860bb2d095e97b1a16e8a135b51d3;hp=a467750ea39496f483da2cad7b247b18a138e4ae;hpb=dea86bb53249161d6b0f1f018fd0bd259bfb161f;p=ircu2.10.12-pk.git diff --git a/ircd/channel.c b/ircd/channel.c index a467750..9de97d3 100644 --- a/ircd/channel.c +++ b/ircd/channel.c @@ -1280,36 +1280,12 @@ static void send_ban_list(struct Client* cptr, struct Channel* chptr) assert(0 != cptr); assert(0 != chptr); - for (lp = chptr->banlist; lp; lp = lp->next) { - if(!(lp->flags & BAN_EXCEPTION)) - send_reply(cptr, RPL_BANLIST, chptr->chname, lp->banstr, - lp->who, lp->when); - } + for (lp = chptr->banlist; lp; lp = lp->next) + send_reply(cptr, RPL_BANLIST, chptr->chname, lp->banstr, lp->who, lp->when); send_reply(cptr, RPL_ENDOFBANLIST, chptr->chname); } -/** send an exceptionlist to a client for a channel - * - * @param cptr Client to send the exceptionlist to. - * @param chptr Channel whose exceptionlist to send. - */ -static void send_exception_list(struct Client* cptr, struct Channel* chptr) -{ - struct Ban* lp; - - assert(0 != cptr); - assert(0 != chptr); - - for (lp = chptr->banlist; lp; lp = lp->next) { - if(lp->flags & BAN_EXCEPTION) - send_reply(cptr, RPL_EXCEPTIONLIST, chptr->chname, lp->banstr, - lp->who, lp->when); - } - - send_reply(cptr, RPL_ENDOFEXCEPTIONLIST, chptr->chname); -} - /** Get a channel block, creating if necessary. * Get Channel block for chname (and allocate a new channel * block, if it didn't exists before). @@ -1611,7 +1587,6 @@ modebuf_flush_int(struct ModeBuf *mbuf, int all) MODE_PERSIST, 'z', MODE_NOCOLOUR, 'c', MODE_NOCTCP, 'C', -/* MODE_EXCEPTION, 'e', */ /* MODE_ALTCHAN, 'F', */ /* MODE_NOFLOOD, 'f', */ MODE_ACCESS, 'a', @@ -1710,14 +1685,14 @@ modebuf_flush_int(struct ModeBuf *mbuf, int all) bufptr[(*bufptr_i)++] = MB_TYPE(mbuf, i) & MODE_CHANOP ? 'o' : 'v'; totalbuflen -= IRCD_MAX(9, tmp) + 1; } - } else if (MB_TYPE(mbuf, i) & (MODE_BAN | MODE_EXCEPTION | MODE_APASS | MODE_UPASS | MODE_ALTCHAN | MODE_NOFLOOD)) { + } else if (MB_TYPE(mbuf, i) & (MODE_BAN | MODE_APASS | MODE_UPASS | MODE_ALTCHAN | MODE_NOFLOOD)) { tmp = strlen(MB_STRING(mbuf, i)); if ((totalbuflen - tmp) <= 0) /* don't overflow buffer */ MB_TYPE(mbuf, i) |= MODE_SAVE; /* save for later */ else { char mode_char; - switch(MB_TYPE(mbuf, i) & (MODE_BAN | MODE_EXCEPTION | MODE_APASS | MODE_UPASS | MODE_ALTCHAN | MODE_NOFLOOD)) + switch(MB_TYPE(mbuf, i) & (MODE_BAN | MODE_APASS | MODE_UPASS | MODE_ALTCHAN | MODE_NOFLOOD)) { case MODE_APASS: mode_char = 'A'; @@ -1725,9 +1700,6 @@ modebuf_flush_int(struct ModeBuf *mbuf, int all) case MODE_UPASS: mode_char = 'U'; break; - case MODE_EXCEPTION: - mode_char = 'e'; - break; case MODE_ALTCHAN: mode_char = 'F'; break; @@ -1811,7 +1783,7 @@ modebuf_flush_int(struct ModeBuf *mbuf, int all) build_string(strptr, strptr_i, cli_name(MB_CLIENT(mbuf, i)), 0, ' '); /* deal with bans... */ - else if (MB_TYPE(mbuf, i) & (MODE_BAN | MODE_EXCEPTION)) + else if (MB_TYPE(mbuf, i) & (MODE_BAN)) build_string(strptr, strptr_i, MB_STRING(mbuf, i), 0, ' '); /* deal with keys... */ @@ -1927,7 +1899,7 @@ modebuf_flush_int(struct ModeBuf *mbuf, int all) build_string(strptr, strptr_i, NumNick(MB_CLIENT(mbuf, i)), ' '); /* deal with modes that take strings */ - else if (MB_TYPE(mbuf, i) & (MODE_KEY | MODE_BAN | MODE_EXCEPTION | MODE_APASS | MODE_UPASS | MODE_ALTCHAN | MODE_NOFLOOD)) + else if (MB_TYPE(mbuf, i) & (MODE_KEY | MODE_BAN | MODE_APASS | MODE_UPASS | MODE_ALTCHAN | MODE_NOFLOOD)) build_string(strptr, strptr_i, MB_STRING(mbuf, i), 0, ' '); /* @@ -2235,7 +2207,6 @@ modebuf_extract(struct ModeBuf *mbuf, char *buf) MODE_PERSIST, 'z', MODE_NOCOLOUR, 'c', MODE_NOCTCP, 'C', -/* MODE_EXCEPTION, 'e', */ MODE_NOAMSGS, 'M', MODE_NONOTICE, 'N', MODE_QUARANTINE, 'Q', @@ -2351,7 +2322,6 @@ mode_invite_clear(struct Channel *chan) #define DONE_KEY_DEL 0x80 /**< We've removed the key */ #define DONE_UPASS_DEL 0x100 /**< We've removed the user pass */ #define DONE_APASS_DEL 0x200 /**< We've removed the admin pass */ -#define DONE_EXCEPTIONLIST 0x400 /**< We've sent the exception list */ #define DONE_ALTCHAN 0x800 /**< We've set the altchan */ #define DONE_ACCESS 0x1000 /**< We've set the access */ #define DONE_NOFLOOD 0x2000 /**< We've set the noflood options */ @@ -2732,7 +2702,10 @@ mode_parse_noflood(struct ParseState *state, ulong64 *flag_p) struct Membership *member; for(member = state->chptr->members; member; member = member->next_member) { struct MemberFlood *floodnode; - for(floodnode = member->flood; floodnode; floodnode = floodnode->next_memberflood) {} //simply walk to the end + for(floodnode = member->flood;floodnode ; floodnode = floodnode->next_memberflood) { + if(floodnode->next_memberflood == NULL) break; + } //simply walk to the end + if(!floodnode) continue; floodnode->next_memberflood = free_MemberFlood; free_MemberFlood = floodnode; member->flood = NULL; @@ -3292,19 +3265,9 @@ mode_parse_ban(struct ParseState *state, ulong64 *flag_p) struct Ban *ban, *newban; if (state->parc <= 0) { /* Not enough args, send ban list */ - if (MyUser(state->sptr)) { - if (*flag_p == MODE_EXCEPTION) { - if (!(state->done & DONE_EXCEPTIONLIST)) { - send_exception_list(state->sptr, state->chptr); - state->done |= DONE_EXCEPTIONLIST; - } - } - else { - if (!(state->done & DONE_BANLIST)) { - send_ban_list(state->sptr, state->chptr); - state->done |= DONE_BANLIST; - } - } + if (MyUser(state->sptr) && !(state->done & DONE_BANLIST)) { + send_ban_list(state->sptr, state->chptr); + state->done |= DONE_BANLIST; } return; } @@ -3381,8 +3344,7 @@ mode_process_bans(struct ParseState *state) } else if (ban->flags & BAN_DEL) { /* Deleted a ban? */ char *bandup; DupString(bandup, ban->banstr); - modebuf_mode_string(state->mbuf, MODE_DEL | ((ban->flags & BAN_EXCEPTION) ? MODE_EXCEPTION : MODE_BAN), - bandup, 1); + modebuf_mode_string(state->mbuf, MODE_DEL | MODE_BAN, bandup, 1); if (state->flags & MODE_PARSE_SET) { /* Ok, make it take effect */ if (prevban) /* clip it out of the list... */ @@ -3421,14 +3383,13 @@ mode_process_bans(struct ParseState *state) char *bandup; /* add the ban to the buffer */ DupString(bandup, ban->banstr); - modebuf_mode_string(state->mbuf, MODE_ADD | ((ban->flags & BAN_EXCEPTION) ? MODE_EXCEPTION : MODE_BAN), - bandup, 1); + modebuf_mode_string(state->mbuf, MODE_ADD | MODE_BAN, bandup, 1); if (state->flags & MODE_PARSE_SET) { /* create a new ban */ newban = make_ban(ban->banstr); strcpy(newban->who, ban->who); newban->when = ban->when; - newban->flags = ban->flags & (BAN_IPMASK | BAN_EXCEPTION); + newban->flags = ban->flags & BAN_IPMASK; newban->next = state->chptr->banlist; /* and link it in */ state->chptr->banlist = newban; @@ -3771,7 +3732,6 @@ mode_parse(struct ModeBuf *mbuf, struct Client *cptr, struct Client *sptr, MODE_PERSIST, 'z', MODE_NOCOLOUR, 'c', MODE_NOCTCP, 'C', -/* MODE_EXCEPTION, 'e',*/ MODE_NOAMSGS, 'M', MODE_NONOTICE, 'N', MODE_QUARANTINE, 'Q', @@ -3868,9 +3828,6 @@ mode_parse(struct ModeBuf *mbuf, struct Client *cptr, struct Client *sptr, if (IsServer(cptr) || feature_bool(FEAT_OPLEVELS)) mode_parse_upass(&state, flag_p); break; - -/* case 'e': - if(MyUser(state.sptr) && !(state.flags & MODE_PARSE_FORCE) && !feature_bool(FEAT_EXCEPT_ENABLE)) break;*/ case 'b': /* deal with bans */ mode_parse_ban(&state, flag_p); break; @@ -4324,49 +4281,50 @@ int ext_amsg_block(struct Client *cptr, struct Channel *chptr, const char *msg) strcpy(stripped_message, msg); char p = stripped_message[0]; int p_pos = 0; - int is_visible = 1, is_ccode = 0; j = 0; + int is_visible = 1, is_ccode = 0, i = 0, j = 0; char codes[5]; - for(int i = 0; p != '\n'; p = stripped_message[++i]) { - if(c == 3) { + for(i = 0; p != '\n'; p = stripped_message[++i]) { + if(p == 3) { j = 0; is_ccode = 1; } else if(is_ccode) { - if((c >= 48 && c <= 57) || c == 44) { - if(ccode == 1) { - if(c == 44) { - ccode = 2; + if((p >= 48 && p <= 57) || p == 44) { + if(is_ccode == 1) { + if(p == 44) { + is_ccode = 2; codes[j++] = 0; j = 0; } else - codes[j++] = c; + codes[j++] = p; } else { //compare - if(c != codes[j++]) { - ccode = 3; + if(p != codes[j++]) { + is_ccode = 3; } } } else { //END of color code... is_ccode = 0; - if(ccode != 1 && codes[j] != 0) ccode = 3; - if(ccode == 1) { + if(is_ccode != 1 && codes[j] != 0) is_ccode = 3; + if(is_ccode == 1) { codes[j] = 0; - for(int k = 0; k < j-1; k++) { + int k; + for(k = 0; k < j-1; k++) { if(codes[k] != 48) { is_visible = 1; goto normalchar; } } is_visible = 0; - } else if(ccode == 2) { + } else if(is_ccode == 2) { is_visible = 0; - } else if(ccode == 3) { + } else if(is_ccode == 3) { is_visible = 1; goto normalchar; } } } else { - :normalchar + normalchar: if(is_visible) stripped_message[p_pos++] = p; } @@ -4406,13 +4364,14 @@ int ext_amsg_block(struct Client *cptr, struct Channel *chptr, const char *msg) * --pk910 2011/7/1 */ int ext_noflood_block(struct Client *cptr, struct Channel *chptr) { - if(!chptr->mode.noflood) return 0; + if(chptr->mode.noflood == NULL || !chptr->mode.noflood) return 0; struct Membership *member = find_member_link(chptr, cptr); if(!member) return 0; //TODO: we've no check for -n channels implemented, yet //check if this user is really affected by +f unsigned int flags = (chptr->mode.noflood_value & 0x00000007); //0000 0000 0000 0000 0000 0000 0000 0111 = 0x00000007 >> 0 unsigned int count = (chptr->mode.noflood_value & 0x00001ff8) >> 3; //0000 0000 0000 0000 0001 1111 1111 1000 = 0x00001ff8 >> 3 int time = (chptr->mode.noflood_value & 0x07ffe000) >> 13; //0000 0111 1111 1111 1110 0000 0000 0000 = 0x07ffe000 >> 13 + if(count == 0 || time == 0) return 0; if(!(flags & FLFL_NOFLOOD) && HasPriv(cptr, PRIV_FLOOD)) return 0; if(!(flags & FLFL_CHANOP) && (member->status & CHFL_CHANOP))