summaryrefslogtreecommitdiffstats
path: root/src/login-common/sasl-server.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/login-common/sasl-server.h')
-rw-r--r--src/login-common/sasl-server.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/login-common/sasl-server.h b/src/login-common/sasl-server.h
new file mode 100644
index 0000000..66d0cb4
--- /dev/null
+++ b/src/login-common/sasl-server.h
@@ -0,0 +1,41 @@
+#ifndef SASL_SERVER_H
+#define SASL_SERVER_H
+
+struct client;
+
+enum sasl_server_reply {
+ SASL_SERVER_REPLY_SUCCESS,
+ SASL_SERVER_REPLY_AUTH_FAILED,
+ SASL_SERVER_REPLY_AUTH_ABORTED,
+ SASL_SERVER_REPLY_MASTER_FAILED,
+ SASL_SERVER_REPLY_CONTINUE
+};
+
+enum sasl_server_auth_flags {
+ /* Allow the use of private mechanism */
+ SASL_SERVER_AUTH_FLAG_PRIVATE = BIT(0),
+ /* Signal to the post-login service that this is an implicit login,
+ meaning that no command success reply is expected. */
+ SASL_SERVER_AUTH_FLAG_IMPLICIT = BIT(1),
+};
+
+typedef void sasl_server_callback_t(struct client *client,
+ enum sasl_server_reply reply,
+ const char *data, const char *const *args);
+
+const struct auth_mech_desc *
+sasl_server_get_advertised_mechs(struct client *client, unsigned int *count_r);
+const struct auth_mech_desc *
+sasl_server_find_available_mech(struct client *client, const char *name);
+
+void sasl_server_auth_begin(struct client *client,
+ const char *service, const char *mech_name,
+ enum sasl_server_auth_flags flags,
+ const char *initial_resp_base64,
+ sasl_server_callback_t *callback);
+void sasl_server_auth_delayed_final(struct client *client);
+void sasl_server_auth_failed(struct client *client, const char *reason,
+ const char *code) ATTR_NULL(3);
+void sasl_server_auth_abort(struct client *client);
+
+#endif