1
0
mirror of https://github.com/unrealircd/unrealircd.git synced 2026-06-30 15:06:38 +02:00
Commit Graph

387 Commits

Author SHA1 Message Date
Bram Matthys dddc8f07e4 PROTOCTL EAUTH/SERVERS/new linking protocol:
- Server protocol: added PROTOCTL EATH=servername, which allows us to
  authenticate the server very early in the handshake process. That way,
  certain commands and PROTOCTL tokens can 'trust' the server.
  See doc/technical/protoctl.txt for details.
- Server protocol: between new Unreal servers we now do the handshake a
  little bit different, so it waits with sending the SERVER command until
  the first PROTOCTL is received. Needed for next.
- Server protocol: added PROTOCTL SERVERS=1,2,3,4,etc by which a server can
  inform the other server which servers (server numeric, actually) it has
  linked. See doc/technical/protoctl.txt and next for details.
- When our server was trying to link to some server, and at the same time
  another server was also trying to link with us, this would lead to a
  server collision: the server would link (twice) ok at first, but then a
  second later or so both would quit with 'Server Exists' with quite some
  mess as a result. This isn't unique to Unreal, btw.
  This happened more often when you had a low connfreq in your link blocks
  (aka: quick reconnects), or had multiple hubs on autoconnect (with same
  connfreq), or when you (re)started all servers at the same time.
  This should now be solved by a new server handshake design, which detects
  this race condition and solves it by closing one of the two (or more)
  connections to avoid the issue.
  This also means that it should now be safe to have multiple hubs with low
  connfreq's (eg: 10s) without risking that your network falls apart.
  This new server handshake (protocol updates, etc) was actually quite some
  work, especially for something that only happened sporadically. I felt it
  was needed though, because (re)linking stability is extremely important.
  This new feature/design/fix requires extensive testing.
  This feature can be disabled by: set { new-linking-protocol 0; };
2010-01-01 19:49:06 +00:00
Bram Matthys 7dee0cdcf1 - Added support for "chained" 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. 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 .
2009-11-29 12:46:29 +00:00
Bram Matthys 236808d8b4 - set::level-on-join now also supports voice, halfop, protect and owner.
Requested by katsklaw (#0003852). Partial patch provided by katsklaw and
  morpheus_pl.
2009-11-23 15:11:20 +00:00
Bram Matthys 9c234ffdf8 - Added special caching of remote includes. When a remote include fails to
load (for example when the webserver is down), then the most recent
  version of that remote include will be used, and the ircd will still boot
  and be able to rehash. Even though this is quite a simple feature, it
  can make a key difference when deciding to roll out remote includes on
  your network. Previously, servers would be unable to boot or rehash when
  the webserver was down, which would be a big problem (often unacceptable).
  The latest version of fetched urls are cached in the cache/ directory as
  cache/<md5 hash of url>.
  Obviously, if there's no 'latest version' and an url fails, the ircd will
  still not be able to boot. This would be the case if you added or changed
  the path of a remote include and it's trying to fetch it for the first time.
  To disable this new behavior, check out REMOTEINC_SPECIALCACHE in
  include/config.h.
2009-11-23 09:43:10 +00:00
Bram Matthys e92e2c22c3 - Applied patch from ohnobinki (#0003863) which makes run-time configuration
of files (tune, pid, motd) possible.
2009-11-22 12:23:00 +00:00
Bram Matthys 98db288079 - Added some big warnings regarding big timeshifts.
In the IRCd world correct time is very important. This means that time
  should be correct when the IRCd is booted, either by running ntpd/ntpdate
  on the system or some other synchronization software, or by using the
  built-in timesync feature.
  Whenever the clock is adjusted for more than a few seconds AFTER the IRCd
  has booted, it can lead to dangerous effects ranging from unfair
  timestamps
  for nicks and channels (and hence the possibility to takeover channels),
  to even completely stalling the IRCd (negative timeshift) or making it so
  nobody can connect anymore due to throttling (positive timeshift).
  We now try to 'fix' the worst effects such as the IRCd freeze and
  throttling. This does not fix the whole problem, so I've added some big
  warnings when the clock is adjusted, including an annoying one every 5
  minutes if the clock was set backwards, until the time is OK again
  (catches up with the original time).
  This fixes #0003230 reported by Stealth, and #0002521 reported by durrie.
2009-01-24 15:16:15 +00:00
Bram Matthys 635ab4858e - Backport from 3.3 away notification from Oct 2006, this is v0, a further
patch will follow soon and the numerics will be changed.
2008-02-29 13:58:59 +00:00
Bram Matthys 4f54a7e982 - Post-3.2.5 CVS-only bug: Fixed spamfilter on user target not working properly when
changing nicks (was still trying to match on the old nick), reported by vonitsanet
  (#0003143).
2006-12-12 17:25:19 +00:00
Bram Matthys 34e54c958b - /INVITE's from people on the silence list are now (silently) ignored, suggested by
White_Magic (#0002478).
2006-11-12 20:27:22 +00:00
Bram Matthys f33a2c0d06 - Fixed 'SVSMOTD !' not deleting the services motd in memory, reported by avb (#0003110). 2006-11-12 18:58:18 +00:00
Bram Matthys c4adb49bbb extern int file_exists(char* file); 2006-11-11 20:34:10 +00:00
Bram Matthys af598b644f - [internal] Made a spamfilter_build_user_string function that will build the spamfilter
user target string (nick!user@host:info), insteaf of doing it at like 5 places.
- Spamfilter target 'u' (user): the host field (nick!user@HOST:realname) is now escaped
  with brackets if it's an IPv6 address, eg: blah!blah@[1:2:3:4:5:6:7:8]:hello, reported
  by aquanight and others (#0003010).
2006-11-04 00:10:53 +00:00
Bram Matthys 262e2b2ca6 - Windows 2003: Fixed UnrealIRCd unable to boot if no DNS server is configured, we now
fallback to set::dns::nameserver in such a case. Thanks to Romeo (reporter, #0002802)
  and Bock for tracing this down.
2006-09-19 12:45:18 +00:00
Bram Matthys ac79932314 - Kick non-SSL users when the channel turns out to be +z during netmerge, reported by
Ron2K (#0002942).
(patch 90% by Trocotronic)
2006-09-15 12:29:01 +00:00
Bram Matthys fdb256ddcb NOTE: WIN32 DOES NOT COMPILE AT THE MOMENT 2006-05-21 23:32:57 +00:00
Bram Matthys 5757c1a50e +extern MODVAR char modebuf[BUFSIZE], parabuf[BUFSIZE]; 2006-05-21 23:26:12 +00:00
Bram Matthys fe4c8b4a83 - Added 'real' aliases, this are aliases that map to real commands, so you can for example
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.
2006-05-21 23:16:53 +00:00
Bram Matthys e265c08729 - Module coders: For cloaking, added a new callback type CALLBACKTYPE_CLOAK_EX (which replaces
CALLBACKTYPE_CLOAK). This passes 'aClient *sptr, char *host' instead of only 'char *host'
  to the cloaking module, which can be useful if you need to cloak on something other than
  IP/host. Suggested by fez (#0002275).
  Module may still provide only CALLBACKTYPE_CLOAK though, in fact this is what the official
  cloaking module does. So no updating of cloaking modules needed.
  A side-effect of this "extra cloaking" callback is that we needed to change make_virthost()
  which now has an extra parameter in front, and another side-effect is that calling the
  CALLBACKTYPE_CLOAK may not work since only *_EX might be available. To my knowledge there
  are very few modules (only 1 I know) that will have a problem due to this, so sounds like
  an affordable tradeoff.
2006-04-29 14:49:36 +00:00
Bram Matthys dabbe786be - Fixed Microsoft Visual Studio 2005 (8.x) unable to compile, and, after fixing that, causing
a lot of crashes. Both are now fixed. Reported by Zell, Yamake, and others (#2875, #2704).
  Fix provided by Xuefer. This also gets rid of some annoying and useless compile warnings
  as well.
2006-04-19 12:38:47 +00:00
Bram Matthys 8607d950b7 - Made the IRCd calculate the cloaked host only once upon connect, and store (cache) it.
- 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.
2006-04-16 23:27:56 +00:00
Bram Matthys 8ff913a2db - c-ares (currently, a forked off version) enhancements:
- '/quote dns i' now shows the nameserver settings (which is taken from /etc/resolv.conf
    on *NIX, and from the registry on Windows)
  - We no longer depend on a C++ compiler (was useless c-ares dependency caused by libtool)
  - '/REHASH -dns' now rereads the resolver data from resolv.conf/registry, no IRCd restart
    needed anymore. It's currently kinda experimental however, but I *think* it will work ok.
  Unfortunately the above features required some ugly hacks if curl was enabled, so if you
  use curl (Remote includes), feel free to test on your OS (Linux, but especially FreeBSD
  and the other *NIXes) to see if things still compile (make clean; ./Config && make).
2006-04-11 22:00:01 +00:00
Bram Matthys 54c2296dae - CGI:IRC: gzlines, zlines, throttling, and unknown connect floods are now all checked for
clients connecting trough a CGI:IRC gateway that is in cgiirc { }. This might also fix a bug
  where (g)zlines were not applied to CGI:IRC clients, reported by devil (#0002850).
2006-03-14 19:47:08 +00:00
Bram Matthys fd5c1f778f - 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 ;).
2006-02-26 01:06:10 +00:00
Bram Matthys 07ccc74036 - Redid whole CGI:IRC support. Configuration is now moved to cgiirc { } blocks.
We now support the webirc ('webirc_password' in CGI:IRC) method, which is kinda superior
  to the older method ('realhost_as_password').
  See the Unreal documentation (section '4.36 - Cgiirc Block') for details on how to configure.
- Changed quoting color in unreal32docs.. looks better now IMO (only English docs updated).
2006-02-16 15:32:16 +00:00
Bram Matthys 99b6f2ea38 - Added CGI:IRC host spoofing support. This means you can mark specific CGI:IRC gateways as
"trusted" and the IRCd will show the users' _real_ host/ip everywhere on IRC, instead of the
  _CGI:IRC-gateway_ host/ip.
  To do so you must set 'realhost_as_password' to 1 in your cgiirc.conf. And add the
  CGI:IRC gateway(s) you fully trust to set::cgiirc::hosts.
2006-02-14 16:58:43 +00:00
Bram Matthys dc19350c70 - Redid glob matching. Escaping is now ripped out for normal bans (as it should be), this
means no longer weird issues with +b *\* etc not banning nicks with \ in it.
  ExtBan ~c/~r get special treatment and will use our match_esc [match with escaping]
  routine, that way you can ban channels such as "#f*ck" via "+b ~c:#f\*ck".
  Fix triggered by bugreport of vonitsanet (#0002782).
2006-01-30 20:14:39 +00:00
Bram Matthys f56080324a - Added new charsys languages: belarussian-w1251 and ukrainian-w1251. Patch provided
by Bock (#0002724).
- Fixed memory leak in new resolver.
2006-01-14 00:01:42 +00:00
Bram Matthys 364bf0f605 - 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).
2006-01-06 19:53:41 +00:00
Bram Matthys a7e3aa01b7 - Made it so you no longer can change your nick to a banned one in a channel, suggested
by vonitsanet (#0002388), partial patch provided by Nazzy.
  This option can be turned off by setting set::check-target-nick-bans to 'no'.
2005-11-10 23:39:12 +00:00
Bram Matthys 35a8c00214 - When OPEROVERRIDE_VERIFY is enabled, we now allow opers to still join any channels listed
in set::auto-join or set::oper-auto-join, even if they are +s/+p. Suggested by ultrotter
  (#0002644).
2005-10-15 23:26:57 +00:00
Bram Matthys eddb406807 - Removed all old resolver code and switched over to c-ares (+our caching routines).
This should get rid of some annoying untracable (and usually rare) crashbugs in the
  old resolver. Besides that, it makes things look more clean and understandable.
  This should be the fix for the following bugids (all the same issue): #2499, #2551, #2558,
  #2559, #2603, #2642, #2502, #2501, #2618, #2616.
  Feedback and testing is very much welcomed (syzop@unrealircd.com).
2005-10-10 14:32:12 +00:00
Bram Matthys f535167cf9 - Added 'warn' target which is basically the same as 'block' except it does not block ;).
It also sends a numeric to the user saying the command has been processed, but a copy
  has been sent to ircops. I feel this is a good idea for privacy reasons (anti-spy),
  though I don't know how users will react to this. If you are using this on your network
  and get users bothering you about it (or before that ;p), it's probably a good idea
  to explain it somewhere on your site or FAQ :).
  Example usage:
   /spamfilter add p warn - Testing_mirc_decode_filter \$decode\(.*\)
  [WARNING] The numeric text is likely to change in the next few weeks (early-cvs-commit).
- If a class block was removed and any other blocks would be referencing the class block
  (such as: allow::class, oper::class, link::class), then this would cause a crash.
  Reported by Mike_ (#0002646).
2005-09-25 21:49:19 +00:00
Bram Matthys 4f40d73aa4 - Moved all TKL code and register_user to modules (using efuncs), that means 20 functions
and 2000 lines total that can be hotfixed if needed ;). The effort involved in moving all
  this sucks a lot though :/. This might need some more testing to make sure it doesn't break
  anything.
- Updated support OS list in documentation.
2005-06-05 00:58:36 +00:00
Bram Matthys 2c500fcf72 nickchars...
- Build in some additional checks (especially for Chinese).
  - Fixed a bug in chinese character range (affecting 3.2*)
  - Relaxed nick character checking from remote servers (rely on NICKCHARS= PROTOCTL
    to deal with problems). This is useful to prevent any kills in case we slightly
    change the characters that are allowed in a language.
2005-02-22 16:47:20 +00:00
Bram Matthys 97d4be791b - Added NICKCHARS= in PROTOCTL. This indicates which languages are accepted in nicks.
If 2 servers try to link and the allowed nick characters do not fully match, then
  the link will be rejected. Note that this will not prevent you from 3.2.2<->3.2.3/CVS
  charsets mistakes, but only with linking CVS/3.2.3+ servers. Suggested by Troco (#0002360)
  This might need some additional testing, but initial results are positive :).
2005-02-20 22:05:06 +00:00
Bram Matthys 8650c97cd3 - No longer cutoff nick upon illegal character -- just reject the whole nick. The nick is
still cutoff if the nick is too long. Basically this is the same way as Hybrid does it
  so it should work ok :).
- Added nick character system. This allows you to choose which (additional) characters
  to allow in nicks via set::allowed-nickchars. See unreal32docs.html -> section 3.16
  for a list of available languages and more info on how to use it.
  Current list: dutch, french, german, italian, spanish, euro-west, chinese-trad,
  chinese-simp, chinese-ja, chinese.
  If you wonder why your language is not yet included or why a certain mistake is present,
  then please understand that we are most likely not experienced (at all) in your language.
  If you are a native of your language (or know the language well), and your language
  is not included yet or you have some corrections, then contact syzop@vulnscan.org or
  report it as a bug on http://bugs.unrealircd.org/
2005-02-19 20:47:41 +00:00
Bram Matthys d3a0bb92f6 - Added channelmode +j (jointhrottle), syntax: /mode #chan +j X:Y, and then it will
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).
2005-02-12 00:05:08 +00:00
Bram Matthys 432e3a3a6c - Win32 crash fixes due to modulizing 2005-02-04 20:03:46 +00:00
Bram Matthys 8eb88be500 - Made unreal_copyfile try hardlinking first, if that fails.. it will try to copy
(perhaps this should be a different function?). Anyway, this means less diskspace
  is needed (~1.5mb or more), and it also makes it a bit easier for RBAC (#2300).
- Made a new function DoMD5() which is ssl/non-ssl independent. Also made the cloaking
  module and the auth functions use it. Hopefully I didn't break anything ;). Suggested
  by Bugz (#2298).
2005-02-04 00:26:37 +00:00
Bram Matthys bcfc9b85fb dumdeedum.. modulized fixes (timespan <2d) 2005-02-03 17:11:12 +00:00
Bram Matthys 6508c962f8 - 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).
2005-02-03 00:38:40 +00:00
Bram Matthys a557bc50d7 - Added debug code to trace proto-check bugs in DEBUGMODE [IsToken() etc]
- [Module coders] Added new function: do_cmd(cptr, sptr, cmd, parc, parv) which is an
  uniform method to call any other commands. For more info, see description in src/parcket.c.
  This will be used for any further modulization of commands that need to call other
  commands, like NICK (will be done soon).
2005-01-25 23:31:07 +00:00
codemastr 232b172256 Moved channel mode +G to extcmode to make room for invex 2005-01-23 21:45:49 +00:00
Bram Matthys a76e4d4712 - Module coders: sendto_snomask* now only sends to opers, sendto_snomask_normal* can be used
to send to normal users w/the snomask set.
- Fixed dcc filtering a bit more.
- Made usermode 'g' operonly since it didn't do much, reported by DukePyrolator (#0002024).
2004-12-03 22:00:09 +00:00
Bram Matthys 4284c39307 - OperOverride INVITE notices are now also global (if you have the eyes snomask set) (#2212).
- Module coders: New function: sendto_snomask_global().
- Speedup sendto_snomask/sendto_connectnotice/sendto_fconnectnotice code.
2004-12-03 03:32:32 +00:00
codemastr 191127296a Rewrote some of the previous change to deal with some strange issues 2004-11-26 22:14:30 +00:00
codemastr c52dff2da7 Fixed a bug with /rehash and classes due to the config parser rewrite and Modified the module symbol dependency code to do more accurate searching for the module hat contains the necessary symbol 2004-11-05 20:23:59 +00:00
Bram Matthys fae77f21ec - Module coders: Added HOOKTYPE_REMOTE_JOIN, HOOKTYPE_REMOTE_PART, HOOKTYPE_REMOTE_KICK (all
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.
2004-10-06 20:33:13 +00:00
codemastr 23ee49f602 Exported the isupport functions for use in Windows modules. Added a new snomask, +o to show oper-up notices (oper only) 2004-09-04 17:05:25 +00:00
Bram Matthys 1bd085164b - Fixed possible crash id /rehash'ing and a servername was just resolving (due to
/connect or autoconnect) and was not present in the cache. Reported and traced by sh0
  (#0001976).
- Fixed compile bug at *NIX caused by ModuleGetErrorStr fix.
2004-07-22 21:57:44 +00:00