# HG changeset patch # User David Demelier # Date 1644219734 -3600 # Node ID 2432d7bee8b2ba59fe96554d97d90f0e4c3d380e # Parent 1192e53e32d239ac818ae0cf0ba53120ea5f9176# Parent d95b274b746a967a657acd62b1de6203fc6c25ea misc: merge from release-4.0 diff -r 1192e53e32d2 -r 2432d7bee8b2 .hgsigs --- a/.hgsigs Thu Feb 03 13:16:45 2022 +0100 +++ b/.hgsigs Mon Feb 07 08:42:14 2022 +0100 @@ -14,3 +14,4 @@ 52334419194e8e256fcee202d8ea163b3d1e08d6 0 iQEzBAABCAAdFiEEvr8S/JLqYAXrLA5Xodr5uEAj8x8FAl7+/EgACgkQodr5uEAj8x+1ZQgAthVpFrD0iGZf3bG9bI0BfLxccWCPEhjLs+gIvnt5dl3lh83SQ+8M3D6Jo8mCR3r3WWVKlqa8f0a4L8MxV+GRv6CGeyMrzjzIFipDWm1gU+6nGssNuHp7neC4XECaI3Iu2150Qz3t6Ugdgbo2sqAgUc0BspJhITwoR7UNDmG894fNYlDLpwVYYEP8NU6i4efeD0IPMNzESl+WhJL6VCmBoESlwOCXTMR13ugyibnWmnyPNfH90/vpx1ZL/6woUgO+0QD94Bv5sAtbvSbwSMwJ351p0b9e05bd6PpTIT25HxTIpZyWmAmUroSjNV88KGdG3fJ3rTX5rXSOWArL5j9G4g== 45110aed06f0e483c1f6243cde3f24078819d10a 0 iQEzBAABCAAdFiEEvr8S/JLqYAXrLA5Xodr5uEAj8x8FAl/y4AYACgkQodr5uEAj8x+HzAf9FZkgYj3W4Bx2bwfqG4st4bes2Ucv18QcStp15mu6ukxRroPzj3Q9YwN0Y97yLrq6LJnMx8+O+NV4R5CSgiATZ+6yvezMH7dkJasU6P9r26XoPUno7NIf+QaHEGXrCDljQd4N+EaM/qpxD9PW46Lf2LGO47f3C84Z4h3MKqc3LJEuK9sGsolcFaaSizmpOaLAez2mzxBst1TalHrJHeolS8jyZWtqNWtm5gzxXhIrbQPKZbiOhdcf6b2adKpgNP3mlpNqQDtoOOeFXyDRunP8QFiPOYimjsHrVY2U3ltF/b3U+dHEjk54MQ3U8u/wZVeqUQS7yghYk2g67EORZwcNJA== 51d5579f76234fb277d0e8d616e22d4f1c3768f7 0 iQEzBAABCAAdFiEEvr8S/JLqYAXrLA5Xodr5uEAj8x8FAmH7x2oACgkQodr5uEAj8x+LDQf/aA8EbsfL0yX/+NIJAAS1e9lysT2YocukbvFAUqc+W/DCpb0PDnexUu59NhMFunHNXXGMBUeYjqfujbC/VQX8EOdb74sQGWRiU3cuwbAvT6PWZg36DSRaDwEnXh7BJVVaLd1UNCQ/qCFPy+d7FHF9g1Cl6sn10CkyqbpvDZbySdlAeXAXHtNCKSKZB1CIEyrOArCENJgCGFVIKlikagIJU+W/ihIJ128VLQzY9+YyruVmHQeRzdaZ8P9/so02YCpm765mlmOJDY9jlUfW+vfD4wX+AgIeY8Js92pFa7ylmpiV5H0yANGLH/D7ypqnAJsidlwN72rVBK8BkiXfmpzGNw== +822afa84648929dc0f6088a1759be441804070cf 0 iQEzBAABCAAdFiEEvr8S/JLqYAXrLA5Xodr5uEAj8x8FAmIAzREACgkQodr5uEAj8x/t9AgAnXY6/7rmMim/ARIV1a5el4HWFqnxS/zqogZ3VnfEpNYxC+ZM0X0AIp+HUXFgsc7ARR6EziDUV0KoR5vPpVQTxVaYM5BwirP0naLNWZTxbNOpDwRJ3C/x9sSzngCWbLUB1GncY2KykeTVqmg6mFDBZ9A9vjtGFFC/QI2mtTgUBED0SuV6804CsclQLXpBI3mSfXl3j3xIyXvaNzBp8917asHUAAciAAYiXeIi6e9MMlj8kMNtTC4pUK7Zf00i1N/OyUzKbBdP8NM9nJIcdR6KpIHENI93nYpVc6WcAWxjnwNKReFsOKIarq6zH1USZfIb0ABbFkHh+Pz4azl6JajiYA== diff -r 1192e53e32d2 -r 2432d7bee8b2 .hgtags --- a/.hgtags Thu Feb 03 13:16:45 2022 +0100 +++ b/.hgtags Mon Feb 07 08:42:14 2022 +0100 @@ -14,3 +14,4 @@ 49b25adcd313a1b6df225540b0a2107fb4607da5 3.1.0 c0408dc4a74a19554ae7b024e9e609ac0478a021 3.1.1 c421701054d4755ffab6662d26de46bbe1a024a9 4.0.0 +a362f8de153806d28b0c64730bc0233e1365dc00 4.0.1 diff -r 1192e53e32d2 -r 2432d7bee8b2 CHANGES.md --- a/CHANGES.md Thu Feb 03 13:16:45 2022 +0100 +++ b/CHANGES.md Mon Feb 07 08:42:14 2022 +0100 @@ -1,6 +1,14 @@ IRC Client Daemon CHANGES ========================= +irccd 4.0.1 2022-02-07 +====================== + +- Fix disconnection with multiple servers. +- Fix Javascript `Irccd.Server` constructor function. +- Substitute the irccd version in Javascript plugins. +- Fix `irccdctl plugin-reload` command without argument. + irccd 4.0.0 2022-02-03 ====================== diff -r 1192e53e32d2 -r 2432d7bee8b2 CMakeLists.txt --- a/CMakeLists.txt Thu Feb 03 13:16:45 2022 +0100 +++ b/CMakeLists.txt Mon Feb 07 08:42:14 2022 +0100 @@ -38,7 +38,7 @@ LANGUAGES C DESCRIPTION "IRC Client Daemon" HOMEPAGE_URL "http://projects.malikania.fr/irccd" - VERSION 4.0.0 + VERSION 4.0.1 ) set_property(GLOBAL PROPERTY USE_FOLDERS On) @@ -62,7 +62,7 @@ option(IRCCD_WITH_TESTS "Enable unit tests" On) option(IRCCD_WITH_PKGCONFIG "Enable installation of pkg-config file" On) -set(IRCCD_MAN_DATE "February 3, 2022") +set(IRCCD_MAN_DATE "February 7, 2022") set(IRCCD_WITH_UID "irccd" CACHE STRING "Default uid to run irccd as") set(IRCCD_WITH_GID "irccd" CACHE STRING "Default gid to run irccd as") set(IRCCD_WITH_PKGCONFIGDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig" diff -r 1192e53e32d2 -r 2432d7bee8b2 cmake/IrccdDefinePlugin.cmake --- a/cmake/IrccdDefinePlugin.cmake Thu Feb 03 13:16:45 2022 +0100 +++ b/cmake/IrccdDefinePlugin.cmake Mon Feb 07 08:42:14 2022 +0100 @@ -79,7 +79,17 @@ add_custom_target(irccd-plugin-${PLG_NAME} SOURCES ${PLG_SCRIPT}) set_target_properties(irccd-plugin-${PLG_NAME} PROPERTIES FOLDER plugins) - install(FILES ${PLG_SCRIPT} DESTINATION ${CMAKE_INSTALL_LIBDIR}/irccd) + + cmake_path(GET PLG_SCRIPT FILENAME filename) + configure_file( + ${PLG_SCRIPT} + ${CMAKE_CURRENT_BINARY_DIR}/${filename} + @ONLY + ) + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${filename} + DESTINATION ${CMAKE_INSTALL_LIBDIR}/irccd + ) if (PLG_MAN) install( diff -r 1192e53e32d2 -r 2432d7bee8b2 irccd/jsapi-server.c --- a/irccd/jsapi-server.c Thu Feb 03 13:16:45 2022 +0100 +++ b/irccd/jsapi-server.c Mon Feb 07 08:42:14 2022 +0100 @@ -130,6 +130,11 @@ { duk_get_prop_string(ctx, 0, "channels"); + if (!duk_is_object(ctx, -1)) { + duk_pop(ctx); + return; + } + for (duk_enum(ctx, -1, 0); duk_next(ctx, -1, 1); ) { duk_get_prop_string(ctx, -1, "name"); duk_get_prop_string(ctx, -2, "password"); diff -r 1192e53e32d2 -r 2432d7bee8b2 irccd/peer.c --- a/irccd/peer.c Thu Feb 03 13:16:45 2022 +0100 +++ b/irccd/peer.c Mon Feb 07 08:42:14 2022 +0100 @@ -339,7 +339,7 @@ } /* - * PLUGIN-RELOAD plugin + * PLUGIN-RELOAD [plugin] */ static int cmd_plugin_reload(struct peer *p, char *line) @@ -347,12 +347,14 @@ struct irc_plugin *plg; const char *args[1] = {0}; - if (parse(line, args, 1) != 1) - return EINVAL; - if (!(plg = irc_bot_plugin_get(args[0]))) - return peer_send(p, "could not reload plugin: %s", strerror(ENOENT)), 0; + if (parse(line, args, 1) == 1) { + if (!(plg = irc_bot_plugin_get(args[0]))) + return peer_send(p, "could not reload plugin: %s", strerror(ENOENT)), 0; - irc_plugin_reload(plg); + irc_plugin_reload(plg); + } else + DL_FOREACH(irc.plugins, plg) + irc_plugin_reload(plg); return ok(p); } diff -r 1192e53e32d2 -r 2432d7bee8b2 irccdctl/irccdctl.c --- a/irccdctl/irccdctl.c Thu Feb 03 13:16:45 2022 +0100 +++ b/irccdctl/irccdctl.c Mon Feb 07 08:42:14 2022 +0100 @@ -942,10 +942,10 @@ fprintf(stderr, " irccdctl plugin-info id\n"); fprintf(stderr, " irccdctl plugin-list\n"); fprintf(stderr, " irccdctl plugin-load name\n"); - fprintf(stderr, " irccdctl plugin-path [variable [value]]\n"); - fprintf(stderr, " irccdctl plugin-template [variable [value]]\n"); - fprintf(stderr, " irccdctl plugin-reload [plugin]\n"); - fprintf(stderr, " irccdctl plugin-unload [plugin]\n"); + fprintf(stderr, " irccdctl plugin-path id [variable [value]]\n"); + fprintf(stderr, " irccdctl plugin-template id [variable [value]]\n"); + fprintf(stderr, " irccdctl plugin-reload [id]\n"); + fprintf(stderr, " irccdctl plugin-unload [id]\n"); fprintf(stderr, " irccdctl rule-add [-c channel] [-e event] [-i index] [-o origin] [-p plugin] [-s server] accept|drop\n"); fprintf(stderr, " irccdctl rule-edit [-a accept|drop] [-c|C channel] [-e|E event] [-o|O origin] [-s|S server] index\n"); fprintf(stderr, " irccdctl rule-list\n"); diff -r 1192e53e32d2 -r 2432d7bee8b2 lib/irccd/irccd.c --- a/lib/irccd/irccd.c Thu Feb 03 13:16:45 2022 +0100 +++ b/lib/irccd/irccd.c Mon Feb 07 08:42:14 2022 +0100 @@ -282,7 +282,7 @@ irc_server_incref(s); irc_server_connect(s); - LL_PREPEND(irc.servers, s); + LL_APPEND(irc.servers, s); } struct irc_server * @@ -624,7 +624,7 @@ queue = NULL; LL_FOREACH(irc.servers, s) - irc_server_flush(s, fds); + irc_server_flush(s, fds++); } int diff -r 1192e53e32d2 -r 2432d7bee8b2 lib/irccd/server.c --- a/lib/irccd/server.c Thu Feb 03 13:16:45 2022 +0100 +++ b/lib/irccd/server.c Mon Feb 07 08:42:14 2022 +0100 @@ -812,6 +812,8 @@ irc_server_connect(s); break; case IRC_SERVER_STATE_CONNECTED: + assert(pfd->fd == s->conn->fd); + if (difftime(time(NULL), s->last_tp) >= TIMEOUT) { irc_log_warn("server %s: no message in more than %u seconds", s->name, TIMEOUT); fail(s); @@ -821,6 +823,8 @@ } break; case IRC_SERVER_STATE_CONNECTING: + assert(pfd->fd == s->conn->fd); + /* * Now the conn object is ready which means the server has * to authenticate. diff -r 1192e53e32d2 -r 2432d7bee8b2 man/irccdctl.1 --- a/man/irccdctl.1 Thu Feb 03 13:16:45 2022 +0100 +++ b/man/irccdctl.1 Mon Feb 07 08:42:14 2022 +0100 @@ -63,10 +63,11 @@ .\" plugin-reload .Nm .Cm plugin-reload -.Ar plugin +.Op Ar id .\" plugin-unload +.Nm .Cm plugin-unload -.Ar plugin +.Op Ar id .\" rule-add .Nm .Cm rule-add diff -r 1192e53e32d2 -r 2432d7bee8b2 plugins/ask/ask.js --- a/plugins/ask/ask.js Thu Feb 03 13:16:45 2022 +0100 +++ b/plugins/ask/ask.js Mon Feb 07 08:42:14 2022 +0100 @@ -21,7 +21,7 @@ author: "David Demelier ", license: "ISC", summary: "Crazy module for asking a medium", - version: "@IRCCD_VERSION@" + version: "@irccd_VERSION@" }; // Modules. diff -r 1192e53e32d2 -r 2432d7bee8b2 plugins/auth/auth.js --- a/plugins/auth/auth.js Thu Feb 03 13:16:45 2022 +0100 +++ b/plugins/auth/auth.js Mon Feb 07 08:42:14 2022 +0100 @@ -21,7 +21,7 @@ author: "David Demelier ", license: "ISC", summary: "Generic plugin to authenticate to services", - version: "@IRCCD_VERSION@" + version: "@irccd_VERSION@" }; // Modules. diff -r 1192e53e32d2 -r 2432d7bee8b2 plugins/hangman/hangman.js --- a/plugins/hangman/hangman.js Thu Feb 03 13:16:45 2022 +0100 +++ b/plugins/hangman/hangman.js Mon Feb 07 08:42:14 2022 +0100 @@ -21,7 +21,7 @@ author: "David Demelier ", license: "ISC", summary: "A hangman game for IRC", - version: "@IRCCD_VERSION@" + version: "@irccd_VERSION@" }; // Modules. diff -r 1192e53e32d2 -r 2432d7bee8b2 plugins/history/history.js --- a/plugins/history/history.js Thu Feb 03 13:16:45 2022 +0100 +++ b/plugins/history/history.js Mon Feb 07 08:42:14 2022 +0100 @@ -21,7 +21,7 @@ author: "David Demelier ", license: "ISC", summary: "track nickname's history", - version: "@IRCCD_VERSION@" + version: "@irccd_VERSION@" }; // Modules. diff -r 1192e53e32d2 -r 2432d7bee8b2 plugins/joke/joke.js --- a/plugins/joke/joke.js Thu Feb 03 13:16:45 2022 +0100 +++ b/plugins/joke/joke.js Mon Feb 07 08:42:14 2022 +0100 @@ -21,7 +21,7 @@ author: "David Demelier ", license: "ISC", summary: "display some jokes", - version: "@IRCCD_VERSION@" + version: "@irccd_VERSION@" }; // Modules. diff -r 1192e53e32d2 -r 2432d7bee8b2 plugins/logger/logger.js --- a/plugins/logger/logger.js Thu Feb 03 13:16:45 2022 +0100 +++ b/plugins/logger/logger.js Mon Feb 07 08:42:14 2022 +0100 @@ -21,7 +21,7 @@ author: "David Demelier ", license: "ISC", summary: "A plugin to log everything", - version: "@IRCCD_VERSION@" + version: "@irccd_VERSION@" }; // Modules. diff -r 1192e53e32d2 -r 2432d7bee8b2 plugins/plugin/plugin.js --- a/plugins/plugin/plugin.js Thu Feb 03 13:16:45 2022 +0100 +++ b/plugins/plugin/plugin.js Mon Feb 07 08:42:14 2022 +0100 @@ -21,7 +21,7 @@ author: "David Demelier ", license: "ISC", summary: "A plugin to inspect plugins", - version: "@IRCCD_VERSION@" + version: "@irccd_VERSION@" }; // Modules. diff -r 1192e53e32d2 -r 2432d7bee8b2 plugins/roulette/roulette.js --- a/plugins/roulette/roulette.js Thu Feb 03 13:16:45 2022 +0100 +++ b/plugins/roulette/roulette.js Mon Feb 07 08:42:14 2022 +0100 @@ -21,7 +21,7 @@ author: "David Demelier ", license: "ISC", summary: "A russian roulette for IRC", - version: "@IRCCD_VERSION@" + version: "@irccd_VERSION@" }; // Modules. diff -r 1192e53e32d2 -r 2432d7bee8b2 plugins/tictactoe/tictactoe.js --- a/plugins/tictactoe/tictactoe.js Thu Feb 03 13:16:45 2022 +0100 +++ b/plugins/tictactoe/tictactoe.js Mon Feb 07 08:42:14 2022 +0100 @@ -21,7 +21,7 @@ author: "David Demelier ", license: "ISC", summary: "A tictactoe game for IRC", - version: "@IRCCD_VERSION@" + version: "@irccd_VERSION@" }; // Modules. diff -r 1192e53e32d2 -r 2432d7bee8b2 tests/test-bot.c --- a/tests/test-bot.c Thu Feb 03 13:16:45 2022 +0100 +++ b/tests/test-bot.c Mon Feb 07 08:42:14 2022 +0100 @@ -50,25 +50,25 @@ s = s->next; GREATEST_ASSERT(!s); - /* irc.servers -> s2 -> s1 */ + /* irc.servers -> s1 -> s2 */ irc_bot_server_add(s2); s = irc.servers; GREATEST_ASSERT_EQ(1, s->refc); - GREATEST_ASSERT_EQ(s, s2); + GREATEST_ASSERT_EQ(s, s1); s = s->next; - GREATEST_ASSERT_EQ(s, s1); + GREATEST_ASSERT_EQ(s, s2); s = s->next; GREATEST_ASSERT(!s); - /* irc.servers -> s3 -> s2 -> s1 */ + /* irc.servers -> s1 -> s2 -> s3 */ irc_bot_server_add(s3); s = irc.servers; GREATEST_ASSERT_EQ(1, s->refc); - GREATEST_ASSERT_EQ(s, s3); + GREATEST_ASSERT_EQ(s, s1); s = s->next; GREATEST_ASSERT_EQ(s, s2); s = s->next; - GREATEST_ASSERT_EQ(s, s1); + GREATEST_ASSERT_EQ(s, s3); s = s->next; GREATEST_ASSERT(!s); @@ -89,7 +89,7 @@ irc_server_incref(s2); irc_server_incref(s3); - /* irc.servers -> s3 -> s2 -> s1 */ + /* irc.servers -> s1 -> s2 -> s3 */ irc_bot_server_add(s1); irc_bot_server_add(s2); irc_bot_server_add(s3); @@ -101,9 +101,9 @@ GREATEST_ASSERT_EQ(1, s2->refc); GREATEST_ASSERT_EQ(2, s3->refc); s = irc.servers; - GREATEST_ASSERT_EQ(s, s3); + GREATEST_ASSERT_EQ(s, s1); s = s->next; - GREATEST_ASSERT_EQ(s, s1); + GREATEST_ASSERT_EQ(s, s3); s = s->next; GREATEST_ASSERT(!s);