changeset 680:900ca2f95838

Irccd: do not allow multiple server with same name
author David Demelier <markand@malikania.fr>
date Thu, 12 Apr 2018 20:45:02 +0200
parents 4960c858fff5
children f16a876e4a6a
files libirccd/irccd/daemon/server.cpp libirccd/irccd/daemon/service/server_service.cpp
diffstat 2 files changed, 8 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libirccd/irccd/daemon/server.cpp	Thu Apr 12 20:30:30 2018 +0200
+++ b/libirccd/irccd/daemon/server.cpp	Thu Apr 12 20:45:02 2018 +0200
@@ -704,6 +704,8 @@
                 return "server is not connected";
             case server_error::already_connected:
                 return "server is already connected";
+            case server_error::already_exists:
+                return "server already exists";
             case server_error::invalid_port:
                 return "invalid port number specified";
             case server_error::invalid_reconnect_tries:
--- a/libirccd/irccd/daemon/service/server_service.cpp	Thu Apr 12 20:30:30 2018 +0200
+++ b/libirccd/irccd/daemon/service/server_service.cpp	Thu Apr 12 20:45:02 2018 +0200
@@ -521,7 +521,12 @@
             continue;
 
         try {
-            add(server_util::from_config(irccd_.get_service(), cfg, section));
+            auto server = server_util::from_config(irccd_.get_service(), cfg, section);
+
+            if (has(server->get_name()))
+                throw server_error(server_error::already_exists);
+
+            add(std::move(server));
         } catch (const std::exception& ex) {
             irccd_.get_log().warning() << "server " << section.get("name").value() << ": "
                 << ex.what() << std::endl;