php中的ldap_add返回“已经存在68”错误

Maf*_*aff 2 php ldap

我只是无法弄清自己在做什么错,我已经在网上搜寻了答案,但找不到任何可行的方法。请有人可以看看我的代码并告诉我我要去哪里了吗?如果我注释掉“ objectclass”,我得到“服务器不愿执行53”,如果我将OU更改为一个愚蠢的东西($ dn),那么我将得到“命名违规”,如果我将键盘捣碎并输入随机字母即使我输入的内容不存在,我的用户名仍然会出现“已经存在”错误。如果我在同一OU中为另一个CN添加ldap_mod_replace行,则工作正常,因此我知道连接正常。我也尝试过在除对象类之外的所有对象上均不使用“ [0]”(如我在所有示例中所见)。公司和用户信息编辑明显。

$server = "ldap://ServerName.domain.co.uk";
$dn = "OU=Advertising,OU=EmailDepartmentAccounts,OU=Administration,OU=Central,DC=domain,DC=co,DC=uk";

//domain user to connect to LDAP
$user = "helpdesk.ldap@domain.co.uk";
//user password
$psw = "Password";

$ds = ldap_connect($server);
if ($ds) {
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
    $r = ldap_bind($ds, $user, $psw);

    $proxyaddresses_array = array();
    $proxyaddresses_array[0] = "X400:c=GB;a= ;p=Company Name p;o=PWEXCHANGE;s=Kitbag;g=Digital;";
    $proxyaddresses_array[1] = "SMTP:test.maff@domain.co.uk";
    $proxyaddresses_array[2] = "smtp:test.maff@other.co.uk";

    //$NewUser = array();
    $NewUser["cn"][0] = "Test Maff1";
    $NewUser["userprincipalname"][0] = "Test.Maff1@domain.co.uk";
    $NewUser["samaccountname"][0] = "Test.Maff";
    $NewUser["objectClass"][0] = "top";
    $NewUser["objectClass"][1] = "person";
    $NewUser["objectClass"][2] = "organizationalPerson";
    $NewUser["objectClass"][3] = "user";
    //$NewUser["givenname"][0] = "Test";
    //$NewUser["sn"][0] = "Maff";
    //$NewUser["instancetype"][0] = 4;
    //$NewUser["physicaldeliveryofficename"][0] = "Leeds";
    //$NewUser["displayname"][0] = "Test Maff";
    //$NewUser["proxyaddresses"] = $proxyaddresses_array;
    //$NewUser["department"][0] = "IT";
    //$NewUser["company"][0] = "Company Name";
    //$NewUser["homemta"][0] = "CN=Microsoft MTA,CN=STH-EXC-01B,CN=Servers,CN=BSP,CN=Administrative Groups,CN=Johnston Press plc,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=domain,DC=co,DC=uk";
    //$NewUser["displaynameprintable"][0] = "Test Maff";
    //$NewUser["mailnickname"][0] = "Test.Maff";
    //$NewUser["useraccountcontrol"][0] = "512";
    //$NewUser["primarygroupid"][0] = "513";
    //$NewUser["name"] [0]= "Test Maff";
    $NewUser["objectcategory"][0] = "CN=Person,CN=Schema,CN=Configuration,DC=domain,DC=co,DC=uk";
    //$NewUser["mail"] = "Test.Maff@domain.co.uk";

    if ($NewUserAdded = ldap_add($ds, $dn, $NewUser)) {
        echo "success<br />";
    } else {
        echo ldap_error($ds) . " " . ldap_errno($ds);
    }
    ldap_close($ds);
} else {
    echo "unable to connect to LDAP server";
}
Run Code Online (Sandbox Code Playgroud)

hei*_*eas 5

我可能是错的,但是从您在代码中读取的内容来看,您有一个条目OU=Advertising,OU=EmailDepartmentAccounts,OU=Administration,OU=Central,DC=domain,DC=co,DC=uk。就我解释您的代码而言,您想在该条目下方添加一个条目。但是您必须提供条目的DN 作为的第二个参数ldap_add。但是,您需要提供新条目的baseDN。那已经在那里。否则,您将无法向其中添加某些内容。

因此,您应调用之前调用以下内容ldap_add

$dn = 'cn=' . $NewUser['cn'][0] . ',' . $dn;

它使用baseDN并在其前面加上当前用户的cn。

希望能有所帮助