]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: sasl-server - Add protocol field to struct sasl_server_mech_request
authorStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 22 Mar 2023 05:19:06 +0000 (06:19 +0100)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Thu, 9 Oct 2025 08:41:22 +0000 (08:41 +0000)
Used by GSSAPI mechanisms.

src/auth/auth-sasl.c
src/auth/sasl-server-mech-gssapi.c
src/auth/sasl-server-protected.h
src/auth/sasl-server-request.c
src/auth/sasl-server.h

index 8ddf5588bd0286304cce5fe1b48a129add2765a2..90a597ee982a14f8bdef801d50b78e9753a70ef3 100644 (file)
@@ -243,10 +243,28 @@ auth_sasl_request_set_credentials(struct sasl_server_req_ctx *rctx,
                                     set_credentials_callback);
 }
 
+static const char *
+auth_sasl_translate_protocol_name(struct auth_request *request)
+{
+       i_assert(request->fields.protocol != NULL);
+
+       const char *protocol = request->fields.protocol;
+
+       /* Translate to SASL/GSSAPI/Kerberos service name (IANA-registered) */
+       if (strcasecmp(protocol, "POP3") == 0) {
+               /* The standard POP3 service name with SASL/GSSAPI/Kerberos is
+                  called just "pop". */
+               return "pop";
+       }
+
+       return t_str_lcase(protocol);
+}
+
 void auth_sasl_request_init(struct auth_request *request,
                            const struct sasl_server_mech_def *mech)
 {
        sasl_server_request_create(&request->sasl.req, mech,
+                                  auth_sasl_translate_protocol_name(request),
                                   request->mech_event);
 }
 
index 3606d2b87eb351f205171393dd57c7ba3c81c320..926a8241e382be4233ee34fade919a02a1888d44 100644 (file)
@@ -116,7 +116,6 @@ obtain_service_credentials(struct gssapi_auth_request *request,
        string_t *principal_name;
        gss_buffer_desc inbuf;
        gss_name_t gss_principal;
-       const char *service_name;
 
        if (!gssapi_initialized) {
                gssapi_initialized = TRUE;
@@ -130,16 +129,8 @@ obtain_service_credentials(struct gssapi_auth_request *request,
                return GSS_S_COMPLETE;
        }
 
-       if (strcasecmp(auth_request->request->fields.protocol, "POP3") == 0) {
-               /* The standard POP3 service name with GSSAPI is called
-                  just "pop". */
-               service_name = "pop";
-       } else {
-               service_name = t_str_lcase(auth_request->request->fields.protocol);
-       }
-
        principal_name = t_str_new(128);
-       str_append(principal_name, service_name);
+       str_append(principal_name, auth_request->protocol);
        str_append_c(principal_name, '@');
        str_append(principal_name, auth_request->request->set->gssapi_hostname);
 
index 8e6df4065a5c3356117111d1f7edac66872d011a..ba1da40e6f0198cafa8df2033dd095d94350565f 100644 (file)
@@ -46,6 +46,7 @@ struct sasl_server_mech_request {
        const struct sasl_server_mech_def *mech;
        struct sasl_server_request *req;
        struct event *mech_event;
+       const char *protocol;
 
        // FIXME: To be removed
        struct auth_request *request;
index cd36244524b911221ee4ae3d9c473af5b0d36c70..6d4e048617f09eaca411d7c008c099b7fa088921 100644 (file)
@@ -11,6 +11,7 @@
 
 void sasl_server_request_create(struct sasl_server_req_ctx *rctx,
                                const struct sasl_server_mech_def *mech,
+                               const char *protocol,
                                struct event *event_parent)
 {
        struct auth_request *request =
@@ -36,6 +37,7 @@ void sasl_server_request_create(struct sasl_server_req_ctx *rctx,
        mreq->request = request;
        mreq->mech = mech;
        mreq->mech_event = event_parent;
+       mreq->protocol = p_strdup(mreq->pool, protocol);
 
        req->mech = mreq;
        rctx->mech = mech;
index d6aa1f7ed383f2a3e3dc3a32289f1c0e15861930..eb2cc3c66484490fb03a7629634c2986ce2abd19 100644 (file)
@@ -88,6 +88,7 @@ struct sasl_server_req_ctx {
 
 void sasl_server_request_create(struct sasl_server_req_ctx *rctx,
                                const struct sasl_server_mech_def *mech,
+                               const char *protocol,
                                struct event *event_parent);
 void sasl_server_request_destroy(struct sasl_server_req_ctx *rctx);