ldapsearch(1)
命令从 LDAP 服务器检索对象,并将它们作为 LDIF 结构打印出来,如下所示(不是真实数据):
dn: [email protected],dc=domain,dc=com
objectclass: top
objectclass: person
mail: [email protected]
userPassword:: hdfy74dhn79wdhyr74hy7489fhw46789f
如果属性包含非 ASCII 数据,则它是 Base64 编码的,由属性名称后面的双
::
表示。此外,似乎任何名为 userPassword
的属性都会总是 如此编码,即使它是 ASCII 干净的。
我想做的是告诉
ldapsearch
不要这样做。我无法找到可传递的选项标志来抑制此行为;仅在禁用 LDAP_PASSWD_DEBUG
的情况下重新编译源代码。
是否有未记录的选项来阻止这种编码?
(抛开安全问题等,因为这是出于测试目的)
如果不重新编译 ldapsearch,似乎没有办法用一个简单的标志来做到这一点。
但是,您可以创建这样的 shell 别名,这将具有相同的效果 - 前提是您安装了 Perl MIME::Base64 模块。
myldapsearch()
{
ldapsearch "$@" | perl -MMIME::Base64 -n -00 -e 's/\n +//g;s/(?<=:: )(\S+)/decode_base64($1)/eg;print'
}
alias ldapsearch=myldapsearch
不想打开旧主题,但也许它可以帮助某人了解我发现的内容。就我而言,我从 LDAP 搜索中获得了一个 Base64 编码的字符串,其中行尾有一个空格,但我无法直接看到该空格。也许这对你来说不是这样@steve-shipway,但对我来说却是这样。
我只是发现自己想在 sed 脚本中间执行此操作,而不添加更多管道,这是可能的,尽管很难看。
/e
(执行)标志的记录很少 - 并且在 Mac 上不存在sed -r 's/(.*):: (.*)/echo -n "\1: "; echo -n "\2"|base64 -d/e'