]> jfr.im git - solanum.git/blobdiff - modules/m_starttls.c
m_info: Correct description of general::client_exit like in example confs.
[solanum.git] / modules / m_starttls.c
index b976f794bf76568879f457624857bfbbf5e96edf..6159cac5281a98311b84d39816e629c9d207ab25 100644 (file)
@@ -51,6 +51,12 @@ mr_starttls(struct Client *client_p, struct Client *source_p, int parc, const ch
        if (!MyConnect(client_p))
                return 0;
 
+       if (!ssl_ok || !get_ssld_count())
+       {
+               sendto_one_numeric(client_p, ERR_STARTTLS, form_str(ERR_STARTTLS), "TLS is not configured");
+               return 1;
+       }
+
        if (rb_socketpair(AF_UNIX, SOCK_STREAM, 0, &F[0], &F[1], "STARTTLS ssld session") == -1)
        {
                ilog_error("error creating SSL/TLS socketpair for ssld slave");
@@ -69,13 +75,17 @@ mr_starttls(struct Client *client_p, struct Client *source_p, int parc, const ch
        ctl = start_ssld_accept(client_p->localClient->F, F[1], rb_get_fd(F[0]));
        if (ctl != NULL)
        {
+               del_from_cli_fd_hash(client_p);
                client_p->localClient->F = F[0];
+               add_to_cli_fd_hash(client_p);
                client_p->localClient->ssl_ctl = ctl;
                SetSSL(client_p);
        }
        else
                return 1;
 
+#else
+       sendto_one_numeric(client_p, ERR_STARTTLS, form_str(ERR_STARTTLS), "TLS is not configured");
 #endif
        return 0;
 }