【问题标题】:Have LDAP Search Return a 1 if a record is found如果找到记录,让 LDAP 搜索返回 1
【发布时间】:2014-09-08 21:14:35
【问题描述】:

你好 Stackoverflow,

如果在 ldap 中找到一条记录,是否有一种方法可以让 ldapsearch 返回“1”,如果没有找到记录,则返回 0,如果在 ldap 中找到多条记录,则返回 2(或更大)。我希望能够测试记录,如果返回 1,则采取一些预定义的操作。我知道我可以设置 $something=0 然后执行 ldapsearch >> $something 然后测试 $something!=0 但这不会有效地使用内存或处理时间,并且可能会导致我的脚本中出现意外的“乐趣” .这还需要针对 $something 执行额外的测试,这会增加批处理作业的时间。

ldapsearch -LLL -h ds389.some.org -p 389 -D "uid=someAdmin,o=some.org" -w SOMEpassWord -b "ou=People,o=some. org" -s sub '(&(RMailAliases=zzz)(!(RMid=d*)))'

【问题讨论】:

  • 如果文档中没有提到,没有。
  • 感谢您的输入。您是正确的,没有记录的方法。如果您有兴趣,我标记了一个有效的答案。

标签: bash ldap ldap-query return-code


【解决方案1】:

echo `ldapsearch -LLL -h ds389.some.org -p 389 -D "uid=someAdmin,o=some.org" -w SOMEpassWord -b "ou=People,o=some.org" -s sub '(&(RMailAliases=zzz)(!(RMid=d*)))' dn | grep dn: | wc -l` 应该做你想做的事。

【讨论】:

  • 谢谢先生。没有什么比在所有记录上寻找共同响应然后数数更重要的了!谢谢
  • 很酷的答案,即使 LDAP 不能返回 1 或 0 或 2 仍然是真的。
【解决方案2】:

令人震惊的是,ldapsearch(从 2.4.44 开始)不会在不匹配事件上返回非零结果。从手册页:

诊断 如果没有发生错误,则退出状态为零。错误会导致非零退出状态和写入标准错误的诊断消息。

鉴于该产品的年代久远,这种情况不太可能发生变化。

@heiglandreas 提供了一个合理的解决方案,但它可能会更好:

ldapsearch -LLL <ldap-connection-options <ldap-search-query> dn |
grep -q ^dn:

dn 属性无论如何都会由 ldapsearch 输出,因此指定它会最小化其输出,而-LLL 选项会抑制 ldapsearch 的多余输出。 POSIX grep 的 -q 选项可确保在未找到匹配项时以非零值退出整个管道。

如果您需要将结果作为文本字符串,只需在上述之后执行echo $?。或者,您可以将 grep 替换为 grep -c ^dn:,如果找到则输出 1,如果找不到则输出 0

【讨论】:

  • 为了让这个更易于搜索:这对于为 OpenLDAP 容器实现 Docker 健康检查很有用。
猜你喜欢
  • 2017-11-19
  • 1970-01-01
  • 2021-11-24
  • 2015-02-14
  • 2013-07-24
  • 2010-09-26
  • 2015-05-25
  • 2011-02-08
  • 2017-10-05
相关资源
最近更新 更多