如何使用C++在活动目录的属性中设置值

how to set values in attribute of Active directory using C++?

本文关键字:属性 设置 何使用 C++ 活动      更新时间:2023-10-16

我正在使用ldap_modify函数通过C++更改属性值...

msgid=ldap_modify_ext_s( ld, dnNameval, ldapmod,NULL,NULL );

问题是该函数中的mod_val参数...

LDAP *id;
dnNameval ="distinguised name";

在 ldapmod 中有三个值...

  1. mod_type="要更改的属性";
  2. mod_op=LDAP_MOD_REPLACE;
  3. LDAPMOD 结构

ldapmod 结构体为:

 typedef struct ldapmod {
      int mod_op;
      char *mod_type;
      union {
        char **modv_strvals;
        struct berval **modv_bvals;
      } mod_vals;
    #define mod_values        mod_vals.modv_strvals
    #define mod_bvalues       mod_vals.modv_bvals
} LDAPMod;

我尝试像这样传递值:

mod_vals=(PWCHAR*){"bala",Null};

导致错误

error C2679: binary '=' : no operator found which takes a right-hand operand 
of type 'PWCHAR *' (or there is no acceptable conversion)

我也试过这个:

mod_vals.modv_strvals=(PWCHAR*) Password1;
mod_vals.modv_bvals=NULL;

但是数组有一个空值...

谁能帮我弄清楚如何传递该变量中的值? 我是否需要包含任何其他头文件? 我已经在使用 winldap.h 标头。

提前谢谢。

这行不通:

 mod_vals = (PWCHAR*){"bala",Null};

不能以这种方式为联合分配值。 您必须指定要写信给工会的哪些成员。 此外,(PWCHAR *)是错误的类型;你不是在处理宽字符。 即使你是,也不能仅通过强制转换来转换字符串。

这也行不通:

mod_vals.modv_strvals=(PWCHAR*) Password1; 
mod_vals.modv_bvals=NULL;

modv_strvals成员是一个指针到指针,而不仅仅是一个指针,写信给工会的两个成员是没有意义的;它们是互斥的。 根据上下文,您可以使用modv_strvalsmodv_bvals,从不两者兼而有之。

您可能希望这样做:

mod_vals.modv_strvals = {"bala", Null};