2011-12-12 148 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/

好运