UnrealIRCd 6.0.3 ================= A number of serious issues were discovered in UnrealIRCd 6. Among these is an issue which will likely crash the IRCd sooner or later if you /REHASH with any active clients connected. We suggest everyone who is running UnrealIRCd 6 to upgrade to 6.0.3. If you are already running UnrealIRCd 6 then read below. Otherwise, jump straight to the [summary about UnrealIRCd 6](#Summary) to learn more about UnrealIRCd 6. Fixes: * Crash in `WATCH` if the IRCd has been rehashed at least once. After doing a `REHASH` with active clients it will likely corrupt memory. It may take several days until after the rehash for the crash to occur, or even weeks/months on smaller networks (accidental triggering, that is). * A `REHASH` with certain remote includes setups could cause a crash or other weird and confusing problems such as complaining about unable to open an ipv6-database or missing snomask configuration. This only affected some people with remote includes, not all. * Potential out-of-bounds write in sending code. In practice it seems harmless on most servers but this cannot be 100% guaranteed. * Unlikely triggered log message would log uninitialized stack data to the log file or send it to ircops. * Channel ops could not remove halfops from a user (`-h`). * After using the `RESTART` command (not recommended) the new IRCd was often no longer writing to log files. * Fix compile problem if you choose to use cURL remote includes but don't have cURL on the system and ask UnrealIRCd to compile cURL. Enhancements: * The default text log format on disk changed. It now includes the server name where the event was generated. Without this, it was sometimes difficult to trace problems, since previously it sometimes looked like there was a problem on your server when it was actually another server on the network. * Old log format: `[DATE TIME] subsystem.EVENT_ID loglevel: ........` * New log format: `[DATE TIME] servername subsystem.EVENT_ID loglevel: ........` Changes: * Any MOTD lines added by services via [`SVSMOTD`](https://www.unrealircd.org/docs/MOTD_and_Rules#SVSMOTD) are now shown at the end of the MOTD-on-connect (unless using a shortmotd). Previously the lines were only shown if you manually ran the `MOTD` command. Developers and protocol: * `LIST Cchname` is `channel->name` now. * get_channel() is now make_channel() and creates if needed, otherwise use find_channel() * The Extended Ban API has been changed a lot. We use a `BanContext` struct now that we pass around a lot. You also don't need to do `+3` magic anymore on the string as it is handled in another layer. When registering the extended ban, `.flag` is now `.letter`, and you also need to set a `.name` to a string due to named extended bans. Have a look at the built-in extban modules to see how to handle the changes. * ModData now has an option `MODDATA_SYNC_EARLY`. See under *Server protocol*. * If you want to lag someone up, don't touch `client->since`, but instead use: `add_fake_lag(client, msec)` * Some client/user struct changes, with `client->user->account` (instead of svid) and `client->uplink->name` being the most important ones. * Possibly more, but above is like 90%+ of the changes that you will encounter. Server protocol ---------------- * When multiple related `SJOIN` messages are generated for the same channel then we now only send the current channel modes (eg `+sntk key`) in the first SJOIN and not in the other ones as they are unneeded for the immediate followup SJOINs, they waste unnecessary bytes and CPU. Such messages may be generated when syncing a channel that has dozens of users and/or bans/exempts/invexes. Ideally this should not need any changes in other software, since we already supported such messages in the past and code for handling it exists way back to 3.2.x, but you better check to be sure! * If you send `PROTOCTL NEXTBANS` then you will receive extended bans with Named EXTended BANs instead of letters (eg: `+b ~account:xyz`), otherwise you receive them with letters (eg: `+b ~a:xyz`). * Some ModData of users is (also) communicated in the `UID` message while syncing using a message tag that only appears in server-to-server traffic, `s2s-md/moddataname=value`. Thus, data such as operinfo, tls cipher, geoip, certfp, sasl and webirc is communicated at the same time as when a remote connection is added. This makes it that a "connecting from" server notice can include all this information and also so code can make an immediate decission on what to do with the user in hooks. ModData modules need to set `mreq.sync = MODDATA_SYNC_EARLY;` if they want this. Servers of course need to enable `MTAGS` in PROTOCTL to see this. * The `SLOG` command is used to broadcast logging messages. This is done for log::destination remote, as used in doc/conf/snomasks.default.conf, for example for link errors, oper ups, flood messages, etc. It also includes all JSON data in a message tag when `PROTOCTL MTAGS` is used. * Bounced modes are gone: these were MODEs that started with a `&` which servers were to act on with reversed logic (add becoming remove and vice versa) and never to send something back to that server. In practice this was almost never used and complicated the code (way) too much. Client protocol ---------------- * Extended bans now have names instead of letters. If a client sends the old format with letters (eg `+b ~a:XYZ`) then the server will convert it to the new format with names (eg: `+b ~account:XYZ`) * Support for `MONITOR` and the other IRCv3 features (see *Enhancements*)