如何阻止 ldapsearch(1) 对 userPassword 和其他属性进行 base64 编码?

问题描述 投票:0回答:3

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
的情况下重新编译源代码。

是否有未记录的选项来阻止这种编码?

(抛开安全问题等,因为这是出于测试目的)

bash ldap
3个回答
19
投票

如果不重新编译 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

1
投票

不想打开旧主题,但也许它可以帮助某人了解我发现的内容。就我而言,我从 LDAP 搜索中获得了一个 Base64 编码的字符串,其中行尾有一个空格,但我无法直接看到该空格。也许这对你来说不是这样@steve-shipway,但对我来说却是这样。


0
投票

我只是发现自己想在 sed 脚本中间执行此操作,而不添加更多管道,这是可能的,尽管很难看。

  • sed 即使在扩展模式下也不支持 RE 断言
  • /e
    (执行)标志的记录很少 - 并且在 Mac 上不存在
  • 为每个匹配调用一个子进程,而不是调用函数
sed -r 's/(.*):: (.*)/echo -n "\1: "; echo -n "\2"|base64 -d/e'
© www.soinside.com 2019 - 2024. All rights reserved.