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);
}
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);
}
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);
}
{
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);
}