]> jfr.im git - solanum.git/blobdiff - modules/m_sasl.c
m_info: Correct description of general::client_exit like in example confs.
[solanum.git] / modules / m_sasl.c
index b17e6bdc0f778404d5e22ab21c16a87bac2f4bf0..8dbbf0e7f04926e860a01f1c7af2e58d1688f351 100644 (file)
@@ -77,6 +77,12 @@ mr_authenticate(struct Client *client_p, struct Client *source_p,
        if(!IsCapable(source_p, CLICAP_SASL))
                return 0;
 
+       if (strlen(client_p->id) == 3)
+       {
+               exit_client(client_p, client_p, client_p, "Mixing client and server protocol");
+               return 0;
+       }
+
        if(source_p->preClient->sasl_complete)
        {
                sendto_one(source_p, form_str(ERR_SASLALREADY), me.name, EmptyString(source_p->name) ? "*" : source_p->name);
@@ -100,12 +106,18 @@ mr_authenticate(struct Client *client_p, struct Client *source_p,
                agent_p = find_id(source_p->preClient->sasl_agent);
 
        if(agent_p == NULL)
-               sendto_server(NULL, NULL, CAP_TS6|CAP_ENCAP, NOCAPS, ":%s ENCAP * SASL %s * S %s", me.id,
-                               source_p->id, parv[1]);
+       {
+               if (!strcmp(parv[1], "EXTERNAL") && source_p->certfp != NULL)
+                       sendto_server(NULL, NULL, CAP_TS6|CAP_ENCAP, NOCAPS, ":%s ENCAP * SASL %s * S %s %s", me.id,
+                                       source_p->id, parv[1],
+                                       source_p->certfp);
+               else
+                       sendto_server(NULL, NULL, CAP_TS6|CAP_ENCAP, NOCAPS, ":%s ENCAP * SASL %s * S %s", me.id,
+                                       source_p->id, parv[1]);
+       }
        else
                sendto_one(agent_p, ":%s ENCAP %s SASL %s %s C %s", me.id, agent_p->servptr->name,
                                source_p->id, agent_p->id, parv[1]);
-
        source_p->preClient->sasl_out++;
 
        return 0;