我尝试修改条目时为什么会收到LDAP_UNDEFINED_TYPE

时间:2013-11-18 14:28:23

标签: perl ldap openldap

我一直在尝试使用perl中的modify()函数修改ldap中的条目,但是我一直从ldap获取错误代码17,表明修改或添加操作中指定的属性在LDAP服务器的模式中不存在。我很困惑,因为我确信它存在于模式中。

我的代码中的search()返回一个用于我传入函数的msisdn的User objectClass,该对象还包含IndividualContextIdList,这是一个多值对象,在我的例子中有两个值300& 301.我传入的身份证持有302。

我的代码看起来像这样,

sub activate
{
my ($ldap, $msisdn, $id) = @_;

my $result = search($ldap,$record{'dn'},"(&(objectClass=User) (Msisdn=${msisdn}))",$record{'attrs'});
my @entries = $result->entries;

if ( $result->count != 1 ) {
    exitError(1, "Subscriber not found");
    return;
}

my $dn = $entries[0]->dn;

my $default = "";
my @contextIdListArray = ();

foreach my $entr ( @entries ) {

    foreach my $attr ( sort $entr->attributes ) {

        # skip binary we can't handle
        next if ( $attr =~ /;binary$/ );

        # get the key value
        my $value = $entr->get_value($attr);

        if ($attr =~ /^IndividualDefaultContextId/) {
                $default = $value;
        }

        if ($attr =~ /^IndividualContextIdList/) {
            push @contextIdListArray, $entr->get_value($attr);
        }
    }
}

if ($default eq '') {
    $default = $id;
}

push @contextIdListArray, $id;

# what do we want to change
my %whatToChange = ('IndividualContextIdList' => @contextIdListArray, 'IndividualDefaultContextId' => $default);

# time to modify entry
my $res = $ldap->modify ( $dn, replace => { %whatToChange });

if ($res->code != 0) {
    exitError($res->code, $res->error.". Modifying ${msisdn}.");
    return;
} else {
    xmlSuccessSetResponse();
}

return;
}

如果我像这样创建我的%whatToChange,那么修改条目没有问题,

my %whatToChange = ('IndividualContextIdList' => ["300", "301"], 'IndividualDefaultContextId' => "300");

这是我调用modify(),

时遇到的格式化错误
<?xml version='1.0' encoding='ISO-8859-1'?>
<webservices>
<method>activate</method>
<response>
<responsecode>17</responsecode>
<responsestring>301: attribute type undefined. Modifying 3548520509.</responsestring>
</response>
</webservices>

到目前为止,我的谷歌搜索没有向我提供任何答案。

非常感谢任何帮助。

0 个答案:

没有答案