changeset 1015:d55e98383ad0

irccd: protect already existing servers, plugins and hooks
author David Demelier <markand@malikania.fr>
date Wed, 17 Feb 2021 22:50:50 +0100
parents cacb9e865635
children c02a5c9cdde4
files irccd/conf.y lib/irccd/irccd.c
diffstat 2 files changed, 9 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/irccd/conf.y	Wed Feb 17 20:43:53 2021 +0100
+++ b/irccd/conf.y	Wed Feb 17 22:50:50 2021 +0100
@@ -430,6 +430,8 @@
 		struct string *str;
 		char *at;
 
+		if (irc_bot_server_get($2))
+			errx(1, "server %s already exists", $2);
 		if (!$4->hostname)
 			errx(1, "missing server hostname");
 		if (!$4->nickname)
@@ -546,6 +548,8 @@
 		struct pair *kv;
 		const char *location = $3 ? $3->location : NULL;
 
+		if (irc_bot_plugin_get($2))
+			errx(1, "plugin %s already exists", $2);
 		if (!(p = irc_bot_plugin_find($2, location)))
 			goto cleanup;
 
@@ -577,6 +581,9 @@
 hook
 	: T_HOOK T_STRING T_TO T_STRING
 	{
+		if (irc_bot_hook_get($2))
+			errx(1, "hook %s already exists", $2);
+
 		irc_bot_hook_add(irc_hook_new($2, $4));
 
 		free($2);
--- a/lib/irccd/irccd.c	Wed Feb 17 20:43:53 2021 +0100
+++ b/lib/irccd/irccd.c	Wed Feb 17 22:50:50 2021 +0100
@@ -277,6 +277,7 @@
 irc_bot_server_add(struct irc_server *s)
 {
 	assert(s);
+	assert(!irc_bot_server_get(s->name));
 
 	irc_log_info("irccd: added new server: %s", s->name);
 
@@ -332,6 +333,7 @@
 irc_bot_plugin_add(struct irc_plugin *p)
 {
 	assert(p);
+	assert(!irc_bot_plugin_get(p->name));
 
 	LIST_INSERT_HEAD(&irc.plugins, p, link);