这是我第一次配置 SASL,我很迷茫。
我有一个 samba 4 作为 AD 控制器,并且安装了 kerberos。kinit 已经成功,但 SASL 无法验证任何内容
我尝试设置为 kerberos,错误如下:
root@mail:/usr/lib/sasl2# saslauthd -a kerberos5 -d saslauthd[20269]:主要:进程数:5 saslauthd[20269]:main:mech_option:空 saslauthd[20269]:主要:运行路径:/var/run/saslauthd saslauthd[20269]:主要:auth_mech:kerberos5 saslauthd[20269]:ipc_init:使用接受锁文件:/var/run/saslauthd/mux.accept saslauthd[20269]:detach_tty:主进程 pid 为:0 saslauthd[20269]:ipc_init: 正在监听套接字:/var/run/saslauthd/mux saslauthd[20269]:main:使用流程模型 saslauthd[20269] :have_baby : 分叉子节点:20270 saslauthd[20270]:get_accept_lock:已获取接受锁 saslauthd[20269] :have_baby : 分叉子节点:20271 saslauthd[20269] :have_baby : 分叉子节点:20272 saslauthd[20269] :have_baby : 分叉子节点:20273 saslauthd[20270]:rel_accept_lock:释放接受锁 saslauthd[20271]:get_accept_lock:已获取接受锁 saslauthd[20270]:do_auth:身份验证失败:[user=prd] [service=imap] [realm=innowareindonesia.co.id] [mech=kerberos5] [reason=saslauthd 内部错误]
当我尝试使用 LDAP 时,错误如下:
root@mail:/usr/lib/sasl2# saslauthd -a ldap -d saslauthd[20275]:主要:进程数:5 saslauthd[20275]:main:mech_option:空 saslauthd[20275]:主要:运行路径:/var/run/saslauthd saslauthd[20275]:主要:auth_mech:ldap saslauthd[20275]:ipc_init:使用接受锁文件:/var/run/saslauthd/mux.accept saslauthd[20275]:detach_tty:主进程 pid 为:0 saslauthd[20275]:ipc_init: 正在监听套接字:/var/run/saslauthd/mux saslauthd[20275]:main:使用流程模型 saslauthd[20275] :have_baby: 分叉子节点:20276 saslauthd[20276]:get_accept_lock:已获取接受锁 saslauthd[20275] :have_baby : 分叉子节点:20277 saslauthd[20275] :have_baby: 分叉子节点:20278 saslauthd[20275] :have_baby : 分叉子节点:20279 saslauthd[20276]:rel_accept_lock:释放接受锁 saslauthd[20277]:get_accept_lock:已获取接受锁 saslauthd[20276]:do_auth: 身份验证失败:[用户=prd] [服务=imap] [realm=innowareindonesia.co.id] [mech=ldap] [原因=未知] saslauthd[20276]:do_request:响应:否
这是我的 /etc/saslauthd.conf
root@mail:/usr/lib/sasl2# cat /etc/saslauthd.conf ldap 服务器: ldaps://auth.innowareindonesia.co.id:636/ ldap_version: 3 ldap_auth_method:绑定 ldap_search_base:cn=用户,dc=innowareindonesia,dc=co,dc=id ldap_filter:(|(UserPrincipalName=%u)(sAMAccountName=%u)) ldap_scope:子
这是我的插件查看器结果
root@mail:/usr/lib/sasl2# saslpluginviewer 已安装并正确配置的 auxprop 机制包括: 数据库管理数据库管理数据库 以下是 auxprop 插件列表 插件“sasldb”,API 版本:8 支持商店:是 插件“sasldb”,API 版本:8 支持商店:是 已安装并正确配置的 SASL(服务器端)机制包括: GS2-IAKERB GS2-KRB5 SCRAM-SHA-1 GS2-IAKERB GS2-KRB5 SCRAM-SHA-1 GSSAPI GSSAPI DIGEST-MD5 DIGEST-MD5 外部 CRAM-MD5 NTLM CRAM-MD5 NTLM 普通登录 普通登录 匿名 匿名 符合您的条件的可用 SASL(服务器端)机制有: GS2-IAKERB GS2-KRB5 SCRAM-SHA-1 GS2-IAKERB GS2-KRB5 SCRAM-SHA-1 GSSAPI GSSAPI DIGEST-MD5 DIGEST-MD5 CRAM-MD5 NTLM CRAM-MD5 NTLM 普通登录 普通登录 匿名 匿名 服务器插件列表如下 插件“gs2” [已加载],API 版本:4 SASL 机制:GS2-IAKERB,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|GSS_FRAMING|CHANNEL_BINDING 插件“gs2” [已加载],API 版本:4 SASL 机制:GS2-IAKERB,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|GSS_FRAMING|CHANNEL_BINDING 插件“gs2” [已加载],API 版本:4 SASL 机制:GS2-KRB5,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|GSS_FRAMING|CHANNEL_BINDING 插件“gs2” [已加载],API 版本:4 SASL 机制:GS2-KRB5,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|GSS_FRAMING|CHANNEL_BINDING 插件“scram” [已加载],API 版本:4 SASL 机制:SCRAM-SHA-1,最佳 SSF:0,支持 setpass:是 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|MUTUAL_AUTH 功能:PROXY_AUTHENTICATION|CHANNEL_BINDING 插件“scram” [已加载],API 版本:4 SASL 机制:SCRAM-SHA-1,最佳 SSF:0,支持 setpass:是 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|MUTUAL_AUTH 功能:PROXY_AUTHENTICATION|CHANNEL_BINDING 插件“gs2” [已加载],API 版本:4 SASL 机制:GS2-IAKERB,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|GSS_FRAMING|CHANNEL_BINDING 插件“gs2” [已加载],API 版本:4 SASL 机制:GS2-IAKERB,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|GSS_FRAMING|CHANNEL_BINDING 插件“gs2” [已加载],API 版本:4 SASL 机制:GS2-KRB5,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|GSS_FRAMING|CHANNEL_BINDING 插件“gs2” [已加载],API 版本:4 SASL 机制:GS2-KRB5,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|GSS_FRAMING|CHANNEL_BINDING 插件“scram” [已加载],API 版本:4 SASL 机制:SCRAM-SHA-1,最佳 SSF:0,支持 setpass:是 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|MUTUAL_AUTH 功能:PROXY_AUTHENTICATION|CHANNEL_BINDING 插件“scram” [已加载],API 版本:4 SASL 机制:SCRAM-SHA-1,最佳 SSF:0,支持 setpass:是 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|MUTUAL_AUTH 功能:PROXY_AUTHENTICATION|CHANNEL_BINDING 插件“gssapiv2” [已加载],API 版本:4 SASL 机制:GSSAPI,最佳 SSF:56,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|PROXY_AUTHENTICATION|DONTUSE_USERPASSWD 插件“gssapiv2” [已加载],API 版本:4 SASL 机制:GSSAPI,最佳 SSF:56,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|PROXY_AUTHENTICATION|DONTUSE_USERPASSWD 插件“gssapiv2” [已加载],API 版本:4 SASL 机制:GSSAPI,最佳 SSF:56,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|PROXY_AUTHENTICATION|DONTUSE_USERPASSWD 插件“gssapiv2” [已加载],API 版本:4 SASL 机制:GSSAPI,最佳 SSF:56,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|PROXY_AUTHENTICATION|DONTUSE_USERPASSWD 插件“digestmd5” [已加载],API 版本:4 SASL 机制:DIGEST-MD5,最佳 SSF:128,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|MUTUAL_AUTH 功能:PROXY_AUTHENTICATION|SUPPORTS_HTTP 插件“digestmd5” [已加载],API 版本:4 SASL 机制:DIGEST-MD5,最佳 SSF:128,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|MUTUAL_AUTH 功能:PROXY_AUTHENTICATION|SUPPORTS_HTTP 插件“digestmd5” [已加载],API 版本:4 SASL 机制:DIGEST-MD5,最佳 SSF:128,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|MUTUAL_AUTH 功能:PROXY_AUTHENTICATION|SUPPORTS_HTTP 插件“digestmd5” [已加载],API 版本:4 SASL 机制:DIGEST-MD5,最佳 SSF:128,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|MUTUAL_AUTH 功能:PROXY_AUTHENTICATION|SUPPORTS_HTTP 插件“crammd5” [已加载],API 版本:4 SASL 机制:CRAM-MD5,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT 功能:SERVER_FIRST 插件“crammd5” [已加载],API 版本:4 SASL 机制:CRAM-MD5,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT 功能:SERVER_FIRST 插件“ntlm” [已加载],API 版本:4 SASL 机制:NTLM,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT 功能:WANT_CLIENT_FIRST|SUPPORTS_HTTP 插件“ntlm” [已加载],API 版本:4 SASL 机制:NTLM,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT 功能:WANT_CLIENT_FIRST|SUPPORTS_HTTP 插件“crammd5” [已加载],API 版本:4 SASL 机制:CRAM-MD5,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT 功能:SERVER_FIRST 插件“crammd5” [已加载],API 版本:4 SASL 机制:CRAM-MD5,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT 功能:SERVER_FIRST 插件“ntlm” [已加载],API 版本:4 SASL 机制:NTLM,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT 功能:WANT_CLIENT_FIRST|SUPPORTS_HTTP 插件“ntlm” [已加载],API 版本:4 SASL 机制:NTLM,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|NO_PLAINTEXT 功能:WANT_CLIENT_FIRST|SUPPORTS_HTTP 插件“plain” [已加载],API 版本:4 SASL 机制:PLAIN,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|PASS_CREDENTIALS 功能:WANT_CLIENT_FIRST|PROXY_AUTHENTICATION 插件“plain” [已加载],API 版本:4 SASL 机制:PLAIN,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|PASS_CREDENTIALS 功能:WANT_CLIENT_FIRST|PROXY_AUTHENTICATION 插件“登录” [已加载],API 版本:4 SASL 机制:LOGIN,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|PASS_CREDENTIALS 特征: 插件“登录” [已加载],API 版本:4 SASL 机制:LOGIN,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|PASS_CREDENTIALS 特征: 插件“plain” [已加载],API 版本:4 SASL 机制:PLAIN,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|PASS_CREDENTIALS 功能:WANT_CLIENT_FIRST|PROXY_AUTHENTICATION 插件“plain” [已加载],API 版本:4 SASL 机制:PLAIN,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|PASS_CREDENTIALS 功能:WANT_CLIENT_FIRST|PROXY_AUTHENTICATION 插件“登录” [已加载],API 版本:4 SASL 机制:LOGIN,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|PASS_CREDENTIALS 特征: 插件“登录” [已加载],API 版本:4 SASL 机制:LOGIN,最佳 SSF:0,支持 setpass:否 安全标志:NO_ANONYMOUS|PASS_CREDENTIALS 特征: 插件“anonymous”[已加载],API 版本:4 SASL 机制:ANONYMOUS,最佳 SSF:0,支持 setpass:否 安全标志:NO_PLAINTEXT 功能:WANT_CLIENT_FIRST|DONTUSE_USERPASSWD 插件“anonymous”[已加载],API 版本:4 SASL 机制:ANONYMOUS,最佳 SSF:0,支持 setpass:否 安全标志:NO_PLAINTEXT 功能:WANT_CLIENT_FIRST|DONTUSE_USERPASSWD 插件“anonymous”[已加载],API 版本:4 SASL 机制:ANONYMOUS,最佳 SSF:0,支持 setpass:否 安全标志:NO_PLAINTEXT 功能:WANT_CLIENT_FIRST|DONTUSE_USERPASSWD 插件“anonymous”[已加载],API 版本:4 SASL 机制:ANONYMOUS,最佳 SSF:0,支持 setpass:否 安全标志:NO_PLAINTEXT 功能:WANT_CLIENT_FIRST|DONTUSE_USERPASSWD 已安装并正确配置的 SASL(客户端)机制包括: GS2-IAKERB GS2-KRB5 SCRAM-SHA-1 GS2-IAKERB GS2-KRB5 SCRAM-SHA-1 GSSAPI GSSAPI DIGEST-MD5 DIGEST-MD5 外部 CRAM-MD5 NTLM CRAM-MD5 NTLM 普通登录 普通登录 匿名 匿名 符合您的条件的可用 SASL(客户端)机制有: GS2-IAKERB GS2-KRB5 SCRAM-SHA-1 GS2-IAKERB GS2-KRB5 SCRAM-SHA-1 GSSAPI GSSAPI DIGEST-MD5 DIGEST-MD5 外部 CRAM-MD5 NTLM CRAM-MD5 NTLM 普通登录 普通登录 匿名 匿名 客户端插件列表如下 插件“gs2” [已加载],API 版本:4 SASL 机制:GS2-IAKERB,最佳 SSF:0 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|NEED_SERVER_FQDN|GSS_FRAMING|CHANNEL_BINDING 插件“gs2” [已加载],API 版本:4 SASL 机制:GS2-KRB5,最佳 SSF:0 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|NEED_SERVER_FQDN|GSS_FRAMING|CHANNEL_BINDING 插件“scram” [已加载],API 版本:4 SASL 机制:SCRAM-SHA-1,最佳 SSF:0 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|MUTUAL_AUTH 功能:PROXY_AUTHENTICATION|CHANNEL_BINDING 插件“gs2” [已加载],API 版本:4 SASL 机制:GS2-IAKERB,最佳 SSF:0 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|NEED_SERVER_FQDN|GSS_FRAMING|CHANNEL_BINDING 插件“gs2” [已加载],API 版本:4 SASL 机制:GS2-KRB5,最佳 SSF:0 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|NEED_SERVER_FQDN|GSS_FRAMING|CHANNEL_BINDING 插件“scram” [已加载],API 版本:4 SASL 机制:SCRAM-SHA-1,最佳 SSF:0 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|MUTUAL_AUTH 功能:PROXY_AUTHENTICATION|CHANNEL_BINDING 插件“gssapiv2” [已加载],API 版本:4 SASL 机制:GSSAPI,最佳 SSF:56 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|PROXY_AUTHENTICATION|NEED_SERVER_FQDN 插件“gssapiv2” [已加载],API 版本:4 SASL 机制:GSSAPI,最佳 SSF:56 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH 功能:WANT_CLIENT_FIRST|PROXY_AUTHENTICATION|NEED_SERVER_FQDN 插件“digestmd5” [已加载],API 版本:4 SASL 机制:DIGEST-MD5,最佳 SSF:128 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|MUTUAL_AUTH 功能:PROXY_AUTHENTICATION|NEED_SERVER_FQDN|SUPPORTS_HTTP 插件“digestmd5” [已加载],API 版本:4 SASL 机制:DIGEST-MD5,最佳 SSF:128 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|MUTUAL_AUTH 功能:PROXY_AUTHENTICATION|NEED_SERVER_FQDN|SUPPORTS_HTTP 插件“EXTERNAL” [已加载],API 版本:4 SASL 机制:EXTERNAL,最佳 SSF:0 安全标志:NO_ANONYMOUS|NO_PLAINTEXT|NO_DICTIONARY 功能:WANT_CLIENT_FIRST|PROXY_AUTHENTICATION 插件“crammd5” [已加载],API 版本:4 SASL 机制:CRAM-MD5,最佳 SSF:0 安全标志:NO_ANONYMOUS|NO_PLAINTEXT 功能:SERVER_FIRST 插件“ntlm” [已加载],API 版本:4 SASL 机制:NTLM,最佳 SSF:0 安全标志:NO_ANONYMOUS|NO_PLAINTEXT 功能:WANT_CLIENT_FIRST 插件“crammd5” [已加载],API 版本:4 SASL 机制:CRAM-MD5,最佳 SSF:0 安全标志:NO_ANONYMOUS|NO_PLAINTEXT 功能:SERVER_FIRST 插件“ntlm” [已加载],API 版本:4 SASL 机制:NTLM,最佳 SSF:0 安全标志:NO_ANONYMOUS|NO_PLAINTEXT 功能:WANT_CLIENT_FIRST 插件“plain” [已加载],API 版本:4 SASL 机制:PLAIN,最佳 SSF:0 安全标志:NO_ANONYMOUS|PASS_CREDENTIALS 功能:WANT_CLIENT_FIRST|PROXY_AUTHENTICATION 插件“登录” [已加载],API 版本:4 SASL 机制:LOGIN,最佳 SSF:0 安全标志:NO_ANONYMOUS|PASS_CREDENTIALS 功能:SERVER_FIRST 插件“plain” [已加载],API 版本:4 SASL 机制:PLAIN,最佳 SSF:0 安全标志:NO_ANONYMOUS|PASS_CREDENTIALS 功能:WANT_CLIENT_FIRST|PROXY_AUTHENTICATION 插件“登录” [已加载],API 版本:4 SASL 机制:LOGIN,最佳 SSF:0 安全标志:NO_ANONYMOUS|PASS_CREDENTIALS 功能:SERVER_FIRST 插件“anonymous”[已加载],API 版本:4 SASL 机制:匿名,最佳 SSF:0 安全标志:NO_PLAINTEXT 功能:WANT_CLIENT_FIRST 插件“anonymous”[已加载],API 版本:4 SASL 机制:匿名,最佳 SSF:0 安全标志:NO_PLAINTEXT 功能:WANT_CLIENT_FIRST
有人能帮忙吗?因为我已经为此烦恼了 3 个月,差点砸碎我的显示器。我不知道发生了什么,也不知道在哪里可以找到任何东西。没有调试,没有日志,没有跟踪,没有任何可以告诉我发生了什么的东西,它只是说“错误”和“未知”,没有具体说明是什么错误,也没有让我知道这个错误来自哪里,谷歌什么也没给我。
我想知道发生了什么,哪里出了问题。如何启用调试,如何让 saslauthd 告诉我发生了什么?
并且没有向外发送流量。tcpdump 没有显示任何内容。我猜这纯粹是 sasl 配置。
答案1
我想知道发生了什么,哪里出了问题。如何启用调试,如何让 saslauthd 告诉我发生了什么?
最新的 MIT Kerberos 5 版本(1.9 及以上)支持KRB5_TRACE
环境变量以获取详细的 Krb5 和 GSSAPI 日志。KRB5_TRACE="/dev/stderr"
在启动 saslauthd 之前导出,它将显示服务器状态。
(注意:Heimdal Kerberos 尚不支持此功能。)
另一种方法是strace
使用工具,它显示进程执行的系统调用。例如,如果 saslauthd 尝试打开文件但收到错误代码,它将显示:
open("/etc/krb5.keytab", O_RDONLY) = -1 EACCES (Permission denied)
虽然 strace 仅适用于 Linux,但其他操作系统也有替代方案:ktrace、dtrace、truss……
最后,可以从源代码编译 Cyrus libsasl,添加风俗错误消息并重复,直到找到问题(又名“printf 调试”)。