none
有关于Windows下的ldap属性获取问题 RRS feed

  • 问题

  • 用Winldap获取到了用户属性,但是在解析的时候发现有些属性是16进制属性

    比如获取的是

    objectGUID 、objectSid这些,假如是UTF8字符串的字节的话可以通过 LdapUTF8ToUnicode 进行转换到正确结果。

    但是如何判断一个 attrList[i]->bv_val 是一个16进制还是UTF8字符串的字节形式呢?并且如何把objectGUID objectSid这些转换成 GUID, SID呢? 部分代码如下:

    BerElement *ber = nullptr;
    wchar_t* attr = ldap_first_attribute(session, pmsg, &ber);
    
    while(attr)
    {
       berval ** attrList;
       attrList = ldap_get_values_len(session, pmsg, attr);
      if (attrList != NULL)
      {
         for (int i = 0; attrList[i]; i++)
         {
    //如何解析下面这个 berval结构体的属性 bv_val
            attrList[i]->bv_val;
    
            attrList[i]->bv_len;
    
         }
         ldap_value_free_len(attrList);
     }
    
    }


    像 Windows自带的AD域管理工具上看到的属性,这个有语法是怎么处理的呢?

    


    • 已编辑 xsqg 2018年3月28日 15:09
    2018年3月28日 15:07

全部回复

  • Hi xsqg,

    感谢在MSDN论坛发帖。

    >>但是如何判断一个 attrList[i]->bv_val 是一个16进制还是UTF8字符串的字节形式呢?并且如何把objectGUID objectSid这些转换成 GUID, SID呢

    据我所知,你很难确定一个binary类型的数据是否是UTF-8格式的。最简便的方法就是使用LdapUTF8ToUnicode函数来转换,如果可以成功转换,则是UTF-8格式的。

    >>像 Windows自带的AD域管理工具上看到的属性,这个有语法是怎么处理的呢?

    请提供一下具体的工具名称和属性页信息,方便我们查找是否有相关的API可以调用。

    Best Regards,

    Baron Bi


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年3月29日 9:33