changeset 1160:b6a0d9515c82

misc: merge from stable-4
author David Demelier <markand@malikania.fr>
date Mon, 07 Feb 2022 08:42:25 +0100
parents 4c9d2d5d126f (current diff) 2432d7bee8b2 (diff)
children 8278d14e7aaa
files CMakeLists.txt irccd/jsapi-server.c irccdctl/irccdctl.c
diffstat 21 files changed, 67 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsigs	Sun Feb 06 15:03:59 2022 +0100
+++ b/.hgsigs	Mon Feb 07 08:42:25 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==
--- a/.hgtags	Sun Feb 06 15:03:59 2022 +0100
+++ b/.hgtags	Mon Feb 07 08:42:25 2022 +0100
@@ -14,3 +14,4 @@
 49b25adcd313a1b6df225540b0a2107fb4607da5 3.1.0
 c0408dc4a74a19554ae7b024e9e609ac0478a021 3.1.1
 c421701054d4755ffab6662d26de46bbe1a024a9 4.0.0
+a362f8de153806d28b0c64730bc0233e1365dc00 4.0.1
--- a/CHANGES.md	Sun Feb 06 15:03:59 2022 +0100
+++ b/CHANGES.md	Mon Feb 07 08:42:25 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
 ======================
 
--- a/CMakeLists.txt	Sun Feb 06 15:03:59 2022 +0100
+++ b/CMakeLists.txt	Mon Feb 07 08:42:25 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"
--- a/cmake/IrccdDefinePlugin.cmake	Sun Feb 06 15:03:59 2022 +0100
+++ b/cmake/IrccdDefinePlugin.cmake	Mon Feb 07 08:42:25 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(
--- a/irccd/jsapi-server.c	Sun Feb 06 15:03:59 2022 +0100
+++ b/irccd/jsapi-server.c	Mon Feb 07 08:42:25 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");
--- a/irccd/peer.c	Sun Feb 06 15:03:59 2022 +0100
+++ b/irccd/peer.c	Mon Feb 07 08:42:25 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);
 }
--- a/irccdctl/irccdctl.c	Sun Feb 06 15:03:59 2022 +0100
+++ b/irccdctl/irccdctl.c	Mon Feb 07 08:42:25 2022 +0100
@@ -969,10 +969,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");
--- a/lib/irccd/irccd.c	Sun Feb 06 15:03:59 2022 +0100
+++ b/lib/irccd/irccd.c	Mon Feb 07 08:42:25 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
--- a/lib/irccd/server.c	Sun Feb 06 15:03:59 2022 +0100
+++ b/lib/irccd/server.c	Mon Feb 07 08:42:25 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.
--- a/man/irccdctl.1	Sun Feb 06 15:03:59 2022 +0100
+++ b/man/irccdctl.1	Mon Feb 07 08:42:25 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
--- a/plugins/ask/ask.js	Sun Feb 06 15:03:59 2022 +0100
+++ b/plugins/ask/ask.js	Mon Feb 07 08:42:25 2022 +0100
@@ -21,7 +21,7 @@
 	author: "David Demelier <markand@malikania.fr>",
 	license: "ISC",
 	summary: "Crazy module for asking a medium",
-	version: "@IRCCD_VERSION@"
+	version: "@irccd_VERSION@"
 };
 
 // Modules.
--- a/plugins/auth/auth.js	Sun Feb 06 15:03:59 2022 +0100
+++ b/plugins/auth/auth.js	Mon Feb 07 08:42:25 2022 +0100
@@ -21,7 +21,7 @@
 	author: "David Demelier <markand@malikania.fr>",
 	license: "ISC",
 	summary: "Generic plugin to authenticate to services",
-	version: "@IRCCD_VERSION@"
+	version: "@irccd_VERSION@"
 };
 
 // Modules.
--- a/plugins/hangman/hangman.js	Sun Feb 06 15:03:59 2022 +0100
+++ b/plugins/hangman/hangman.js	Mon Feb 07 08:42:25 2022 +0100
@@ -21,7 +21,7 @@
 	author: "David Demelier <markand@malikania.fr>",
 	license: "ISC",
 	summary: "A hangman game for IRC",
-	version: "@IRCCD_VERSION@"
+	version: "@irccd_VERSION@"
 };
 
 // Modules.
--- a/plugins/history/history.js	Sun Feb 06 15:03:59 2022 +0100
+++ b/plugins/history/history.js	Mon Feb 07 08:42:25 2022 +0100
@@ -21,7 +21,7 @@
 	author: "David Demelier <markand@malikania.fr>",
 	license: "ISC",
 	summary: "track nickname's history",
-	version: "@IRCCD_VERSION@"
+	version: "@irccd_VERSION@"
 };
 
 // Modules.
--- a/plugins/joke/joke.js	Sun Feb 06 15:03:59 2022 +0100
+++ b/plugins/joke/joke.js	Mon Feb 07 08:42:25 2022 +0100
@@ -21,7 +21,7 @@
 	author: "David Demelier <markand@malikania.fr>",
 	license: "ISC",
 	summary: "display some jokes",
-	version: "@IRCCD_VERSION@"
+	version: "@irccd_VERSION@"
 };
 
 // Modules.
--- a/plugins/logger/logger.js	Sun Feb 06 15:03:59 2022 +0100
+++ b/plugins/logger/logger.js	Mon Feb 07 08:42:25 2022 +0100
@@ -21,7 +21,7 @@
 	author: "David Demelier <markand@malikania.fr>",
 	license: "ISC",
 	summary: "A plugin to log everything",
-	version: "@IRCCD_VERSION@"
+	version: "@irccd_VERSION@"
 };
 
 // Modules.
--- a/plugins/plugin/plugin.js	Sun Feb 06 15:03:59 2022 +0100
+++ b/plugins/plugin/plugin.js	Mon Feb 07 08:42:25 2022 +0100
@@ -21,7 +21,7 @@
 	author: "David Demelier <markand@malikania.fr>",
 	license: "ISC",
 	summary: "A plugin to inspect plugins",
-	version: "@IRCCD_VERSION@"
+	version: "@irccd_VERSION@"
 };
 
 // Modules.
--- a/plugins/roulette/roulette.js	Sun Feb 06 15:03:59 2022 +0100
+++ b/plugins/roulette/roulette.js	Mon Feb 07 08:42:25 2022 +0100
@@ -21,7 +21,7 @@
 	author: "David Demelier <markand@malikania.fr>",
 	license: "ISC",
 	summary: "A russian roulette for IRC",
-	version: "@IRCCD_VERSION@"
+	version: "@irccd_VERSION@"
 };
 
 // Modules.
--- a/plugins/tictactoe/tictactoe.js	Sun Feb 06 15:03:59 2022 +0100
+++ b/plugins/tictactoe/tictactoe.js	Mon Feb 07 08:42:25 2022 +0100
@@ -21,7 +21,7 @@
 	author: "David Demelier <markand@malikania.fr>",
 	license: "ISC",
 	summary: "A tictactoe game for IRC",
-	version: "@IRCCD_VERSION@"
+	version: "@irccd_VERSION@"
 };
 
 // Modules.
--- a/tests/test-bot.c	Sun Feb 06 15:03:59 2022 +0100
+++ b/tests/test-bot.c	Mon Feb 07 08:42:25 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);