【问题标题】:ldap_search ignoring the case letterldap_search 忽略大小写
【发布时间】:2013-10-24 11:36:09
【问题描述】:

你好,我的朋友们,我正在尝试从活动目录中获取一些数据,但是当以大写字母或混合字母存储 eamil 时出现问题,我希望 ldap_search() 搜索 AD 忽略字母的大小写 这是我的功能,提前谢谢你

    function LDAPget($email)
    {
        $ldap['server'] = 'xx.xx.xx.xx';
        $ldap['user'] = 'x';
        $ldap['pass'] = 'any';
        $ds = ldap_connect($ldap['server']); 
        $bind = ldap_bind($ds, $ldap['user'], $ldap['pass']);
        $filter = "(mail=$email)";
        $sr = ldap_search($ds, $ldap['base_dn'], $filter, array('*'));
        $rows = ldap_get_entries($ds, $sr);
}

【问题讨论】:

    标签: php ldap ldap-query


    【解决方案1】:

    LDAP 客户端必须在过滤器中使用exactMatch 匹配规则。使用哪个caseExact 匹配规则取决于存储在模式中的属性定义。每个属性都有自己的属性类型、语法、匹配规则和其他信息。如果 LDAP 目录服务器不符合 LDAP,则可能不支持可扩展的匹配过滤器,在这种情况下,应用程序必须处理从 LDAP 目录服务器检索到的数据。

    另见

    【讨论】:

    • 应用程序必须处理从 LDAP 目录服务器检索到的数据。看到问题是:当我输入例如与 AD 中存储的电子邮件不同的电子邮件时,例如:ro@test.com 并且存储的电子邮件是 Ro@test.com 服务器不会给我任何结果我该如何解决这个问题
    • 通常但并非总是如此,电子邮件地址的组成部分存储在具有caseIgnoreMatch 匹配规则的属性中(谁知道 AD 的作用)。 ro@test.comRO@test.com 是等效的,如果客户端使用的过滤器调用该属性的默认匹配规则,则服务器应该返回。我看到正在使用的过滤器没有指定匹配规则,所以应该使用默认的匹配规则并且ro@test.com的任何情况都应该返回给客户端。假设 LDAP 服务器没有损坏,其他情况就是阻止返回数据。
    • 我明白了……所以我可以用我的应用程序更改匹配规则吗???还是我应该打电话给管理员服务器从他们的 AD 属性中查看问题
    • LDAP 客户端无法更改匹配规则,除非它有权访问模式,即使如此,也可能没有必要。我建议使用像 ldapsearch 这样的已知良好工具从 LDAP 服务器检索数据,以确保数据存在并且看起来符合预期。
    • 它还没用我的朋友我的问题有一些变化
    【解决方案2】:

    strcasecmp 函数成功了

        if (strcasecmp($rows[0][$filtername][0], $usereinfo) == 0 ) {
    
    //problem solved 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多