unrealircd- supernets unrealircd source & configuration |
git clone git://git.acid.vegas/unrealircd.git |
Log | Files | Refs | Archive | README | LICENSE |
RELEASE-NOTES.md (53977B)
1 UnrealIRCd 6.1.0 2 ================= 3 This is UnrealIRCd 6.1.0 stable. It is the direct successor to 6.0.7, there 4 will be no 6.0.8. 5 6 This release contains several channel mode `+f` enhancements and introduces a 7 new channel mode `+F` which works with flood profiles like `+F normal` and 8 `+F strict`. It is much easier for users than the scary looking mode +f. 9 10 UnrealIRCd 6.1.0 also contains lots of JSON-RPC improvements, which is used 11 by the [UnrealIRCd admin panel](https://www.unrealircd.org/docs/UnrealIRCd_webpanel). 12 Live streaming of logs has been added and the webpanel now communicates to 13 UnrealIRCd which web user issued a command (eg: who issued a kill, who 14 changed a channel mode, ..). 15 16 Other improvements are whowasdb (persistent WHOWAS history) and a new guide 17 on running a Tor Onion service. The release also fixes a crash bug related 18 to remote includes and fixes multiple memory leaks. 19 20 See the full release notes below. As usual on *NIX you can upgrade easily 21 with the command: `./unrealircd upgrade` 22 23 ### Enhancements: 24 * Channel flood protection improvements: 25 * New [channel mode `+F`](https://www.unrealircd.org/docs/Channel_anti-flood_settings) 26 (uppercase F). This allows the user to choose a "flood profile", 27 which (behind the scenes) translates to something similar to an `+f` mode. 28 This so end-users can simply choose an `+F` profile without having to learn 29 the complex channel mode `+f`. 30 * For example `+F normal` effectively results in 31 `[7c#C15,30j#R10,10k#K15,40m#M10,8n#N15]:15` 32 * Multiple profiles are available and changing them is possible, 33 see [the documentation](https://www.unrealircd.org/docs/Channel_anti-flood_settings). 34 * Any settings in mode `+f` will override the ones of the `+F` profile. 35 To see the effective flood settings, use `MODE #channel F`. 36 * You can optionally set a default profile via 37 [set::anti-flood::channel::default-profile](https://www.unrealircd.org/docs/Channel_anti-flood_settings#Default_profile). 38 This profile is used if the channel is `-F`. If the user does not 39 want channel flood protection then they have to use an explicit `+F off`. 40 * When channel mode `+f` or `+F` detect that a flood is caused by >75% of 41 ["unknown-users"](https://www.unrealircd.org/docs/Security-group_block), 42 the server will now set a temporary ban on `~security-group:unknown-users`. 43 It will still set `+i` and other modes if the flood keeps on going 44 (eg. is caused by known-users). 45 * Forced nick changes (eg. by NickServ) are no longer counted in nick flood 46 for channel mode `+f`/`+F`. 47 * When a server splits on the network, we now temporarily disable +f/+F 48 join-flood protection for 75 seconds 49 ([set::anti-flood::channel::split-delay](https://www.unrealircd.org/docs/Channel_anti-flood_settings#config)). 50 This because a server splitting could mean that server has network problems 51 or has died (or restarted), in which case the clients would typically 52 reconnect to the remaining other servers, triggering an +f/+F join-flood and 53 channels ending up being `+i` and such. That is not good because we want 54 +f/+F to be as effortless as possible, with as little false positives as 55 possible. 56 * If your network has 5+ servers and the user load is spread evenly among 57 them, then you could disable this feature by setting the amount of seconds 58 to `0`. This because in such a scenario only 1/5th (20%) of the users 59 would reconnect and hopefully don't trigger +f/+F join floods. 60 * All these features only work properly if all servers are on 6.1.0-rc1 or later. 61 * New module `whowasdb` (persistent `WHOWAS` history): this saves the WHOWAS 62 history on disk periodically and when we terminate, so next server boot 63 still has the WHOWAS history. This module is currently not loaded by default. 64 * New option [listen::spoof-ip](https://www.unrealircd.org/docs/Listen_block#spoof-ip), 65 only valid when using UNIX domain sockets (so listen::file). 66 This way you can override the IP address that users come online with when 67 they use the socket (default was and still is `127.0.0.1`). 68 * Add a new guide [Running Tor Onion service with UnrealIRCd](https://www.unrealircd.org/docs/Running_Tor_Onion_service_with_UnrealIRCd) 69 which uses the new listen::spoof-ip and optionally requires a services account. 70 * [JSON-RPC](https://www.unrealircd.org/docs/JSON-RPC): 71 * Logging of JSON-RPC requests (eg. via snomask `+R`) has been improved, 72 it now shows: 73 * The issuer, such as the user logged in to the admin panel (if known) 74 * The parameters of the request 75 * The JSON-RPC calls 76 [`channel.list`](https://www.unrealircd.org/docs/JSON-RPC:Channel#channel.list), 77 [`channel.get`](https://www.unrealircd.org/docs/JSON-RPC:Channel#channel.get), 78 [`user.list`](https://www.unrealircd.org/docs/JSON-RPC:User#user.list) and 79 [`user.get`](https://www.unrealircd.org/docs/JSON-RPC:User#user.get) 80 now support an optional argument `object_detail_level` which specifies how detailed 81 the [Channel](https://www.unrealircd.org/docs/JSON-RPC:Channel#Structure_of_a_channel) 82 and [User](https://www.unrealircd.org/docs/JSON-RPC:User#Structure_of_a_client_object) 83 response object will be. Especially useful if you don't need all the 84 details in the list calls. 85 * New JSON-RPC methods 86 [`log.subscribe`](https://www.unrealircd.org/docs/JSON-RPC:Log#log.subscribe) and 87 [`log.unsubscribe`](https://www.unrealircd.org/docs/JSON-RPC:Log#log.unsubscribe) 88 to allow real-time streaming of 89 [JSON log events](https://www.unrealircd.org/docs/JSON_logging). 90 * New JSON-RPC method 91 [`rpc.set_issuer`](https://www.unrealircd.org/docs/JSON-RPC:Rpc#rpc.set_issuer) 92 to indiciate who is actually issuing the requests. The admin panel uses this 93 to communicate who is logged in to the panel so this info can be used in logging. 94 * New JSON-RPC methods 95 [`rpc.add_timer`](https://www.unrealircd.org/docs/JSON-RPC:Rpc#rpc.add_timer) and 96 [`rpc.del_timer`](https://www.unrealircd.org/docs/JSON-RPC:Rpc#rpc.del_timer) 97 so you can schedule JSON-RPC calls, like stats.get, to be executed every xyz msec. 98 * New JSON-RPC method 99 [`whowas.get`](https://www.unrealircd.org/docs/JSON-RPC:Whowas#whowas.get) 100 to fetch WHOWAS history. 101 * Low ASCII is no longer filtered out in strings in JSON-RPC, only in JSON logging. 102 * A new message tag `unrealircd.org/issued-by` which is IRCOp-only (and 103 used intra-server) to communicate who actually issued a command. 104 See [docs](https://www.unrealircd.org/issued-by). 105 106 ### Changes: 107 * The RPC modules are enabled by default now. This so remote RPC works 108 from other IRC servers for calls like `modules.list`. The default 109 configuration does NOT enable the webserver nor does it cause 110 listening on any socket for RPC, for that you need to follow the 111 [JSON-RPC](https://www.unrealircd.org/docs/JSON-RPC) instructions. 112 * The [blacklist-module](https://www.unrealircd.org/docs/Blacklist-module_directive) 113 directive now accepts wildcards, eg `blacklist-module rpc/*;` 114 * The setting set::modef-boot-delay has been moved to 115 [set::anti-flood::channel::boot-delay](https://www.unrealircd.org/docs/Channel_anti-flood_settings#config). 116 * We now only exempt `127.0.0.1` and `::1` from banning by default 117 (hardcoded in the source). Previously we exempted whole `127.*` but 118 that gets in the way if you want to allow Tor with a 119 [require authentication](https://www.unrealircd.org/docs/Require_authentication_block) 120 block or soft-ban. Now you can just tell Tor to bind to `127.0.0.2` 121 so its not affected by the default exemption. 122 123 ### Fixes: 124 * Crash if there is a parse error in an included file and there are 125 other remote included files still being downloaded. 126 * Memory leak in WHOWAS 127 * Memory leak when connecting to a TLS server fails 128 * Workaround a bug in some websocket implementations where the WSOP_PONG 129 frame is unmasked (now permitted). 130 131 ### Developers and protocol: 132 * The `cmode.free_param` definition changed. It now has an extra argument 133 `int soft` and for return value you will normally `return 0` here. 134 You can `return 1` if you resist freeing, which is rare and only used by 135 `+F` with set::anti-flood::channel::default-profile. 136 * New `cmode.flood_type_action` which can be used to indicate a channel mode 137 can be used from +f/+F as an action. You need to specify for which 138 flood type your mode is, eg `cmode.flood_type_action = 'j';` for joinflood. 139 * JSON-RPC supports 140 [UNIX domain sockets](https://www.unrealircd.org/docs/JSON-RPC:Technical_documentation#UNIX_domain_socket) 141 for making RPC calls. If this is used, we now split on `\n` (newline) 142 so multiple parallel requests can be handled properly. 143 * Message tag `unrealircd.org/issued-by`, sent to IRCOps only. 144 See [docs](https://www.unrealircd.org/issued-by). 145 146 UnrealIRCd 6.0.7 147 ----------------- 148 149 UnrealIRCd 6.0.7 makes WHOWAS show more information to IRCOps and adds an 150 experimental spamfilter feature. It also contains other enhancements and 151 quite a number of bug fixes. One notable change is that on linking of anope 152 or atheme, every server will now check if they have ulines { } for that 153 services server, since it's a common mistake to forget this, leading to 154 desyncs or other weird problems. 155 156 ### Enhancements: 157 * [Spamfilter](https://www.unrealircd.org/docs/Spamfilter) can now be made UTF8-aware: 158 * This is experimental, to enable: `set { spamfilter { utf8 yes; } }` 159 * Case insensitive matches will then work better. For example, for extended 160 Latin, a spamfilter on `ę` then also matches `Ę`. 161 * Other PCRE2 features such as [\p](https://www.pcre.org/current/doc/html/pcre2syntax.html#SEC5) 162 can then be used. For example the regex `\p{Arabic}` would block all Arabic script. 163 See also this [full list of scripts](https://www.pcre.org/current/doc/html/pcre2syntax.html#SEC7). 164 Please use this new tool with care. Blocking an entire language or script 165 is quite a drastic measure. 166 * As a consequence of this we require PCRE2 10.36 or newer. If your system 167 PCRE2 is older, then the UnrealIRCd-shipped-library version will be compiled 168 and `./Config` may take a little longer than usual. 169 * `WHOWAS` now shows IP address and account information to IRCOps 170 * Allow services to send a couple of protocol messages in the 171 unregistered / SASL stage. These are: `CHGHOST`, `CHGIDENT` 172 and `SREPLY` 173 * This allows services to set the vhost on a user during SASL, 174 so the user receives the vhost straight from the start, before 175 all the auto-joining/re-rejoining of channels. 176 * Future anope/atheme/etc services will presumably support this. 177 * [WebSocket](https://www.unrealircd.org/docs/WebSocket_support) status is 178 now synced over the network and an extra default 179 [security group](https://www.unrealircd.org/docs/Security-group_block) 180 `websocket-users` has been added. Similarly there is now 181 security-group::websocket and security-group::exclude-websocket item. 182 Same for [mask items](https://www.unrealircd.org/docs/Mask_item) such 183 as in [set::restrict-commands::command::except](https://www.unrealircd.org/docs/Restrict_commands). 184 * Support for IRCv3 [Standard Replies](https://ircv3.net/specs/extensions/standard-replies). 185 Right now nothing fancy yet, other than us sending `ACCOUNT_REQUIRED_TO_CONNECT` 186 from the authprompt module when a user is 187 [soft-banned](https://www.unrealircd.org/docs/Soft_ban). 188 * Add support for sending IRCv3 Standard Replies intra-server, eg 189 from services (`SREPLY` server-to-server command) 190 * Support `NO_COLOR` environment variable, as per [no-color.org](https://no-color.org). 191 192 ### Changes: 193 * We now verify that all servers have 194 [ulines { }](https://www.unrealircd.org/docs/Ulines_block) for Anope and 195 Atheme servers and reject the link if this is not the case. 196 * The `FLOOD_BLOCKED` log message now shows the target of the flood 197 for `target-flood-user` and `target-flood-channel`. 198 * When an IRCOp sets `+H` to hide ircop status, only the swhois items that 199 were added through oper will be hidden (and not the ones added by eg. vhost). 200 Previously all were hidden. 201 * Update shipped libraries: c-ares to 1.19.0, Jansson to 2.14, PCRE2 to 10.42, 202 and on Windows LibreSSL to 3.6.2 and cURL to 8.0.1. 203 204 ### Fixes: 205 * Crash if a third party module is loaded which allows very large message tags 206 (e.g. has no length check) 207 * Crash if an IRCOp uses 208 [`unrealircd.org/json-log`](https://www.unrealircd.org/docs/JSON_logging#Enabling_on_IRC) 209 on IRC and during `REHASH` some module sends log output during MOD_INIT 210 (eg. with some 3rd party modules) 211 * Crash when parsing [deny link block](https://www.unrealircd.org/docs/Deny_link_block) 212 * The [Module manager](https://www.unrealircd.org/docs/Module_manager) 213 now works on FreeBSD and similar. 214 * In `LUSERS` the "unknown connection(s)" count was wrong. This was just a 215 harmless counting error with no other effects. 216 * Silence warnings on Clang 15+ (eg. Ubuntu 23.04) 217 * Don't download `GeoIP.dat` if you have 218 [`blacklist-module geoip_classic;`](https://www.unrealircd.org/docs/Blacklist-module_directive) 219 * Channel mode `+S` stripping too much on incorrect color codes. 220 * Make [`@if module-loaded()`](https://www.unrealircd.org/docs/Defines_and_conditional_config) 221 work correctly for modules that are about to be unloaded during REHASH. 222 * Some missing notices if remotely REHASHing a server, and one duplicate line. 223 * Check invalid host setting in oper::vhost, just like we already have in vhost::vhost. 224 225 UnrealIRCd 6.0.6 226 ----------------- 227 228 The main objective of this release is to enhance the new JSON-RPC functionality. 229 In 6.0.5 we made a start and in 6.0.6 it is expanded a lot, plus some important 230 bugs were fixed in it. Thanks everyone who has been testing the functionality! 231 232 The new [UnrealIRCd Administration Webpanel](https://github.com/unrealircd/unrealircd-webpanel/) 233 (which uses JSON-RPC) is very much usable now. It allows admins to view the 234 users/channels/servers lists, view detailed information on users and channels, 235 manage server bans and spamfilters, all from the browser. 236 237 Both the JSON-RPC API and the webpanel are work in progress. They will improve 238 and expand with more features over time. 239 240 If you are already using UnrealIRCd 6.0.5 and you are NOT interested in 241 JSON-RPC or the webpanel then there is NO reason to upgrade to 6.0.6. 242 243 As usual, on *NIX you can easily upgrade with `./unrealircd upgrade` 244 245 ### Enhancements: 246 * The [JSON-RPC](https://www.unrealircd.org/docs/JSON-RPC) API for 247 UnrealIRCd has been expanded a lot. From 12 API methods to 42: 248 `stats.get`, `rpc.info`, `user.part`, 249 `user.join`, `user.quit`, `user.kill`, 250 `user.set_oper`, `user.set_snomask`, `user.set_mode`, 251 `user.set_vhost`, `user.set_realname`, 252 `user.set_username`, `user.set_nick`, `user.get`, 253 `user.list`, `server.module_list`, `server.disconnect`, 254 `server.connect`, `server.rehash`, `server.get`, 255 `server.list`, `channel.kick`, `channel.set_topic`, 256 `channel.set_mode`, `channel.get`, `channel.list`, 257 `server_ban.add`, `server_ban.del`, `server_ban.get`, 258 `server_ban.list`, `server_ban_exception.add`, 259 `server_ban_exception.del`, `server_ban_exception.get`, 260 `server_ban_exception.list`, `name_ban.add`, 261 `name_ban.del`, `name_ban.get`, `name_ban.list`, 262 `spamfilter.add`, `spamfilter.del`, `spamfilter.get`, 263 `spamfilter.list`. 264 * Server admins can read the [JSON-RPC](https://www.unrealircd.org/docs/JSON-RPC) 265 documentation on how to get started. For developers, see the 266 [Technical documentation](https://www.unrealircd.org/docs/JSON-RPC:Technical_documentation) 267 for all info on the different RPC calls and the protocol. 268 * Some functionality requires all servers to be on 6.0.6 or later. 269 * Some functionality requires all servers to include 270 `rpc.modules.default.conf` instead of only the single server that 271 the webpanel interfaces with through JSON-RPC. 272 When all servers have that file included then the API call 273 `server.module_list` can work for remote servers, and the API call 274 `server.rehash` for remote servers can return the actual rehash result 275 and a full log of the rehash process. It is not used for any other 276 API call at the moment, but in the future more API calls may need this 277 functionality because it allows us to do things that are otherwise impossible 278 or very hard. 279 * Known issue: logging of RPC actions needs to be improved. For some API calls, 280 like adding of server bans and spamfilters, this already works, but in 281 other API calls it is not clearly logged yet "who did what". 282 283 ### Changes: 284 * Previously some server protocol commands could only be used by 285 services, commands such as `SVSJOIN` and `SVSPART`. We now allow SVS* 286 command to be used by any servers, so the JSON-RPC API can use them. 287 There's a new option 288 [set::limit-svscmds](https://www.unrealircd.org/docs/Set_block#set::limit-svscmds) 289 so one can revert back to the original situation, if needed. 290 * All JSON-RPC calls that don't change anything, such as `user.list` 291 are now logged in the `rpc.debug` facility. Any call that changes 292 anything like `user.join` or `spamfilter.add` is logged via `rpc.info`. 293 This because JSON-RPC calls can be quite noisy and logging the 294 read-only calls is generally not so interesting. 295 296 ### Fixes: 297 * When using JSON-RPC with UnrealIRCd 6.0.5 it would often crash 298 * Fix parsing services version (anope) in `EAUTH`. 299 300 ### Developers and protocol: 301 * A new `RRPC` server to server command to handle RPC-over-IRC. 302 This way the JSON-RPC user, like the admin panel, can interface with 303 a remote server. If you are writing an RPC handler, then the remote 304 RPC request does not look much different than a local one, so you 305 can just process it as usual. See the code for `server.rehash` or 306 `server.module_list` for an example (src/modules/rpc/server.c). 307 308 UnrealIRCd 6.0.5 309 ----------------- 310 311 This release adds experimental JSON-RPC support, a new TLINE command, the 312 `./unrealircd restart` command has been improved to check for config errors, 313 logging to files has been improved and there are several other enhancements. 314 315 There are also two important changes: 1) servers that use websockets now also 316 need to load the "webserver" module (so you may need to edit your config 317 file). 2) we now require TLSv1.2 or higher and a modern cipher for IRC clients. 318 This should be no problem for clients using any reasonably new SSL/TLS library 319 (from 2014 or later). 320 321 I would also like to take this opportunity to say that we are 322 [looking for webdevs to create an UnrealIRCd admin panel](https://forums.unrealircd.org/viewtopic.php?t=9257). 323 The previous attempt at this failed so we are looking for new people. 324 325 See the full release notes below for all changes in more detail. 326 327 As usual, on *NIX you can easily upgrade with `./unrealircd upgrade` 328 329 ### Enhancements: 330 * Internally the websocket module has been split up into 3 modules: 331 `websocket_common`, `webserver` and `websocket`. The `websocket_common` one 332 is loaded by default via modules.default.conf, the other two are not. 333 **Important:** if you use websockets then you need to load two modules now (instead of only one): 334 ``` 335 loadmodule "websocket"; 336 loadmodule "webserver"; 337 ``` 338 * [JSON-RPC](https://www.unrealircd.org/docs/JSON-RPC) API for UnrealIRCd. 339 This is work in progress. 340 * New `TLINE` command to test *LINEs. This can be especially useful for 341 checking how many people match an [extended server ban](https://www.unrealircd.org/docs/Extended_server_bans) 342 such as `TLINE ~C:NL` 343 * The `./unrealircd start` command will now refuse to start if UnrealIRCd 344 is already running. 345 * The `./unrealircd restart` command will validate the configuration file 346 (it will call `./unrealircd configtest`). If there is a configuration 347 error then the restart will not go through and the current UnrealIRCd 348 process is kept running. 349 * When an IRCOp is outside the channel and does `MODE #channel` they will 350 now get to see the mode parameters too. This depends on the `channel:see:mode:remote` 351 [operclass permission](https://www.unrealircd.org/docs/Operclass_permissions) 352 which all IRCOps have by default if you use the default operclasses. 353 * [Logging to a file](https://www.unrealircd.org/docs/Log_block) now creates 354 a directory structure if needed. 355 * You could already use: 356 ``` 357 log { source { !debug; all; } destination { file "ircd.%Y-%m-%d.log"; } } 358 ``` 359 * But now you can also use: 360 ``` 361 log { source { !debug; all; } destination { file "%Y-%m-%d/ircd.log"; } } 362 ``` 363 This is especially useful if you output to multiple log files and then 364 want them grouped by date in a directory. 365 * Add additional variables in 366 [blacklist::reason](https://www.unrealircd.org/docs/Blacklist_block): 367 * `$blacklist`: name of the blacklist block 368 * `$dnsname`: the blacklist::dns::name 369 * `$dnsreply`: the DNS reply code 370 * Resolved technical issue so opers can `REHASH` from 371 [Websocket connections](https://www.unrealircd.org/docs/WebSocket_support). 372 * In the [TLD block](https://www.unrealircd.org/docs/Tld_block) the use 373 of `tld::motd` and `tld::rules` is now optional. 374 * Log which oper actually initiated a server link request (`CONNECT`) 375 376 ### Changes: 377 * SSL/TLS: By default we now require TLSv1.2 or later and a modern cipher 378 with forward secrecy. Otherwise the connection is refused. 379 * Since UnrealIRCd 4.2.2 (March 2019) users see an on-connect notice with 380 a warning when they use an outdated TLS protocol or cipher that does not 381 meet these requirements. 382 * This move also reflects the phase out of versions below TLSv1.2 which 383 happened in browsers in 2020/2021. 384 * In practice on the client-side this requires at least: 385 * OpenSSL 1.0.1 (released in 2012) 386 * GnuTLS 3.2.6 (2013) 387 * Android 4.4.2 (2013) 388 * Or presumably any other SSL/TLS library that is not 9+ years old 389 * If you want to revert back to the previous less secure settings, then 390 look under ''Previous less secure setting'' in 391 [TLS Ciphers and protocols](https://www.unrealircd.org/docs/TLS_Ciphers_and_protocols). 392 * The code for handling 393 [`set::anti-flood::everyone::connect-flood`](https://www.unrealircd.org/docs/Anti-flood_settings#connect-flood) 394 is now in its own module `connect-flood`. This module is loaded by default, 395 no changes needed in your configuration file. 396 * Similarly, 397 [`set:max-unknown-connections-per-ip`](https://www.unrealircd.org/docs/Set_block#set::max-unknown-connections-per-ip) 398 is now handled by the new module `max-unknown-connections-per-ip`. This module is loaded 399 by default as well, no changes needed in your configuration file. 400 * Upgrade shipped PCRE2 to 10.41, curl-ca-bundle to 2022-10-11, 401 on Windows LibreSSL to 3.6.1 and cURL to 7.86.0. 402 * After people do a major upgrade on their Linux distro, UnrealIRCd may 403 no longer start due to an `error while loading shared libraries`. 404 We now print a more helpful message and link to the new 405 [FAQ entry](https://www.unrealircd.org/docs/FAQ#shared-library-error) 406 about it. 407 * When timing out on the [authprompt](https://www.unrealircd.org/docs/Set_block#set::authentication-prompt) 408 module, the error (quit message) is now the original (ban) reason for the 409 prompt, instead of the generic `Registration timeout`. 410 411 ### Fixes: 412 * Crash when linking. This requires a certain sequence of events: first 413 a server is linked in successfully, then we need to REHASH, and then a new 414 link attempt has to come in with the same server name (for example because 415 there is a network issue and the old link has not timed out yet). 416 If all that happens, then an UnreaIRCd 6 server may crash, but not always. 417 * Warning message about moddata creationtime when linking. 418 * [Snomask `+j`](https://www.unrealircd.org/docs/Snomasks) was not showing 419 remote joins, even though it did show remote parts and kicks. 420 * Leak of 1 file descriptor per /REHASH (the control socket). 421 * Ban letters showing up twice in 005 EXTBAN= 422 * Setting [set::authentication-prompt::enabled](https://www.unrealircd.org/docs/Set_block#set::authentication-prompt) 423 to `no` was ignored. The default is still `yes`. 424 425 ### Developers and protocol: 426 * Add `CALL_CMD_FUNC(cmd_func_name)` for calling commands in the same 427 module, see [this commit](https://github.com/unrealircd/unrealircd/commit/dc55c3ec9f19e5ed284e5a786f646d0e6bb60ef9). 428 Benefit of this is that it will keep working if we ever change command paramters. 429 * Add `CALL_NEXT_COMMAND_OVERRIDE()` which can be used instead of 430 `CallCommandOverride()`, see also [this commit](https://github.com/unrealircd/unrealircd/commit/4e5598b6cf0986095f757f31a2540b03e4d235dc). 431 This too, will keep working if we ever change command parameters. 432 * During loading and rehash we now set `loop.config_status` to one of 433 `CONFIG_STATUS_*` so modules (and core) can see at what step we are 434 during configuration file and module processing. 435 * New RPC API. See the `src/modules/rpc/` directory for examples. 436 * New function `get_nvplist(NameValuePrioList *list, const char *name)` 437 438 UnrealIRCd 6.0.4.2 439 ------------------- 440 Another small update to 6.0.4.x: 441 442 * Two IRCv3 specifications were ratified which we already supported as drafts: 443 * Change CAP `draft/extended-monitor` to `extended-monitor` 444 * Add message-tag `bot` next to existing (for now) `draft/bot` 445 * Update Turkish translations 446 447 UnrealIRCd 6.0.4.1 448 ------------------- 449 This is a small update to 6.0.4. It fixes the following issues that were 450 present in all 6.0.x versions: 451 452 * Fix sporadic crash when linking a server (after successful authentication). 453 This feels like a compiler bug. It affected only some people with GCC and 454 only in some situations. When compiled with clang there was no problem. 455 Hopefully we can work around it this way. 456 * Make /INVITE bypass (nearly) all channel mode restrictions, as it used to 457 be in UnrealIRCd 5.x. Both for invites by channel ops and for OperOverride. 458 This also fixes a bug where an IRCOp with OperOverride could not bypass +l 459 (limit) and other restrictions and would have to resort back to using 460 MODE or SAMODE. Only +b and +i could be bypassed via INVITE OperOverride. 461 462 (This cherry picks commit 0e6fc07bd9000ecc463577892cf2195a670de4be and 463 commit 0d139c6e7c268e31ca8a4c9fc5cb7bfeb4f56831 from 6.0.5-git) 464 465 UnrealIRCd 6.0.4 466 ----------------- 467 468 If you are already running UnrealIRCd 6 then read below. Otherwise, jump 469 straight to the [summary about UnrealIRCd 6](#Summary) to learn more 470 about UnrealIRCd 6. 471 472 ### Enhancements: 473 * Show security groups in `WHOIS` 474 * The [security-group block](https://www.unrealircd.org/docs/Security-group_block) 475 has been expanded and the same functionality is now available in 476 [mask items](https://www.unrealircd.org/docs/Mask_item) too: 477 * This means the existing options like `identified`, `webirc`, `tls` and 478 `reputation-score` can be used in `allow::mask` etc. 479 * New options (in both security-group and mask) are: 480 * `connect-time`: time a user is connected to IRC 481 * `security-group`: to check another security group 482 * `account`: services account name 483 * `country`: country code, as found by GeoIP 484 * `realname`: realname (gecos) of the user 485 * `certfp`: certificate fingerprint 486 * Every option also has an exclude- variant, eg. `exclude-country`. 487 If a user matches any `exclude-` option then it is considered not a match. 488 * The modules [connthrottle](https://www.unrealircd.org/docs/Connthrottle), 489 [restrict-commands](https://www.unrealircd.org/docs/Set_block#set::restrict-commands) 490 and [antirandom](https://www.unrealircd.org/docs/Set_block#set::antirandom) 491 now use the new `except` sub-block which is a mask item. The old syntax 492 (eg <code>set::antirandom::except-webirc</code>) is still accepted by UnrealIRCd 493 and converted to the appropriate new setting behind the scenes 494 (<code>set::antirandom::except::webirc</code>). 495 * The modules [blacklist](https://www.unrealircd.org/docs/Blacklist_block) 496 and [antimixedutf8](https://www.unrealircd.org/docs/Set_block#set::antimixedutf8) 497 now also support the `except` block (a mask item). 498 * Other than that the extended functionality is available in these blocks: 499 `allow`, `oper`, `tld`, `vhost`, `deny channel`, `allow channel`. 500 * Example of direct use in a ::mask item: 501 ``` 502 /* Spanish MOTD for Spanish speaking countries */ 503 tld { 504 mask { country { ES; AR; BO; CL; CO; CR; DO; EC; SV; GT; HN; MX; NI; PA; PY; PE; PR; UY; VE; } } 505 motd "motd.es.txt"; 506 rules "rules.es.txt"; 507 } 508 ``` 509 * Example of defining a security group and using it in a mask item later: 510 ``` 511 security-group irccloud { 512 mask { ip1; ip2; ip3; ip4; } 513 } 514 allow { 515 mask { security-group irccloud; } 516 class clients; 517 maxperip 128; 518 } 519 except ban { 520 mask { security-group irccloud; } 521 type { blacklist; connect-flood; handshake-data-flood; } 522 } 523 ``` 524 * Because the mask item is so powerful now, the `password` in the 525 [oper block](https://www.unrealircd.org/docs/Oper_block) is optional now. 526 * We now support oper::auto-login, which means the user will become IRCOp 527 automatically if they match the conditions on-connect. This can be used 528 in combination with 529 [certificate fingerprint](https://www.unrealircd.org/docs/Certificate_fingerprint) 530 authentication for example: 531 ``` 532 security-group Syzop { certfp "1234etc."; } 533 oper Syzop { 534 auto-login yes; 535 mask { security-group Syzop; } 536 operclass netadmin-with-override; 537 class opers; 538 } 539 except ban { 540 mask { security-group Syzop; } 541 type all; 542 } 543 ``` 544 * For [JSON logging](https://www.unrealircd.org/docs/JSON_logging) a number 545 of fields were added when a client is expanded: 546 * `geoip`: with subitem `country_code` (eg. `NL`) 547 * `tls`: with subitems `cipher` and `certfp` 548 * Under subitem `users`: 549 * `vhost`: if the visible host differs from the realhost then this is 550 set (thus for both vhost and cloaked host) 551 * `cloakedhost`: this is always set (except for eg. services users), even 552 if the user is not cloaked so you can easily search on a cloaked host. 553 * `idle_since`: last time the user has spoken (local clients only) 554 * `channels`: list of channels (array), with a maximum of 384 chars. 555 * The JSON logging now also strips ASCII below 32, so color- and 556 control codes. 557 * Support IRCv3 `+draft/channel-context` 558 * Add `example.es.conf` (Spanish example configuration file) 559 * The country of users is now communicated in the 560 [message-tag](https://www.unrealircd.org/docs/Message_tags) 561 `unrealircd.org/geoip` (only to IRCOps). 562 * Add support for linking servers via UNIX domain sockets 563 (`link::outgoing::file`). 564 565 ### Fixes: 566 * Crash in `except ban` with `~security-group:xyz` 567 * Crash if hideserver module was loaded but `LINKS` was not blocked. 568 * Crash on Windows when using the "Rehash" GUI option. 569 * Infinite loop if one security-group referred to another. 570 * Duplicate entries in the `+beI` lists of `+P` channels. 571 * Regular users were able to -o a service bot (that has umode +S) 572 * Module manager did not stop on compile error 573 * [`set::modes-on-join`](https://www.unrealircd.org/docs/Set_block#set::modes-on-join) 574 did not work with `+f` + timed bans properly, eg `[3t#b1]:10` 575 * Several log messages were missing some information. 576 * Reputation syncing across servers had a small glitch. Fix is mostly 577 useful for servers that were not linked to the network for days or weeks. 578 579 ### Changes: 580 * Clarified that UnrealIRCd is licensed as "GPLv2 or later" 581 * Fix use of variables in 582 [`set::reject-message`](https://www.unrealircd.org/docs/Set_block#set::reject-message) 583 and in [`blacklist::reason`](https://www.unrealircd.org/docs/Blacklist_block): 584 previously short forms of variables were (unintentionally) expanded 585 as well, such as `$serv` for `$server`. This is no longer supported, you need 586 to use the correct full variable names. 587 588 ### Developers and protocol: 589 * The `creationtime` is now communicated of users. Until now this 590 information was only known locally (the thing that was communicated 591 that came close was "last nick change" but that is not the same). 592 This is synced via (early) moddata across servers. 593 Module coders can use `get_connected_time()`. 594 * The `RPL_HOSTHIDDEN` is now sent from `userhost_changed()` so you 595 don't explicitly send it yourself anymore. 596 * The `SVSO` command is back, so services can make people IRCOp again. 597 See `HELPOP SVSO` or [the commit](https://github.com/unrealircd/unrealircd/commit/50e5d91c798e7d07ca0c68d9fca302a6b6610786) 598 for more information. 599 * Due to last change the `HOOKTYPE_LOCAL_OPER` parameters were changed. 600 * Module coders can enhance the 601 [JSON logging](https://www.unrealircd.org/docs/JSON_logging) 602 expansion items for clients and channels via new hooks like 603 `HOOKTYPE_JSON_EXPAND_CLIENT`. This is used by the geoip and tls modules. 604 605 UnrealIRCd 6.0.3 606 ----------------- 607 A number of serious issues were discovered in UnrealIRCd 6. Among these is 608 an issue which will likely crash the IRCd sooner or later if you /REHASH 609 with any active clients connected. 610 We suggest everyone who is running UnrealIRCd 6 to upgrade to 6.0.3. 611 612 Fixes: 613 * Crash in `WATCH` if the IRCd has been rehashed at least once. After doing 614 a `REHASH` with active clients it will likely corrupt memory. It may take 615 several days until after the rehash for the crash to occur, or even 616 weeks/months on smaller networks (accidental triggering, that is). 617 * A `REHASH` with certain remote includes setups could cause a crash or 618 other weird and confusing problems such as complaining about unable 619 to open an ipv6-database or missing snomask configuration. 620 This only affected some people with remote includes, not all. 621 * Potential out-of-bounds write in sending code. In practice it seems 622 harmless on most servers but this cannot be 100% guaranteed. 623 * Unlikely triggered log message would log uninitialized stack data to the 624 log file or send it to ircops. 625 * Channel ops could not remove halfops from a user (`-h`). 626 * After using the `RESTART` command (not recommended) the new IRCd was 627 often no longer writing to log files. 628 * Fix compile problem if you choose to use cURL remote includes but don't 629 have cURL on the system and ask UnrealIRCd to compile cURL. 630 631 Enhancements: 632 * The default text log format on disk changed. It now includes the server 633 name where the event was generated. Without this, it was sometimes 634 difficult to trace problems, since previously it sometimes looked like 635 there was a problem on your server when it was actually another server 636 on the network. 637 * Old log format: `[DATE TIME] subsystem.EVENT_ID loglevel: ........` 638 * New log format: `[DATE TIME] servername subsystem.EVENT_ID loglevel: ........` 639 640 Changes: 641 * Any MOTD lines added by services via 642 [`SVSMOTD`](https://www.unrealircd.org/docs/MOTD_and_Rules#SVSMOTD) 643 are now shown at the end of the MOTD-on-connect (unless using a shortmotd). 644 Previously the lines were only shown if you manually ran the `MOTD` command. 645 646 Developers and protocol: 647 * `LIST C<xx` now means: filter on channels that are created less 648 than `xx` minutes ago. This is the opposite of what we had earlier. 649 `LIST T<xx` is now supported as well (topic changed in last xx minutes), 650 it was already advertised in ELIST but support was not enabled previously. 651 652 UnrealIRCd 6.0.2 653 ----------------- 654 UnrealIRCd 6.0.2 comes with several nice feature enhancements along with 655 some fixes. It also includes a fix for a crash bug that can be triggered 656 by ordinary users. 657 658 Fixes: 659 * Fix crash that can be triggered by regular users if you have any `deny dcc` 660 blocks in the config or any spamfilters with the `d` (DCC) target. 661 NOTE: You don't *have* to upgrade to 6.0.2 to fix this, you can also 662 hot-patch this issue without restart, see the news announcement. 663 * Windows: fix crash with IPv6 clients (local or remote) due to GeoIP lookup 664 * Fix infinite hang on "Loading IRCd configuration" if DNS is not working. 665 For example if the 1st DNS server in `/etc/resolv.conf` is down or refusing 666 requests. 667 * Some `MODE` server-to-server commands were missing a timestamp at the end, 668 even though this is mandatory for modes coming from a server. 669 * The [channeldb](https://www.unrealircd.org/docs/Set_block#set::channeldb) 670 module now converts letter extbans to named extbans (eg `~a` to `~account`). 671 Previously it did not, which caused letter extbans to appear in the banlist. 672 Later on, when linking servers, this would cause duplicate entries to appear 673 as well, with both the old and new format. The extbans were still effective 674 though, so this is mostly a visual +b/+e/+I list issue. 675 * Some [Extended Server Bans](https://www.unrealircd.org/docs/Extended_server_bans) 676 were not working correctly for WEBIRC proxies. In particular, a server ban 677 or exempt (ELINE) on `~country:XX` was only checked against the WEBIRC proxy. 678 679 Enhancements: 680 * Support for [logging to a channel](https://www.unrealircd.org/docs/Log_block#Logging_to_a_channel). 681 Similar to snomasks but then for channels. 682 * Command line interface changes: 683 * The [CLI tool](https://www.unrealircd.org/docs/Command_Line_Interface) now 684 communicates to the running UnrealIRCd process via a UNIX socket to 685 send commands and retrieve output. 686 * The command `./unrealircd rehash` will now show the rehash output, 687 including warnings and errors, and return a proper exit code. 688 * The same for `./unrealircd reloadtls` 689 * New command `./unrealircd status` to show if UnrealIRCd is running, the 690 version, channel and user count, .. 691 * The command `./unrealircd genlinkblock` is now 692 [documented](https://www.unrealircd.org/docs/Linking_servers_(genlinkblock)) 693 and is referred to from the 694 [Linking servers tutorial](https://www.unrealircd.org/docs/Tutorial:_Linking_servers). 695 * On Windows in the `C:\Program Files\UnrealIRCd 6\bin` directory there is 696 now an `unrealircdctl.exe` that can be used to do similar things to what 697 you can do on *NIX. Supported operations are: `rehash`, `reloadtls`, 698 `mkpasswd`, `gencloak` and `spkifp`. 699 * New option [set::server-notice-show-event](https://www.unrealircd.org/docs/Set_block#set::server-notice-show-event) 700 which can be set to `no` to hide the event information (eg `connect.LOCAL_CLIENT_CONNECT`) 701 in server notices. This can be overridden per-oper in the 702 [Oper block](https://www.unrealircd.org/docs/Oper_block) via oper::server-notice-show-event. 703 * Support for IRC over UNIX sockets (on the same machine), if you specify a 704 file in the [listen block](https://www.unrealircd.org/docs/Listen_block) 705 instead of an ip/port. This probably won't be used much, but the option is 706 there. Users will show up with a host of `localhost` and IP `127.0.0.1` to 707 keep things simple. 708 * The `MAP` command now shows percentages of users 709 * Add `WHO` option to search clients by time connected (eg. `WHO <300 t` to 710 search for less than 300 seconds) 711 * Rate limiting of `MODE nick -x` and `-t` via new `vhost-flood` option in 712 [set::anti-flood block](https://www.unrealircd.org/docs/Anti-flood_settings). 713 714 Changes: 715 * Update Russian `help.ru.conf`. 716 717 Developers and protocol: 718 * People packaging UnrealIRCd (eg. to an .rpm/.deb): 719 * Be sure to pass the new `--with-controlfile` configure option 720 * There is now an `unrealircdctl` tool that the `unrealircd` shell script 721 uses, it is expected to be in `bindir`. 722 * `SVSMODE #chan -b nick` will now correctly remove extbans that prevent `nick` 723 from joining. This fixes a bug where it would remove too much (for `~time`) 724 or not remove extbans (most other extbans, eg `~account`). 725 `SVSMODE #chan -b` has also been fixed accordingly (remove all bans 726 preventing joins). 727 Note that all these commands do not remove bans that do not affect joins, 728 such as `~quiet` or `~text`. 729 * For module coders: setting the `EXTBOPT_CHSVSMODE` flag in `extban.options` 730 is no longer useful, the flag is ignored. We now decide based on 731 `BANCHK_JOIN` being in `extban.is_banned_events` if the ban should be 732 removed or not upon SVS(2)MODE -b. 733 734 UnrealIRCd 6.0.1.1 735 ------------------- 736 737 Fixes: 738 * In 6.0.1.1: extended bans were not properly synced between U5 and U6. 739 This caused missing extended bans on the U5 side (MODE was working OK, 740 this only happened when linking servers) 741 * Text extbans did not have any effect (`+b ~text:censor:*badword*`) 742 * Timed bans were not expiring if all servers on the network were on U6 743 * Channel mode `+f` could place a timed extban with `~t` instead of `~time` 744 * Crash when unloading any of the vhoaq modules at runtime 745 * `./unrealircd upgrade` not working on FreeBSD and not with self-compiled cURL 746 * Some log messages being wrong (`CHGIDENT`, `CHGNAME`) 747 * Remove confusing high cpu load warning 748 749 Enhancements: 750 * Error on unknown snomask in set::snomask-on-oper and oper::snomask. 751 * TKL add/remove/expire messages now show `[duration: 60m]` instead of 752 the `[expires: ZZZ GMT]` string since that is what people are more 753 interested in and is not affected by time zones. The format in all the 754 3 notices is also consistent now. 755 756 UnrealIRCd 6.0.0 757 ----------------- 758 759 Many thanks to k4be for his help during development, other contributors for 760 their feedback and patches, the people who tested the beta's and release 761 candidates, translators and everyone else who made this release happen! 762 763 Summary 764 -------- 765 UnrealIRCd 6 comes with a completely redone logging system (with optional 766 JSON support), named extended bans, four new IRCv3 features, 767 geoip support and remote includes support built-in. 768 769 Additionally, things are more customizable such as what gets sent to 770 which snomask. All the +vhoaq channel modes are now modular as well, 771 handy for admins who don't want or need halfops or +q/+a. 772 For WHOIS it is now customizable in detail who gets to see what. 773 774 A summary of the features is available at 775 [What's new in UnrealIRCd 6](https://www.unrealircd.org/docs/What's_new_in_UnrealIRCd_6). 776 For complete information, continue reading the release notes below. 777 The sections below contain all the details. 778 779 Upgrading from UnrealIRCd 5 780 ---------------------------- 781 The previous stable series, UnrealIRCd 5, will no longer get any new features. 782 We still do bug fixes until July 1, 2022. In the 12 months after that, only 783 security issues will be fixed. Finally, after July 1, 2023, 784 [all support will stop](https://www.unrealircd.org/docs/UnrealIRCd_5_EOL). 785 786 If you want to hold off for a while because you are cautious or if you 787 depend on 3rd party modules (which may not have been upgraded yet by their 788 authors) then feel free to wait a while. 789 790 If you are upgrading from UnrealIRCd 5 to 6 then you can use your existing 791 configuration and files. There's no need to start from scratch. 792 However, you will need to make a few updates, see 793 [Upgrading from 5.x to 6.x](https://www.unrealircd.org/docs/Upgrading_from_5.x). 794 795 Enhancements 796 ------------- 797 * Completely new log system and snomasks overhaul 798 * Both logging and snomask sending is done by a single logging function 799 * Support for [JSON logging](https://www.unrealircd.org/docs/JSON_logging) 800 to disk, instead of the default text format. 801 JSON logging adds lot of detail to log messages and consistently 802 expands things like *client* with properties like *hostname*, 803 *connected_since*, *reputation*, *modes*, etc. 804 * The JSON data is also sent to all IRCOps who request the 805 `unrealircd.org/json-log` capability. The data is then sent in 806 a message-tag called `unrealircd.org/json-log`. This makes it ideal 807 for client scripts and bots to do automated things. 808 * A new style log { } block is used to map what log messages should be 809 logged to disk, and which ones should be sent to snomasks. 810 * The default logging to snomask configuration is in `snomasks.default.conf` 811 which everyone should include from unrealircd.conf. That is, unless you 812 wish to completely reconfigure which logging goes to which snomasks 813 yourself, which is also an option now. 814 * See [Snomasks](https://www.unrealircd.org/docs/Snomasks#UnrealIRCd_6) 815 on the new snomasks - lots of letters changed! 816 * See [FAQ: Converting log { } block](https://www.unrealircd.org/docs/FAQ#old-log-block) 817 on how to change your existing log { } blocks for disk logging. 818 * We now have a consistent log format and log messages can be multiline. 819 * Colors are enabled by default in snomask server notices, these can be disabled via 820 [set::server-notice-colors](https://www.unrealircd.org/docs/Set_block#set::server-notice-colors) 821 and also in [oper::server-notice-colors](https://www.unrealircd.org/docs/Oper_block) 822 * Support for [logging to a channel](https://www.unrealircd.org/docs/Log_block#Logging_to_a_channel). 823 Similar to snomasks but then for channels. *Requires UnrealIRCd 6.0.2 or later* 824 * Almost all channel modes are modularized 825 * Only the three list modes (+b/+e/+I) are still in the core 826 * The five [level modes](https://www.unrealircd.org/docs/Channel_Modes#Access_levels) 827 (+vhoaq) are now also modular. They are all loaded by default but you can 828 blacklist one or more if you don't want them. For example to disable halfop: 829 `blacklist-module chanmodes/halfop;` 830 * Support for compiling without PREFIX_AQ has been removed because 831 people often confused it with disabling +a/+q which is something 832 different. 833 * Named extended bans 834 * Extbans now no longer show up with single letters but with names. 835 For example `+b ~c:#channel` is now `+b ~channel:#channel`. 836 * Extbans are automatically converted from the old to the new style, 837 both from clients and from/to older UnrealIRCd 5 servers. 838 The auto-conversion also works fine with complex extbans such as 839 `+b ~t:5:~q:nick!user@host` to `+b ~time:5:~quiet:nick!user@host`. 840 * New IRCv3 features: 841 * [MONITOR](https://ircv3.net/specs/extensions/monitor.html): an 842 alternative for `WATCH` to monitor other users ("notify list"). 843 * draft/extended-monitor: extensions for MONITOR, still in draft. 844 * [invite-notify](https://ircv3.net/specs/extensions/invite-notify): 845 report channel invites to other chanops (or users) in a machine 846 readable way. 847 * [setname](https://ircv3.net/specs/extensions/setname.html): 848 notify clients about realname (gecos) changes. 849 * GeoIP lookups are now done by default 850 * This shows the country of the user to IRCOps in `WHOIS` and in the 851 "user connecting" line. 852 * By default the `geoip_classic` module is loaded, for which we 853 provide a mirror of database updates at unrealircd.org. This uses 854 the classic geolite library that is now shipped with UnrealIRCd 855 * Other options are the `geoip_maxmind` and `geoip_csv` modules. 856 * Configure `WHOIS` output in a very precise way 857 * You can now decide which fields (eg modes, geo, certfp, etc) you want 858 to expose to who (everyone, self, oper). 859 * See [set::whois-details](https://www.unrealircd.org/docs/Set_block#set::whois-details) 860 for more details. 861 * We now ship with 3 cloaking modules and you need to load 1 explicitly 862 via `loadmodule`: 863 * `cloak_sha256`: the recommended module for anyone starting a *new* 864 network. It uses the SHA256 algorithm under the hood. 865 * `cloak_md5`: for anyone who is upgrading their network from older 866 UnrealIRCd versions. Use this so your cloaked host bans remain the same. 867 * `cloak_none`: if you don't want any cloaking, not even as an option 868 to your users (rare) 869 * Remote includes are now supported everywhere in the config file. 870 * Support for `https://` fetching is now always available, even 871 if you don't compile with libcurl support. 872 * Anywhere an URL is encountered on its own, it will be fetched 873 automatically. This makes it work not only for includes and motd 874 (which was already supported) but also for any other file. 875 * To prevent something from being interpreted as a remote include 876 URL you can use 'value' instead of "value". 877 * Invite notification: set `set::normal-user-invite-notification yes;` to make 878 chanops receive information about normal users inviting someone to their channel. 879 The name of this setting may change in a later version. 880 * Websocket: you can add a `listen::options::websocket::forward 1.2.3.4` option 881 to make unrealircd accept a `Forwarded` (RFC 7239) header from a reverse proxy 882 connecting from `1.2.3.4` (plans to accept legacy `X-Forwarded-For` and a proxy 883 password too). This feature is currently experimental. 884 885 Changes 886 -------- 887 * TLS cipher and some other information is now visible for remote 888 clients as well, also in `[secure: xyz]` connect line. 889 * Error messages in remote includes use the url instead of a temporary file 890 * Downgrading from UnrealIRCd 6 is only supported down to 5.2.0 (so not 891 lower like 5.0.x). If this is a problem then make a copy of your db files 892 (eg: reputation.db). 893 894 Removed 895 -------- 896 * /REHASH -motd and -opermotd are gone, just use /REHASH 897 898 Breaking changes 899 ----------------- 900 See https://www.unrealircd.org/docs/Upgrading_from_5.x, but in short: 901 902 You can use the unrealircd.conf from UnrealIRCd 5, but you need to make 903 a few changes: 904 * You need to add `include "snomasks.default.conf";` 905 * You need to load a cloaking module explicitly. Assuming you already 906 have a network then add: `loadmodule "cloak_md5";` 907 * The log block(s) need to be updated, use something like: 908 ``` 909 log { 910 source { 911 !debug; 912 all; 913 } 914 destination { 915 file "ircd.log" { maxsize 100M; } 916 } 917 } 918 ``` 919 920 Module coders (API changes) 921 ---------------------------- 922 * Be sure to bump the version in the module header from `unrealircd-5` to `unrealircd-6` 923 * We use a lot more `const char *` now (instead of `char *`). In particular `parv` 924 is const now and so are a lot of arguments to hooks. This will mean that in your 925 module you have to use more const too. The reason for this change is to indicate 926 that certain strings should not be touched, as doing so is dangerous or could 927 have had side-effects that were unpredictable. 928 * Logging has been completely redone. Don't use `ircd_log()`, `sendto_snomask()`, 929 `sendto_ops()` and `sendto_realops()` anymore. Instead use `unreal_log()` which 930 handles both logging to disk and notifying IRCOps. 931 * Various struct member names changed, in particular in `ConfigEntry` and `ConfigFile`, 932 but also `channel->chname` is `channel->name` now. 933 * get_channel() is now make_channel() and creates if needed, otherwise use find_channel() 934 * The Extended Ban API has been changed a lot. We use a `BanContext` struct now 935 that we pass around a lot. You also don't need to do `+3` magic anymore on the 936 string as it is handled in another layer. When registering the extended ban, 937 `.flag` is now `.letter`, and you also need to set a `.name` to a string due 938 to named extended bans. Have a look at the built-in extban modules to see 939 how to handle the changes. 940 * ModData now has an option `MODDATA_SYNC_EARLY`. See under *Server protocol*. 941 * If you want to lag someone up, don't touch `client->since`, but instead use: 942 `add_fake_lag(client, msec)` 943 * Some client/user struct changes, with `client->user->account` (instead of svid) 944 and `client->uplink->name` being the most important ones. 945 * Possibly more, but above is like 90%+ of the changes that you will encounter. 946 947 Server protocol 948 ---------------- 949 * When multiple related `SJOIN` messages are generated for the same channel 950 then we now only send the current channel modes (eg `+sntk key`) in the 951 first SJOIN and not in the other ones as they are unneeded for the 952 immediate followup SJOINs, they waste unnecessary bytes and CPU. 953 Such messages may be generated when syncing a channel that has dozens 954 of users and/or bans/exempts/invexes. Ideally this should not need any 955 changes in other software, since we already supported such messages in the 956 past and code for handling it exists way back to 3.2.x, but you better 957 check to be sure! 958 * If you send `PROTOCTL NEXTBANS` then you will receive extended bans 959 with Named EXTended BANs instead of letters (eg: `+b ~account:xyz`), 960 otherwise you receive them with letters (eg: `+b ~a:xyz`). 961 * Some ModData of users is (also) communicated in the `UID` message while 962 syncing using a message tag that only appears in server-to-server traffic, 963 `s2s-md/moddataname=value`. Thus, data such as operinfo, tls cipher, 964 geoip, certfp, sasl and webirc is communicated at the same time as when 965 a remote connection is added. 966 This makes it that a "connecting from" server notice can include all this 967 information and also so code can make an immediate decission on what to do 968 with the user in hooks. ModData modules need to set 969 `mreq.sync = MODDATA_SYNC_EARLY;` if they want this. 970 Servers of course need to enable `MTAGS` in PROTOCTL to see this. 971 * The `SLOG` command is used to broadcast logging messages. This is done 972 for log::destination remote, as used in doc/conf/snomasks.default.conf, 973 for example for link errors, oper ups, flood messages, etc. 974 It also includes all JSON data in a message tag when `PROTOCTL MTAGS` is used. 975 * Bounced modes are gone: these were MODEs that started with a `&` which 976 servers were to act on with reversed logic (add becoming remove and 977 vice versa) and never to send something back to that server. 978 In practice this was almost never used and complicated the code (way) 979 too much. 980 981 Client protocol 982 ---------------- 983 * Extended bans now have names instead of letters. If a client sends the 984 old format with letters (eg `+b ~a:XYZ`) then the server will 985 convert it to the new format with names (eg: `+b ~account:XYZ`) 986 * Support for `MONITOR` and the other IRCv3 features (see *Enhancements*)