2011-12-12 128 views
0

我想創建一個表單,我可以填寫,並且一旦我提交表單值就可以被取出,並且可以將該表單創建爲LDAP。我對LDAP實際上並不是很有經驗,我只是努力使LDAP綁定工作,所以我需要一些幫助。如何通過我可以填寫的表單將新用戶添加到LDAP中?我知道LDAP有一個添加命令,但我不確定如何開始以及需要傳遞哪些信息以便在LDAP中創建人員。如果有幫助,下面是我的LDAP綁定代碼。PHP LDAP,將新條目添加到LDAP

<?php 
$name=$_REQUEST['name']; 
$x=1; 
if($x==1) 
{ 
    //LDAP stuff here. 
    $username = "myusername"; 
    $password = "mypass"; 


    $ds = ldap_connect('ldap://ldap:389'); 

     ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 
    ldap_set_option($ds, LDAP_OPT_REFERRALS, 0); 

    //Can't connect to LDAP. 
    if(!ds) 
    { 
     echo "Error in contacting the LDAP server -- contact "; 
     echo "technical services! (Debug 1)"; 

     exit; 
    } 

    //Connection made -- bind anonymously and get dn for username. 
    $bind = @ldap_bind($ds); 

    //Check to make sure we're bound. 
    if(!bind) 
    { 
     echo "Anonymous bind to LDAP FAILED. Contact Tech Services! (Debug 2)"; 

     exit; 
    } 

    $search = ldap_search($ds, "ou=People,DC=sde,DC=goliat,DC=com", "uid=$username"); 

    //Make sure only ONE result was returned -- if not, they might've thrown a * into the username. Bad user! 
    if(ldap_count_entries($ds,$search) != 1) 
    { 
     echo "Error processing username -- please try to login again. (Debug 3)"; 
     redirect(_WEBROOT_ . "/try1b.php"); 

     exit; 
    } 

    $info = ldap_get_entries($ds, $search); 

    //Now, try to rebind with their full dn and password. 
    $bind = @ldap_bind($ds, $info[0][dn], $password); 
    if(!$bind || !isset($bind)) 
    { 
     echo "Login failed -- please try again. (Debug 4)"; 
     redirect(_WEBROOT_ . "/try1b.php"); 

     exit; 
    } 

    //Now verify the previous search using their credentials. 
    $search = ldap_search($ds, "ou=People,DC=sde,DC=goliat,DC=com", "cn=$name"); 

    $info = ldap_get_entries($ds, $search); 
    if($username == "myusername") 
    { 

/* 
    very useful set of information to view the LDAP tree info from an array 
    echo $username; 
echo "<pre>".print_r($info[0],true)."</pre><br />"; 
*/ 
    echo $info[0][cn][0]; 
    echo ","; 
    echo $info[0][mail][0]; 
    echo ","; 
echo $info[0][telephonenumber][0]; 

     exit; 
    } 
    else 
    { 
     echo "Error. Access Denied"; 
     redirect(_WEBROOT_ . "/try1b.php"); 

     exit; 
    } 
    ldap_close($ds); 
    exit; 
} 
?> 

回答

0

一個加載請求需要補充的是,它們將成爲條目的一部分,和可選的請求控制專有名稱和屬性。

在另一個主題上,您的搜索具有子樹範圍,並且可能會返回多個與用戶名匹配的條目。沒有理由不在代碼中指定的基礎對象下的不同分支中使用相同RDN的多個條目 - 除非您的目錄服務器供應商已實施屬性唯一性約束。

1

我會推薦一個newUser.php(或其他)文件,檢查以確保所有您需要的信息都存在,然後將該信息發送到上面開始的文件。

$bind應該採取三個變量...

$bind = ldap_bind($ds, 'cn=root,dc=example,dc=com', secretPassword);

對於一個不錯的指南通過PHP將其他人加入你的LDAP服務器去http://www.php2python.com/wiki/function.ldap-add/

好運