]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: auth-request - Move SASL_MECH_SEC_ALLOW_NULS check to sasl-server
authorStephan Bosch <stephan.bosch@open-xchange.com>
Tue, 21 Mar 2023 22:44:58 +0000 (23:44 +0100)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Thu, 9 Oct 2025 08:41:22 +0000 (08:41 +0000)
src/auth/auth-request.c
src/auth/sasl-server-request.c

index 490cb75f1af5be1537cac2bb1d38e90da3b597d7..abc5f6e1528d62a82780aec01fe59c69e2ebb6be 100644 (file)
@@ -424,30 +424,12 @@ bool auth_request_import_master(struct auth_request *request,
        return TRUE;
 }
 
-static bool
-auth_request_fail_on_nuls(struct auth_request *request,
-                         const unsigned char *data, size_t data_size)
-{
-       if ((request->mech->flags & SASL_MECH_SEC_ALLOW_NULS) != 0)
-               return FALSE;
-       if (memchr(data, '\0', data_size) != NULL) {
-               e_debug(request->mech_event, "Unexpected NUL in auth data");
-               auth_request_fail(request);
-               return TRUE;
-       }
-       return FALSE;
-}
-
 void auth_request_initial(struct auth_request *request)
 {
        i_assert(request->state == AUTH_REQUEST_STATE_NEW);
 
        auth_request_set_state(request, AUTH_REQUEST_STATE_MECH_CONTINUE);
 
-       if (auth_request_fail_on_nuls(request, request->initial_response,
-                                     request->initial_response_len))
-               return;
-
        auth_sasl_request_initial(request);
 }
 
@@ -465,9 +447,6 @@ void auth_request_continue(struct auth_request *request,
                return;
        }
 
-       if (auth_request_fail_on_nuls(request, data, data_size))
-               return;
-
        auth_request_refresh_last_access(request);
        auth_sasl_request_continue(request, data, data_size);
 }
index d13c084fca0912d33fc9fdf615b2409ac75c1fa0..d800e5669a3bba909cdcf70ac61d9a3ca693923b 100644 (file)
@@ -41,11 +41,30 @@ void sasl_server_request_destroy(struct auth_request *request)
                mreq->mech->auth_free(mreq);
 }
 
+static bool
+sasl_server_request_fail_on_nuls(struct sasl_server_mech_request *mreq,
+                                const unsigned char *data, size_t data_size)
+{
+       const struct sasl_server_mech_def *mech = mreq->mech;
+
+       if ((mech->flags & SASL_MECH_SEC_ALLOW_NULS) != 0)
+               return FALSE;
+       if (memchr(data, '\0', data_size) != NULL) {
+               e_debug(mreq->mech_event, "Unexpected NUL in auth data");
+               sasl_server_request_failure(mreq);
+               return TRUE;
+       }
+       return FALSE;
+}
+
 void sasl_server_request_initial(struct sasl_server_mech_request *mreq,
                                 const unsigned char *data, size_t data_size)
 {
        const struct sasl_server_mech_def *mech = mreq->mech;
 
+       if (sasl_server_request_fail_on_nuls(mreq, data, data_size))
+               return;
+
        i_assert(mech->auth_initial != NULL);
        mech->auth_initial(mreq, data, data_size);
 }
@@ -55,6 +74,9 @@ void sasl_server_request_input(struct sasl_server_mech_request *mreq,
 {
        const struct sasl_server_mech_def *mech = mreq->mech;
 
+       if (sasl_server_request_fail_on_nuls(mreq, data, data_size))
+               return;
+
        i_assert(mech->auth_continue != NULL);
        mech->auth_continue(mreq, data, data_size);
 }