客户机插件用于管理 SASL 协商的客户端。客户机插件通常随对应的服务器插件一同打包。客户机插件包含一种或多种客户端 SASL 机制。每种 SASL 客户机机制都支持验证、完整性和保密性(后两者是可选的)。每种机制都提供有关该机制的功能的信息:
最大 SSF
最大安全标志
插件功能
用于使用插件的回调和提示 ID
客户机插件必须导出 sasl_client_plug_init()。libsasl 将调用 sasl_client_plug_init() 来初始化客户机的插件。插件将返回 sasl_client_plug_t 结构。sasl_client_plug_t 将为 libsasl 提供以下用于调用机制的入口点:
mech_new()-客户机通过调用 sasl_client_start()(使用 mech_new())来启动连接。mech_new() 将执行特定于机制的初始化。如有必要,将分配连接上下文。
mech_step()-mech_step() 可通过 sasl_client_start() 和 sasl_client_step() 来进行调用。调用 mech_new() 后,mech_step() 将对客户端执行验证。如果验证成功,mech_step() 将返回 SASL_OK。如果需要更多数据,则将返回 SASL_CONTINUE。如果验证失败,则将返回 SASL 错误代码。如果出现错误,则将调用 seterror()。如果验证成功,则 mech_step() 必须返回包含相关安全层信息和回调的 sasl_out_params_t 结构。canon_user() 函数是此结构的一部分。客户机收到验证和授权 ID 时,必须调用 canon_user()。
mech_dispose()-mech_dispose() 是在安全关闭上下文时进行调用的。mech_dispose() 由 sasl_dispose() 进行调用。
mech_free()-mech_free() 是在 libsasl 关闭时进行调用的。插件的所有其余全局状态都是通过 mech_free() 释放的。