Net::LDAP add() 失败,没有错误消息。我如何找到记录未验证的原因?

Net::LDAP add() failed with no error message. How can I find the reason why the record did not validate?

当我在 Rails 应用程序上构建了一个 Ruby 来管理 LDAP 中的用户时,我把自己折磨了两天。在微调各种属性的包含和格式时,我经常会 ldap.add() 失败,除了可能引发异常外几乎没有反馈。我通常知道这是一个数据验证错误,例如缺少必需的属性或格式不正确的属性值——但我在服务器 (Apache DS) 或客户端上找不到任何指示 which 字段失败,或者 为什么 它失败了。

那么...您如何看待为什么 LDAP 添加(或替换、删除、打开...)失败的原因?

然后我偶然发现了 ldap.get_operation_result,我有一个真正的面部表情时刻。我故意重现了几个我通过仔细检查 get_operation_result 在我的武器库中痛苦解决的问题,并且每次都准确描述了问题所在。

这个函数在挽救异常的情况下很有用,或者如果add()、modify()、delete()等只是returns false。

 ldap.add(dn: dn, attributes: attributes)
 Rails.logger.info("ldap.add: #{ldap.get_operation_result}")

上面的代码片段挽救了我的理智,更不用说数小时乏味的追捕测试了。

例如,这只是显示我没有提供所需 sn 属性的错误消息的一部分:

ERR_279 Required attributes [sn(2.5.4.4)] not found within entry uid=david,o=users,dc=example,dc=com"

它还会显示与错误的服务器连接凭据等相关的消息。

HTH