aboutsummaryrefslogtreecommitdiffstats
path: root/src/channel.c
Commit message (Expand)AuthorAgeFilesLines
* For services who allow you to log in by account name but still allow you to•••use a different nick: when you're logged in you are now considered registered as far as channel mode +M (only registered users may speak and +R (only registered users may join) are concerned. Same for user mode +R (only allow private messages from registered users). Tech: whenever services set SVID and it's not * and does not start with a number, then we consider this user to be 'logged in'. Whenever a user is set +r (s)he is also considered 'logged in'. This way it's compatible with both older and new services and doesn't introduce security issues with older services using servicetimestamp for nick tracking or other means. This issue was reported by ShawnSmith (#4318). Gravatar Bram Matthys2014-07-051-1/+1
* complete the previous patch (MLOCK).. mostly just bringing it up to date & co...Gravatar Bram Matthys2012-05-041-3/+2
* - Add support for server-enforced mode locks (MLOCK).••• This allows the IRCd to enforce MLOCKs that are set by services, which eliminates clashes between users setting modes and services enforcing it's mlock on channels. (#3055) Gravatar William Pitcock2012-05-041-0/+23
* ..This is actually an update of earlier code from CVS, but now it works ok:..•••- Added support for "stacked" extbans. Put simply this allows extban combinations such as ~q:~c:#test to only silence users on #test, for example. This feature is enabled by default, but can be disabled during ./Config -advanced. This feature was suggested by Shining Phoenix (#0003193), was then coded by aquanight for U3.3, and later on backported and partially redone by Syzop. Module coders: In an extban ~x:~y:something where we call ~x the 1st, and ~y the 2nd extban: Since stacked extbans only makes sense where the 1st one is an action extended ban like ~q/~n/~j, most modules won't have to be changed, as their extban never gets extended (just like ~c:~q: makes no sense). However, you may still want to indicate in some cases that the extban your module introduces also shouldn't be used as 2nd extban. For example with a textban extban ~T it makes no sense to have ~n:~T. The module can indicate this by setting EXTBOPT_NOSTACKCHILD in the ExtbanInfo struct used by ExtbanAdd(). For completeness I note that action modifier extbans are indicated by EXTBOPT_ACTMODIFIER. However, note that we currently assume all such extbans use the extban_is_ok_nuh_extban and extban_conv_param_nuh_or_extban functions. If you don't use these and use EXTBOPT_ACTMODIFIER, then things will go wrong with regards to stack-counting. Module coders should also note that stacked extbans are not available if DISABLE_STACKED_EXTBANS is defined. - Added extended ban ~R:<nick>, which only matches if <nick> is a registered user (has identified to services). This is really only useful in ban exemptions, like: +e ~R:Nick would allow Nick to go through all bans if he has identified to NickServ. This is often safer than using +e n!u@h. - Added Extended Invex. This is very much like extended bans, in fact it supports some of the same flags. Syntax: +I ~character:mask Currently supported are: ~c (channel), ~r (realname) and ~R (registered). This can be useful when setting a channel invite only (+i) and then setting invite exceptions such as +I ~c:#chan (or even ~c:+#chan), while still being able to ban users. Because action modifiers (~q/~n/~j) make no sense here, extended invex stacking (+I ~a:~b:c) makes no sense either, and is not supported. Suggested by DanPMK (#0002817), parts based on patch from ohnobinki. Module coders: set EXTBOPT_INVEX in the ExtbanInfo struct used by ExtbanAdd() to indicate that your extban may also be used in +I. - Invex (+I) now always checks cloaked hosts as well. Just like with bans, it checks them also when the user is not currently cloaked (eg: did -x, or is currently using some VHOST). - Fixed client desynch caused by (un)banning, reported by Sephiroth (#2837). Gravatar Bram Matthys2010-08-141-79/+45
* - Fixed bug in CVS where the ban exempt (+e) handling was reversed: if a••• non-matching +e was present, one could walk through bans. Reported by tabrisnet (#0003909). Bug was caused by chained/stacked extbans. Gravatar Bram Matthys2010-05-241-2/+2
* - Added support for "chained" extbans. Put simply this allows extban combinat...••• such as ~q:~c:#test to only silence users on #test, for example. This feature is enabled by default, but can be disabled during ./Config -advanced. Module support for this feature must note the following: - For is_ok function, the extban can either assign extban_is_ok_nuh_extban, which will deal checking a chained extban (including checking for restricted extbans), or it can call that function from its own is_ok routine. For the latter case, remember to pass only the mask part of your ban format (ie, don't just pass para as otherwise it'll just call your is_ok again). - For conv_param function, the extban can either assign extban_conv_param_nuh_or_extban, which will automatically call conv_param for a chained extban, or pretty up a n!u@h mask. - For is_banned, the extban should call ban_check_mask with the mask part of the parameter. This will automatically call is_banned for a stacked extban, or match against a n!u@h. n!u@h is checked against the current user (ie, with the info in the globals ban_ip, etc), so things can get weird if you call this outside a normal ban check. Modules must keep in mind that chained extban support is not available (and neither are the three functions above) if DISABLE_STACKED_EXTBANS is #defined (this is controled by Config). Modules will not compile/load if they try to use them anyway. This change should not break extban modules, and should need some more extensive testing. - Misc fix for disabling extban chains, should've done stuff in our autoconf stuff instead of hacking configure directly :P . Gravatar Bram Matthys2009-11-291-1/+52
* - So called 'smart' banning is now disabled by default, this means you can••• now set a ban on *!*@*h.com and then later add one on *!*@*blah.com without any trouble. Previously the second one was rejected due to the former already matching it. To change it back edit the include/config.h setting SOCALLEDSMARTBANNING. Gravatar Bram Matthys2008-02-111-0/+4
* - ChanMode +S/+c: reverse is now stripped/blocked as well, because it's••• similar to color, and is just as annoying (..if not worse). Gravatar Bram Matthys2007-12-301-1/+1
* - Fixed bug in MODE #channel showing extended channel mode parameters when no...•••- Made 'MODE #channel b' and friends show bans to ircops even when not in channel. Gravatar Bram Matthys2006-08-291-10/+14
* +extern MODVAR char modebuf[BUFSIZE], parabuf[BUFSIZE];Gravatar Bram Matthys2006-05-211-1/+1
* - Added 'real' aliases, this are aliases that map to real commands, so you ca...••• map the command '/BLAH 5' to 'NICK idiot5'. More info in docs on alias block. - Modulized: badwords system (src/badwords.c is now gone) and StripColors/StripControlCodes to m_message, multiple netsynch routines to m_server, send_list to m_list, a certain mode routine to m_svsmode, all /MSG IRC.. webtv stuff to src/modules/webtv.c which is compiled with m_message. This means another ~1500 lines of code are now in modules (and thus can be upgraded on the fly), which brings the total of modulized lines at 32K. Gravatar Bram Matthys2006-05-211-779/+0
* - Made the IRCd calculate the cloaked host only once upon connect, and store ...•••- When checking if a user is banned, we always check the cloakhost too. Previously we could not do this if the user had a /VHOST (=a minority of the cases, but still...). In short, this is some extra protection to combat ban evasion. - Performance of is_banned() *slightly* improved (just 1-2 usec, but 7 usec if no bans). - [Module coders] For extban routines, we now offer a routine extban_is_banned_helper(buf) which can be used instead of the ban_realhost/etc static chars stuff, see extban_modeq_is_banned for a (real-life) example of how this is used. - [Services coders!] Added PROTOCTL CLK (requires NICKv2) which adds an extra field in the NICK command (when a user connects) right before the infofield (gecos). The added field contains the cloaked host, that is: the masked host if +x would have been set. This field is ALWAYS sent, regardless of whether the user is actually +x or not. Services can then store this field in memory, to know the host of the user if the user is set +x (+x-t). This is a (better) alternative to PROTOCTL VHP, with no race conditions, and avoids some other VHP problems. VHP will stay supported though... so it's not mandatory to switch over. Gravatar Bram Matthys2006-04-161-30/+39
* - Fixed bug in currently unused code, reported by DeadNotBuried (#0002835).•••- Modulized NAMES command (can now be upgraded on the fly, if ever needed). - Added NAMESX support, seeing both mIRC (5.17) and XChat support this. What this does is send all rights of all users on the channel in the NAMES reply (eg: @+Syzop if the user is +ov) instead of only the highest one (@Syzop in previous example). We only do so if the client explicitly requested this via a NAMESX in a PROTOCTL message (eg: 'PROTOCTL NAMESX'). Note that there is a glitch: since most clients only send the PROTOCTL NAMESX after they see NAMESX listed in the 005 announce message this has the effect that if there are set::auto-join channels present (where users are automatically joined to by the server) the extended NAMES reply will not be sent for those channels, because from the IRC server' point of view the join happened before the PROTOCTL and hence it does not know the client wanted NAMESX at that point (the result is not catastrophic: the old-style NAMES is sent for those channels). Anyway, for all non-autojoin channels this works great. So still worth adding IMO. Originally suggested in #0000606. Side note: this does not mean we dropped the idea of (also) having a challenge-response system for good ;). Gravatar Bram Matthys2006-02-261-129/+0
* - Made it so a set::maxbanlength and/or set::maxbans of 0 denies all bans pro...••• fixes the first-ban-can-be-as-long-as-you-want bug, both reported by Trocotronic (#2762). Gravatar Bram Matthys2006-01-241-0/+6
* - Made set::maxbanlength also count the "to be set" ban in, otherwise you cou...••• limit by (max) NICKLEN+USERNAME+HOSTNAME+2, reported by Trocotronic (#0002762). Gravatar Bram Matthys2006-01-231-1/+3
* - set::maxbans / set::maxbanlength were reported as duplicates when they were...••• by Jason and trystanscott (#0002753). - Made it so bans on normal users work with +mu, reported by Nazzy (?). Gravatar Bram Matthys2006-01-231-1/+1
* - Fixes for an amd64 crash problem, reported by Peter Laur (OpenBSD.se).•••- Redid some net synching code to make it more efficient (#2716). - Fixed spamfilter crash problem: the action 'viruschan' is now no longer incompatible with target 'user'. Reported by Monk (#0002570). Gravatar Bram Matthys2006-01-061-86/+105
* - Made it so you no longer can change your nick to a banned one in a channel,...••• by vonitsanet (#0002388), partial patch provided by Nazzy. This option can be turned off by setting set::check-target-nick-bans to 'no'. Gravatar Bram Matthys2005-11-101-11/+22
* - Fixed bug where chanmode +f #t (per-user text kick[ban]) was also affecting...••• reported by seneces (#0002333). - Fixed doc bug reported by Dukat (#0002374). Also fixed 2 error msgs related to the nickchars system printing out incorrect set:: directives. - spamfilter.conf and dccallow.conf are now also copied upon make install, reported by TommyTheKid (#0002313). Gravatar Bram Matthys2005-02-261-1/+5
* - Added channelmode +j (jointhrottle), syntax: /mode #chan +j X:Y, and then i...••• throttle the number of joins per-user to X in Y seconds. Idea from Angrywolf (who wrote a module that did this before). This might need some more testing :). It's enabled by default but can be #undef'ed in include/config.h (line 449). Gravatar Bram Matthys2005-02-121-0/+3
* Made channel mode +c block RGB color codes. Fixed a bug with channel alias{}'...Gravatar codemastr2005-02-061-3/+9
* - Made m_template.c use CommandAdd() and CMD_FUNC()•••- Modulized a lot of commands and related subfunctions: NICK (750 lines), USER (200), MODE (2300), WATCH (250), JOIN (600), PART (250), MOTD (100), OPERMOTD (100), BOTMOTD (100), LUSERS (100). More will follow soon (probably including more subfunctions related to existing commands). Gravatar Bram Matthys2005-02-031-2605/+1
* Added invite exceptions (+I)Gravatar codemastr2005-01-291-97/+162
* Moved channel mode +G to extcmode to make room for invexGravatar codemastr2005-01-231-7/+1
* Made it so +f notices are sent to %#chan, not @%#chanGravatar codemastr2005-01-171-1/+1
* Rewrote some of the previous change to deal with some strange issuesGravatar codemastr2004-11-261-10/+16
* If a user is +b on a channel, and set::allow-userhost-change force-rejoin is ...Gravatar codemastr2004-11-251-0/+9
* Using /invite with no parameters now lists the channels you are invited to bu...Gravatar codemastr2004-11-251-1/+1
* Removed an excess space from the SAMODE notice when a mode without a paramete...Gravatar codemastr2004-11-091-4/+4
* Made ./Config better handle command line arguments, Removed NAZIISH_CHBAN_HAN...Gravatar codemastr2004-11-061-5/+0
* Corrected numerous -Wall warningsGravatar codemastr2004-11-041-3/+3
* - Windows version can now hold ~4096 connections instead of ~1024•••- help.conf: clarified MKPASSWD documentation, reported by hypnetric (#0001926). - Some modeskip handling for future versions Gravatar Bram Matthys2004-10-131-7/+10
* - Module coders: Added HOOKTYPE_REMOTE_JOIN, HOOKTYPE_REMOTE_PART, HOOKTYPE_R...••• work just the same as the HOOKTYPE_LOCAL_* variants). - Module coders: HOOKTYPE_REMOTE_CONNECT is now also called during net-merge. You can use IsSynched(sptr->srvptr) to find out if it's called due to a net merge (0) or a connect (1). - Added spamfiler 'user' (u) target. This regex is checked against nick!user@host:realname when a user connects. This makes it easy to ban drones with simple patterns. For example: '/spamfilter add u gzline 86400 Drone[0-9]+!.+@.+:Drone[0-9]' would kill any drones that have both a nick and realname with 'Drone' followed by digits. Gravatar Bram Matthys2004-10-061-0/+4
* - Fixed a bug regarding chanmode +mu where the <IRC> messages were not proper...••• to all servers. Reported by Aenox (#0002079). Gravatar Bram Matthys2004-09-181-2/+1
* ...Gravatar codemastr2004-09-041-1/+0
* Fixed a few compile warnings, made +b apply to IPs correctlyGravatar codemastr2004-09-031-1/+2
* Made the new numerics use nicknamesGravatar codemastr2004-06-251-3/+9
* - Made IPv6 bans work the way they should again, reported by al5001 (#0001876).Gravatar Bram Matthys2004-06-251-1/+1
* Converted a bunch of notices to numericsGravatar codemastr2004-06-231-104/+47
* Added ELIST supportGravatar codemastr2004-06-211-32/+31
* - Made extbans desynchs a bit more friendly: if a bantype is unknown for the ...••• it will just accept it if it's from a remote server, and also ops/etc will be allowed to REMOVE any unknown extbans (but not add new unknown ones). - Added extended ban type ~n (nickchange ban), if a user matches this (s)he can not change nicks (eg: +b ~n:*!*@*.aol.com) unless (s)he has voice or higher. This can be useful as an overall measure for some +m chans (+b ~n:!*@*) or against specific 'good' people that are just nickflooding due to a wrongly configured script. - Added set::restrict-extendedbans by which you can disallow normal users to use any extendedbans ("*") or disallow only certain ones (eg: "qc"). - Made the negative TS message a bit more annoying if time is off more than 10 seconds. Gravatar Bram Matthys2004-06-121-5/+30
* - Added set::spamfilter::virus-help-channel-deny. This allows you to block any••• normal joins to the virus-help-channel. This way you could prevent users into accidental (or tricked) joining of the virus-help-channel and becomming infected. This feature is disabled by default. Requested by bleepy (#0001811). Gravatar Bram Matthys2004-05-181-1/+23
* - Changed the way MSG/NOTICE <prefix>#chan works:••• - It now goes to <prefix> and higher, so '/notice +#chan hi!' goes to +vhoaq - You need at least voice in order to be able to msg/notice +#chan, %#chan or @#chan - You need at least ops in order to be able to msg/notice &#chan or ~#chan - Any multi-prefix targets will be converted automatically (eg: ~&@#chan to @#chan). - internal: use of the CHANOPPFX macro is now deprecated. All of this was done to make it a bit more 'safe' and userfriendly (#0001812). Gravatar Bram Matthys2004-05-141-2/+2
* - Local opers can now also join +O (operonly) channels (#0001694).Gravatar Bram Matthys2004-05-141-23/+22
* Added module support for WindowsGravatar codemastr2004-05-121-3/+3
* - Fixed /who +m bug for opers, reported by Bugz (#0001715).•••- Fixed halfop mode code to not check remote halfop modes (desynch danger). Gravatar Bram Matthys2004-04-131-1/+2
* - Updated server<->server code for MODE so operoverride bug #0001704 and other••• feature requests can be fixed/added in the future (3.2.1). Gravatar Bram Matthys2004-04-131-6/+10
* Made set::modes-on-join work with extcmodesGravatar codemastr2004-03-101-1/+21
* Fixed a HOOKTYPE_PRE_LOCAL_JOIN bugGravatar codemastr2004-03-071-1/+1
* Redesigned HOOKTYPE_PRE_LOCAL_JOINGravatar codemastr2004-03-041-19/+20