Я пишу клиент openLDAP, используя его API для добавления базового dn. Но при запуске программы возникает ошибка:
ldap_add: Type or value exists (20)
additional info: attribute 'objectClass' provided more than once
Мой код ниже:
#include <stdio.h>
#include "ldap.h"
#define SERVERIP 172.0.1.4
#define ROOTDN "cn=root,dc=jc,dc=com"
#define ROOTPW "secret"
int main()
{
int protocol_version = LDAP_VERSION3;
int ret;
LDAP *ld;
if((ld = ldap_init(SERVERIP,LDAP_PORT) == NULL)
{
perror("ldap_init failed\n");
return 1;
}
ret = ldap_set_option(ld,LDAP_OPT_PROTOCOL_VERSION,&protocol_version);
if(ret != LDAP_SUCCESS)
{
fprintf(stderr,"ldap_select_version:%s\n",ldap_err2string(ret));
return 1;
}
ret = ldap_simple_bind_s(ld,ROOTDN,ROOTPW);
if(ret != LDAP_SUCCESS)
{
fprintf(stderr,"ldap_simple_bind_s:%s\n",ldap_err2string(ret));
return 1;
}
printf("add base dn\n");
char baseDN[] = "dc=jc,dc=com";
char *objVals1[] = {"organization",NULL};
char *objVals2[] = {"dcObject",NULL};
char *dcVals[] = {"jc",NULL};
char *oVals[] = {"jc Inc",NULL};
LDAPMod add1 = {LDAP_MOD_ADD,"objectClass",objVals1};
LDAPMod add2 = {LDAP_MOD_ADD,"objectClass",objVals2};
LDAPMod add3 = {LDAP_MOD_ADD,"dc",dcVals};
LDAPMod add4 = {LDAP_MOD_ADD,"o",oVals};
LDAPMod *addBase[] = {&add1,&add2,&add3,&add4,NULL};
if(ldap_add_ext_s(ld,baseDN,addBase,NULL,NULL) != LDAP_SUCCESS)
ldap_perror(ld,"ldap_add");
else
printf("ldap_add success\n");
ldap_unbind(ld);
}
Что не так с моим кодом?
objectClass
более одного раза. Не делай этого, я полагаю? - person Nathan Tuggy   schedule 23.09.2015