GBase8d_C_API_07_添加条目_创建新条目并添加到目录中
每一个条目都包括一个分辨名(DN) 和一组属性,并通过DN 在目录中识别该条目。在GBase 8d C API中,条目用ldap_add_s()或ldap_add()添加。
调用ldap_add_s()创建一个新条目。例如:
/* 初始化要添加条目的DN */
char *dn = "cn=Richard Petersen, " BASE_DN;
/* 将新条目添加到目录中 */
使用同步函数
msgid = ldap_add_s(ld, dn, attrs);
使用异步函数
msgid = ldap_add(ld, dn, attrs);
/* 异步操作筛选结果 */
while (!finished)
{
rc_result = ldap_result(ld, msgid, LDAP_MSG_ONE, NULL, &res);
switch (rc_result)
{
case -1:
/* 发生错误 */
ldap_perror(ld, "ldap_result");
ldap_unbind(ld);
return -1;
case 0:
/* 超时,条目没准备好 */
break;
case LDAP_RES_ADD:
/* 操作完成,筛选结束 */
finished = 1;
break;
default:
/* 不会出现这种情况 */
ldap_unbind(ld);
return -1;
}
/*
* 因为是异步操作,筛选结果同时可以做其他操作。
* 这里可以添加需要的操作。
*/
}
/* 转换从ldap_result()中输出的结果信息 */
rc_result2error = ldap_result2error(ld, res, 0);
if (rc_result2error == LDAP_SUCCESS)
{
printf ("ldap_add: Entry added successfully.\n");
}
else
{
ldap_perror(ld, "ldap_add");
}
【注意】在加入条目前是否指定了该条目的对象类(可以通过设置“objectclass”属性来指定及该类所需要的属性。例如,在GBase 8d Server 中组织单元(organizational unit) 用“organizationalUnit ”对象类的条目表示。如果要为一个人加入一个条目,必须先在条目中指定如下属性:
objectclass(该属性的值应包括“top”,“organizationalUnit”)
ou(这是一个必需的属性)
认证用户是否具有向目录中添加该条目的访问权限(如果没有向目录中添加该条目的权限,系统将产生一个LDAP_INSUFFICIENT_ACCESS的LDAP错误码)。