# HG changeset patch # User David Demelier # Date 1613598650 -3600 # Node ID d55e98383ad0cb20cb03ea1170c351f7aad9614e # Parent cacb9e8656357936c495261894d20377e86542a9 irccd: protect already existing servers, plugins and hooks diff -r cacb9e865635 -r d55e98383ad0 irccd/conf.y --- 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); diff -r cacb9e865635 -r d55e98383ad0 lib/irccd/irccd.c --- 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);