ircd@nlx:~/unrealircd$ ./unrealircd hot-patch bundle-20261107 --2026-11-07 15:18:49-- https://www.unrealircd.org/patch?type=hot-patch&patch=bundle-20261107&version=6.2.7 Resolving www.unrealircd.org (www.unrealircd.org)... 104.18.24.153, 104.18.25.153, 2606:4700::6812:1999, ... Connecting to www.unrealircd.org (www.unrealircd.org)|104.18.24.153|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘patch’ patch [ <=> ] 7.13K --.-KB/s in 0s 2026-11-07 15:18:50 (69.5 MB/s) - ‘patch’ saved [7306] --2026-11-07 15:18:50-- https://www.unrealircd.org/patch?type=hot-patch&patch=bundle-20261107&version=6.2.7&sig=1 Resolving www.unrealircd.org (www.unrealircd.org)... 104.18.25.153, 104.18.24.153, 2606:4700::6812:1999, ... Connecting to www.unrealircd.org (www.unrealircd.org)|104.18.25.153|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 833 [text/html] Saving to: ‘patch.asc’ patch.asc 100%[========================================================================================================================================>] 833 --.-KB/s in 0s 2026-11-07 15:18:50 (9.39 MB/s) - ‘patch.asc’ saved [833/833] gpg: key 101001DAF48BB56D: "UnrealIRCd releases and patches (for verification of software downloads only!) " not changed gpg: Total number processed: 1 gpg: unchanged: 1 gpg: Signature made Sat Oct 31 17:54:46 2026 UTC gpg: using RSA key 36E6F65706E36B0937280299101001DAF48BB56D gpg: Good signature from "UnrealIRCd releases and patches (for verification of software downloads only!) " [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 36E6 F657 06E3 6B09 3728 0299 1010 01DA F48B B56D GPG: Verification succeeded. Patch file is genuine. patching file src/modules/blacklist.c Possibly reversed hunk 1 at 1039 Hunk 1 FAILED 1012/1012. EVENT(blacklist_recheck) { - Client *client; + Client *client, *next; time_t last_check; if (BLACKLIST_RECHECK_TIME == 0) return; - list_for_each_entry(client, &lclient_list, lclient_node) + list_for_each_entry_safe(client, next, &lclient_list, lclient_node) { /* Only check connected users */ if (!IsUser(client)) patching file src/modules/extended-monitor.c Hunk 1 FAILED 120/120. int extended_monitor_notification(Client *client, Watch *watch, Link *lp, int event, void *data) { + if (!IsUser(client)) + return 0; + if (!(lp->flags & WATCH_FLAG_TYPE_MONITOR)) return 0; patching file src/modules/labeled-response.c Possibly reversed hunk 1 at 417 Hunk 1 FAILED 24/24. ModuleHeader MOD_HEADER = { "labeled-response", - "5.0", + "5.0-hot-patch-bundle-20261107", "Labeled response CAP", "UnrealIRCd Team", "unrealircd-6", patching file src/modules/mode.c Hunk 1 FAILED 518/518. return m; } +static int listmode_full(Ban *ban) +{ + int cnt = 0; + + for (; ban; ban = ban->next) + { + if (++cnt >= MAXBANS * 2) + return 1; + } + return 0; +} + const char *mode_ban_handler(Client *client, Channel *channel, const char *param, int what, int extbtype, Ban **banlist) { const char *tmpstr; patching file src/modules/nick.c Hunk 1 FAILED 1354/1354. } } + if (client->local->class == aconf->class) + return 1; + if (!((aconf->class->clients + 1) > aconf->class->maxclients)) { + if (client->local->class) + client->local->class->clients--; client->local->class = aconf->class; client->local->class->clients++; } else patching file src/modules/sjoin.c Hunk 1 FAILED 105/105. } } +static int listmode_full(Ban *ban) +{ + int cnt = 0; + + for (; ban; ban = ban->next) + { + if (++cnt >= MAXBANS * 2) + return 1; + } + return 0; +} + /** SJOIN: Synchronize channel modes, +beI lists and users (server-to-server command) * Extensive technical documentation is available at: * https://www.unrealircd.org/docs/Server_protocol:SJOIN_command patching file src/modules/starttls.c Hunk 1 FAILED 98/98. SetStartTLSHandshake(client); if ((client->local->ssl = SSL_new(ctx)) == NULL) goto fail; +#ifdef SSL_OP_NO_RENEGOTIATION + /* No TLS renegotiations. OpenSSL 3.0.0 and later already do this by default */ + SSL_set_options(client->local->ssl, SSL_OP_NO_RENEGOTIATION); +#elif defined(SSL_OP_NO_CLIENT_RENEGOTIATION) + /* Same, but for LibreSSL <4.1.0 which doesn't have SSL_OP_NO_RENEGOTIATION */ + SSL_set_options(client->local->ssl, SSL_OP_NO_CLIENT_RENEGOTIATION); +#endif SetTLS(client); SSL_set_fd(client->local->ssl, client->local->fd); SSL_set_nonblocking(client->local->ssl); patching file src/modules/svsmode.c Possibly reversed hunk 1 at 637 Hunk 1 FAILED 63/63. void unban_user(Client *client, Channel *channel, Client *acptr, char chmode) { - Extban *extban; - const char *nextbanstr; Ban *ban, *bnext; Ban **banlist; BanContext *b; patching file src/modules/user.c Hunk 1 FAILED 23/23. #include "unrealircd.h" CMD_FUNC(cmd_user); +int user_is_handshake_finished(Client *client); + +extern WhoWas MODVAR WHOWAS[NICKNAMEHISTORYLENGTH]; #define MSG_USER "USER" patching file src/modules/whowasdb.c Possibly reversed hunk 1 at 639 Hunk 1 FAILED 580/580. break; } - if (nick && username && hostname && realname) + if (nick && username && hostname && realname && server) { /* This is basically duplicating the code from create_whowas_entry() in src/whowas.c. * But we have no choice, as we can't use that function since we don't have a Client *. patching file src/modules/blacklist.c patching file src/modules/extended-monitor.c patching file src/modules/labeled-response.c patching file src/modules/mode.c patching file src/modules/nick.c patching file src/modules/sjoin.c patching file src/modules/starttls.c patching file src/modules/svsmode.c patching file src/modules/user.c Possibly reversed hunk 1 at 111 Hunk 1 FAILED 23/23. #include "unrealircd.h" CMD_FUNC(cmd_user); +int user_is_handshake_finished(Client *client); + +extern WhoWas MODVAR WHOWAS[NICKNAMEHISTORYLENGTH]; #define MSG_USER "USER" patching file src/modules/whowasdb.c Patch failed to apply (no files changed)