应用程序通过 libsasl API 与 libsasl 进行通信。libsasl 可通过应用程序注册的回调方式请求其他信息。应用程序不会直接调用插件,而只是通过 libsasl 进行调用。一般情况下,插件会调用 libsasl 框架的插件,随后这些插件调用应用程序的回调。SASL 插件还可以直接调用应用程序,不过应用程序不知道调用来自插件还是来自 libsasl。
回调在以下几个方面非常有用。
libsasl 可以使用回调获取完成验证所需的信息。
libsasl 消费方应用程序可以使用回调更改插件和配置数据的搜索路径、验证文件以及更改各种缺省行为。
服务器可以使用回调来更改授权策略、提供不同的口令验证方法以及获取口令更改信息。
客户机和服务器可以使用回调来指定错误消息的语言。
应用程序可以注册两种回调:全局回调和会话回调。此外,libsasl 定义了大量用于为不同种类的回调注册的回调标识符。如果未注册给定类型的回调,则 libsasl 将执行缺省操作。
会话回调将覆盖全局回调。如果为给定 ID 指定了会话回调,则不会为该会话调用全局回调。某些回调必须是全局的,因为这些回调发生在会话之外。以下实例要求使用全局回调:
确定要装入的插件的搜索路径
验证插件
配置数据的位置
记录错误消息
对 libsasl 或其插件的其他全局配置
可以使用给定 SASL 回调 ID 的 NULL 回调函数来注册 SASL 回调。NULL 回调函数指示装配客户机的目的是为了提供所需的数据。所有的 SASL 回调 ID 都以前缀 SASL_CB_ 开头。
SASL 提供以下可供客户机或服务器使用的回调:
获取 SASL 选项。选项用于修改 libsasl(3LIB) 和相关插件的行为。可由客户机或服务器使用。
获取以冒号分隔的 SASL 插件搜索路径列表。缺省路径取决于以下体系结构:
32 位 SPARC 体系结构: /usr/lib/sasl
32 位 x86 体系结构: /usr/lib/sasl
64 位 SPARC 体系结构: /usr/lib/sasl/sparcv9
x64 体系结构: /usr/lib/sasl/amd64
为客户机和服务器错误消息和客户机提示指定以逗号分隔的 RFC 1766 语言代码列表(按优先级顺序)。缺省设置为 i-default。
SASL 提供以下仅限客户机使用的回调:
SASL 提供以下仅限服务器使用的回调:
检查是否授权经过验证的用户代表指定用户执行操作。如果未注册此回调,则经过验证的用户与要授权的用户必须是同一用户。如果这些 ID 不同,则验证将失败。请使用服务器应用程序来维护非标准授权策略。
首次初始化 SASL 库时,服务器和客户机会声明所有必要的全局回调。执行 SASL 会话之前或期间可以使用全局回调。初始化之前,回调将执行诸如装入插件、记录数据和读取配置文件之类的任务。SASL 会话开始时,可以声明其他回调。这类回调可以覆盖全局回调(如果必要)。