Perl 如何使用Net::LDAP修改布尔LDAP Active Directory属性?

Perl 如何使用Net::LDAP修改布尔LDAP Active Directory属性?,perl,active-directory,ldap,netldap,Perl,Active Directory,Ldap,Netldap,我可以成功地绑定到AD LDAP,并修改和创建对象 但是,如果要更新或设置“Boolean”类型的属性,则会出现以下错误: 00000057:LDAPPER:DSID-0C090C3E,注释:属性转换操作中出错,数据0,v1db1 下面是一段Perl代码: $rv = $ldap->add($dn, attr=> [ cn => [$u], objectClass => [ 'top','person', 'organizationalPerson', '

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

但是,如果要更新或设置“Boolean”类型的属性,则会出现以下错误:

00000057:LDAPPER: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
code调用
Convert::ASN1
,其类型为
string
int
,这是不正确的;它应该使用“boolean”,但我不知道如何让它这样做。

根据LDAP规范;字符串值“TRUE”、“TRUE”、“TRUE”等均有效

未知属性或该用户不可用的属性将抛出“属性转换操作中出错”错误


查看属性并用谷歌搜索它们表明
msExchHideFromAddressList
应该是
msExchHideFromAddressList
I get:
Bareword“true”是不允许的,而使用中的“strict subs”显然没有定义此常量。带引号的小写与带引号的大写给出的错误相同。是否尝试将值设置为布尔文字?Perl没有布尔数据类型。我添加了布尔模块,但这也没有帮助。尝试了1,-1,0xff,0xffff,0xFFFFFF,'true','true','true',true',仍然是相同的属性转换错误。哦,抱歉,我对这个问题的背景是LDAP而不是Perl,我假设bool是本机类型的一部分。您是否可以使用Net::LDAP::Entry->get_value方法从目录中读取现有条目,并检查其表示方式?关于“s”的说法是正确的,这是导致失败的原因,以及错误消息。然而,似乎(至少在我们的系统上)“真”和“假”必须在大写字母中才能起作用。我简直不敢相信我在这张桌子上撞了这么长时间。我可以确认,在SpringLDAP和Openldap中,我必须使用“FALSE”,全部大写