/* 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
#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
const char *mech_name;
};
+/*
+ * Request
+ */
+
+void
+auth_sasl_request_output(struct auth_request *request,
+ const struct sasl_server_output *output);
+
/*
* Mechanisms
*/
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