2013-06-25 91 views
0

我正在尝试执行ldap授权,然后再次检查组中的成员身份。系统是一台运行php 5.3.10的Ubuntu机器,用于对Server2008 R2 Active Directory进行身份验证。我似乎无法让ldap_search()工作。我从jExplore中提取了DN,所以我很确定DN是正确的。 ldap_bind可以在另一个函数中使用证书,所以我确信服务器和用户名/密码是有效的。错误:php Active Directory查找

PHP Warning: ldap_search(): Search: Operations error in /var/www/zzz.php on line 28 

代码:

$ldap = ldap_connect('ldap://xxx.xxx'); 

$admins = $auth['admin']; 
// User not logged in, user level '0' 
if (!isset($user)) 
{ 
    return 0; 
} 

    // DN 
    $group_dn = 'CN=IT Employees,OU=groups,OU=users,OU=xxx,DC=xxx,DC=xxx'; 
    // Filter 
    $filter = '(sAMAccountName=' . $user . ')'; 
    // Attributes 
    $attr = array("memberof","givenname"); 
echo $group_dn.' '.$filter.' '.$attr.'<br />'; 

    // Check if the user is a member of the Admin Group 
    $SubGroups = ldap_search($ldap, $group_dn, $filter, $attr); //Search the admin group for user. 

    $debug = ldap_get_entries($ldap, $SubGroups); 
    echo $debug['count']; 

    if ($debug['count']>>0) 
    { 
     // Yep, you are set admin. (User level 2) 
     echo "Admin Set<br />"; 
     return 2; 
    } 
    else 
    { 
     // Failure. Thou art a normal user. (User level 1) 
     echo "Admin Denied<br />"; 
     return 1; 
    } 
} 
+0

也许检查$ LDAP是一个有效的资源? – ficuscr

+2

此问题的答案应该可以帮助您:http://stackoverflow.com/questions/6222641/how-to-php-ldap-search-to-get-user-ou-if-i-dont-know-the -ou-for-base-d –

+0

感谢Matthew的建议,但它没有解决它。 :( –

回答

1
$ldap = ldap_connect('ldap://xxx.xxx'); 

需要改变,以

$ldap = ldap_connect('ldap://xxx.xxx'); 
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); 
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); 
ldap_start_tls($ldap); 
$bind= ldap_bind($ldap, 'user','pass'); 
0

我觉得这个过滤器应该工作:

(&(objectClass=user)(sAMAccountName=yourUserName) 
    (memberof=CN=YourGroup,OU=Users,DC=YourDomain,DC=com)) 

好吧,我相信这可以被调整为你工作。

-Jim