]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: auth-sasl - Add auth_sasl_request_output()
authorStephan Bosch <stephan.bosch@open-xchange.com>
Mon, 13 Mar 2023 23:21:23 +0000 (00:21 +0100)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Thu, 9 Oct 2025 08:41:22 +0000 (08:41 +0000)
src/auth/auth-sasl.c
src/auth/auth-sasl.h
src/auth/sasl-server.h

index 9ae6935210fd06d1cf6c89dd85ab52ee63722ea6..282d8d2a82357f58ac93749dedd1a14583d3616e 100644 (file)
@@ -1,9 +1,36 @@
 /* Copyright (c) 2023 Dovecot authors, see the included COPYING file */
 
 #include "lib.h"
+#include "sasl-server-protected.h" // FIXME: Use public API only
 #include "auth.h"
 #include "auth-common.h"
 #include "auth-sasl.h"
+#include "auth-request.h"
+
+/*
+ * Request
+ */
+
+void
+auth_sasl_request_output(struct auth_request *request,
+                        const struct sasl_server_output *output)
+{
+       switch (output->status) {
+       case SASL_SERVER_OUTPUT_INTERNAL_FAILURE:
+               auth_request_internal_failure(request);
+               break;
+       case SASL_SERVER_OUTPUT_FAILURE:
+               auth_request_fail(request);
+               break;
+       case SASL_SERVER_OUTPUT_CONTINUE:
+               auth_request_handler_reply_continue(request, output->data,
+                                                   output->data_size);
+               break;
+       case SASL_SERVER_OUTPUT_SUCCESS:
+               auth_request_success(request, output->data, output->data_size);
+               break;
+       }
+}
 
 /*
  * Mechanisms
index 30b71be944dac48d08509b6f9be245b0b7fcb045..9ea7f8d4d44e39e3f6e178b74a6c5ed4581bd099 100644 (file)
@@ -1,6 +1,9 @@
 #ifndef AUTH_SASL_H
 #define AUTH_SASL_H
 
+#include "auth-request.h" // FIXME: remove
+#include "sasl-server.h"
+
 /* Used only for string sanitization. */
 #define AUTH_SASL_MAX_MECH_NAME_LEN 64
 
@@ -8,6 +11,14 @@ struct auth_sasl_mech_module {
        const char *mech_name;
 };
 
+/*
+ * Request
+ */
+
+void
+auth_sasl_request_output(struct auth_request *request,
+                        const struct sasl_server_output *output);
+
 /*
  * Mechanisms
  */
index 61052f37b82233c6140dbfe95858fc4a080f1a64..063c85d5376f0965e531441b18f56a26a91b5b82 100644 (file)
@@ -18,4 +18,22 @@ enum mech_passdb_need {
        MECH_PASSDB_NEED_SET_CREDENTIALS
 };
 
+enum sasl_server_output_status {
+       /* Internal failure */
+       SASL_SERVER_OUTPUT_INTERNAL_FAILURE = -2,
+       /* Authentication failed */
+       SASL_SERVER_OUTPUT_FAILURE = -1,
+       /* Client is challlenged to continue authentication */
+       SASL_SERVER_OUTPUT_CONTINUE = 0,
+       /* Authentication succeeded */
+       SASL_SERVER_OUTPUT_SUCCESS = 1,
+};
+
+struct sasl_server_output {
+       enum sasl_server_output_status status;
+
+       const void *data;
+       size_t data_size;
+};
+
 #endif