ldap_modify_s导致访问冲突,其中ldap_add_s使用相同的代码

时间:2014-04-28 01:16:15

标签: ldap

我看到了另一个例子,但它并没有解决我的问题。所以下面的代码示例按原样工作。但是,如果我将ldap_add_s命令更改为ldap_modify_s命令并将LDAP_MOD_ADD更改为LDAP_MOD_REPLACE(使用Martin而不是Marshall Fielding - 其余部分应该什么也不做),我会获得访问冲突:

LDAPAPP.exe中0x74c923b6处的未处理异常:0xC0000005:访问冲突读取位置0x00000002。

这对我没有任何意义,因为我没有改变任何东西导致访问冲突,它必须以某种方式来自ldap调用。帮助!

char * myDn = "acctName=judy,ou=players,o=myCompany";
char *classValues2[] = { "ejCharacter", NULL};
char *cidValues[] = { "12", NULL };
char *firstValues[] = { "Marshall", NULL };
char *lastValues[] = { "Fielding", NULL };
char *genValues[] = { "CS_Male2", NULL };
char *ouValues[] = { "players", NULL };

objClass2.mod_op =  LDAP_MOD_ADD;
objClass2.mod_type = "objectClass";
objClass2.mod_values = classValues2;

charID.mod_op = LDAP_MOD_ADD;
charID.mod_type = "ejCharID";
charID.mod_values = cidValues;

first.mod_op = LDAP_MOD_ADD;
first.mod_type = "ejCharNameFirst";
first.mod_values = firstValues;

last.mod_op = LDAP_MOD_ADD;
last.mod_type = "ejCharNameLast";
last.mod_values = lastValues;

gen.mod_op = LDAP_MOD_ADD;
gen.mod_type = "ejCharGenData";
gen.mod_values = genValues;

ou.mod_op = LDAP_MOD_ADD;
ou.mod_type = "ou";
ou.mod_values = ouValues;

NewChar[0] = &objClass2;
NewChar[1] = &charID;
NewChar[2] = &first;
NewChar[3] = &last;
NewChar[4] = &ou;
NewChar[5] = &gen;

printf("myDN %s\n", myDn);
printf("OKAY TRYING THE ADD");

retVal = ldap_add_s(ldap_session, myDn, NewChar);

1 个答案:

答案 0 :(得分:0)

每页: http://msdn.microsoft.com/en-us/library/aa366943%28v=vs.85%29.aspx

LDAPMod数组必须以NULL结尾。

您很可能通过将数组大小增加一并添加以下内容来解决错误:

NewChar[6] = NULL;