# HG changeset patch # User David Demelier # Date 1554142200 -7200 # Node ID b7ec41d2d5be05616e19f14a1cd3d84c55867229 # Parent 9516b33a8af5f0c0d39ca8b92dc5aacf7823fc54 irccd: protect ssl option in server-util diff -r 9516b33a8af5 -r b7ec41d2d5be libirccd-daemon/irccd/daemon/server_util.cpp --- a/libirccd-daemon/irccd/daemon/server_util.cpp Mon Mar 11 13:00:22 2019 +0100 +++ b/libirccd-daemon/irccd/daemon/server_util.cpp Mon Apr 01 20:10:00 2019 +0200 @@ -88,8 +88,18 @@ const auto ipv4 = sc.find("ipv4"); const auto ipv6 = sc.find("ipv6"); +#if defined(IRCCD_HAVE_SSL) if (ssl != sc.end()) toggle(sv, server::options::ssl, string_util::is_boolean(ssl->get_value())); +#else + if (ssl != sc.end()) { + if (string_util::is_boolean(ssl->get_value())) + throw server_error(server_error::ssl_disabled); + else + sv.set_options(sv.get_options() & server::options::ssl); + } +#endif + if (auto_rejoin != sc.end()) toggle(sv, server::options::auto_rejoin, string_util::is_boolean(auto_rejoin->get_value())); if (auto_reconnect != sc.end()) @@ -186,11 +196,12 @@ toggle(sv, server::options::auto_rejoin, *auto_rejoin); if (join_invite) toggle(sv, server::options::join_invite, *join_invite); + +#if defined(IRCCD_HAVE_SSL) if (ssl) toggle(sv, server::options::ssl, *ssl); - -#if !defined(IRCCD_HAVE_SSL) - if ((sv.get_options() & server::options::ssl) == server::options::ssl) +#else + if (ssl && *ssl) throw server_error(server_error::ssl_disabled); #endif