]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
global: Provide protocol, host and port SASL client settings where possible
authorStephan Bosch <stephan.bosch@open-xchange.com>
Thu, 7 Aug 2025 03:22:05 +0000 (05:22 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Thu, 9 Oct 2025 08:41:22 +0000 (08:41 +0000)
src/doveadm/doveadm-auth.c
src/imap-login/imap-proxy.c
src/lib-imap-client/imapc-connection.c
src/lib-smtp/smtp-client-connection.c
src/pop3-login/pop3-proxy.c

index 3c3992600ef79b466b9ea799eb55219b8833e766..5a92ada87b4ac5e04b9a4c26d7fddb5ebd1b7fb5 100644 (file)
@@ -340,6 +340,23 @@ static void cmd_auth_init_sasl_client(struct authtest_input *input)
        }
        sasl_set.password = input->password;
 
+       /* Translate to SASL/GSSAPI/Kerberos service name (IANA-registered) */
+       if (strcasecmp(input->info.protocol, "POP3") == 0)
+               sasl_set.protocol = "pop";
+       else if (strcasecmp(input->info.protocol, "Submission") == 0 ||
+                strcasecmp(input->info.protocol, "LMTP") == 0)
+               sasl_set.protocol = "smtp";
+       else
+               sasl_set.protocol = input->info.protocol;
+
+       if (input->info.local_name != NULL)
+               sasl_set.host = input->info.local_name;
+       else if (input->info.local_ip.family != 0)
+               sasl_set.host = net_ip2addr(&input->info.local_ip);
+       else
+               sasl_set.host = "localhost";
+       sasl_set.port = input->info.local_port;
+
        input->sasl_client = dsasl_client_new(input->sasl_mech, &sasl_set);
        dsasl_client_enable_channel_binding(
                input->sasl_client, SSL_IOSTREAM_PROTOCOL_VERSION_TLS1_3,
index b8901625349a3f4b35ea101a90a3af5538987e67..94fefb857f38c0883145ee993895449e50869eab 100644 (file)
@@ -154,6 +154,9 @@ static int proxy_write_login(struct imap_client *client, string_t *str)
                client->common.proxy_master_user : client->common.proxy_user;
        sasl_set.authzid = client->common.proxy_user;
        sasl_set.password = client->common.proxy_password;
+       sasl_set.protocol = "imap";
+       sasl_set.host = login_proxy_get_host(client->common.login_proxy);
+       sasl_set.port = login_proxy_get_port(client->common.login_proxy);
        client->common.proxy_sasl_client =
                dsasl_client_new(client->common.proxy_mech, &sasl_set);
        mech_name = dsasl_client_mech_get_name(client->common.proxy_mech);
index 590e4c5fac8e6cb5c4e4d14294512425fda1accd..05ec2136b2402c25a265d83ccb5ae5fe0909948a 100644 (file)
@@ -1117,6 +1117,9 @@ static void imapc_connection_authenticate(struct imapc_connection *conn)
                sasl_set.authzid = set->imapc_user;
        }
        sasl_set.password = conn->client->password;
+       sasl_set.protocol = "imap";
+       sasl_set.host = conn->client->set->imapc_host;
+       sasl_set.port = conn->client->set->imapc_port;
 
        if (sasl_mech == NULL)
                sasl_mech = &dsasl_client_mech_plain;
index a354d330266b918523bb871dfea81be22701570b..00c12b5f14dd73274a2e104152c37994f3a35c64 100644 (file)
@@ -950,6 +950,9 @@ smtp_client_connection_authenticate(struct smtp_client_connection *conn)
                sasl_set.authzid = set->username;
        }
        sasl_set.password = set->password;
+       sasl_set.protocol = "smtp";
+       sasl_set.host = conn->host;
+       sasl_set.port = conn->port;
 
        conn->sasl_client = dsasl_client_new(sasl_mech, &sasl_set);
 
index 39e1c8d3f3399534cc838c7a98a1b4e40dbf1528..4d36a1103c7bbf6a14977dedad260ce5237ca12a 100644 (file)
@@ -85,6 +85,9 @@ static int proxy_send_login(struct pop3_client *client, struct ostream *output)
                client->common.proxy_master_user : client->common.proxy_user;
        sasl_set.authzid = client->common.proxy_user;
        sasl_set.password = client->common.proxy_password;
+       sasl_set.protocol = "pop";
+       sasl_set.host = login_proxy_get_host(client->common.login_proxy);
+       sasl_set.port = login_proxy_get_port(client->common.login_proxy);
        client->common.proxy_sasl_client =
                dsasl_client_new(client->common.proxy_mech, &sasl_set);
        mech_name = dsasl_client_mech_get_name(client->common.proxy_mech);