【问题标题】:How do I modify a Boolean LDAP Active Directory attribute using Net::LDAP?如何使用 Net::LDAP 修改布尔 LDAP Active Directory 属性?
【发布时间】:2014-11-06 01:26:13
【问题描述】:

我可以成功绑定到 AD LDAP,并且可以修改和创建对象。

但是,如果我想更新或设置“布尔”类型的属性,则会收到以下错误:

00000057:LdapErr:DSID-0C090C3E,注释:属性转换操作出错,数据0,v1db1

这是一段负责的 Perl 代码:

$rv = $ldap->add($dn, attr=> [
    cn => [$u],
    objectClass => [ 'top','person', 'organizationalPerson', 'contact' ],
    displayName => "$u Mailing List",
    mail => $email,
    name => $u,
    mailNickname => $local,
    proxyAddresses => [
        "SMTP:$email",
        "smtp:$local\@$SERVERDOM",
    ],
    givenName => $u,
    targetAddress => "SMTP:$email",
    internetEncoding => 1310720,
    msExchAddressBookFlags => 1,
    msExchModerationFlags => 6,
    msExchProvisioningFlags => 0,
        msExchHideFromAddressList => 'TRUE',
        msExchBypassAudit => 'FALSE',
        msExchMailboxAuditEnable => 'FALSE',

]);

问题是最后三个属性;如果它们被注释掉,那么它就可以工作。我尝试使用 0 和 1 而不是 'TRUE' 和 'FALSE' 但我遇到了同样的问题。似乎Net::LDAP 代码以stringint 的类型调用Convert::ASN1,这是不正确的;它应该使用“布尔”,但我不知道如何让它这样做。

【问题讨论】:

  • 我得到:Bareword "true" not allowed while "strict subs" in use Perl 显然没有定义这个常量。带引号的小写字母与带引号的大写字母产生相同的错误。
  • 您是否尝试将值设置为布尔文字?
  • Perl 没有布尔数据类型。我添加了布尔模块,但这也没有帮助。试过1、-1、0xff、0xffff、0xffffffff、'true'、'True'、'TRUE',还是一样的属性转换错误。
  • 哦,抱歉,我对这个问题的背景是 LDAP 而不是 Perl,我曾假设 bool 是本机类型的一部分。能否使用 Net::LDAP::Entry->get_value 方法从目录中读取现有条目,并检查其表示方式?

标签: perl active-directory ldap netldap


【解决方案1】:

根据 LDAP 规范; “TRUE”、“True”、“true”等字符串值都是有效的。

未知属性或该用户不可用的属性将引发“属性转换操作错误”错误。

查看属性并在谷歌上搜索显示msExchHideFromAddressList 应该是msExchHideFromAddressLists

【讨论】:

  • 您对“s”的看法是正确的——这是失败的原因,也是误导性的错误消息。但是,看起来(至少在我们的系统上)“TRUE”和“FALSE”必须大写才能正常工作。我简直不敢相信我在这张桌子上撞了这么久。
  • 我可以确认使用 Spring LDAP 和 Openldap 我必须使用“FALSE”,全部大写
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 2017-08-05
相关资源
最近更新 更多