GBase8d_C_API_09_添加条目_使用异步函数添加条目的例子
/*
* Copyright(c) 2004-2022, 南大通用数据技术股份有限公司. All rights reserved.
*
* 文件名称: ldap_add_a.c
* 说 明: 调用异步函数ldap_add(),添加一个新条目到LDAP Server。
*
* 当前版本: 5.0
* 作 者: GBase
* 完成日期: 2008.5.22
*/
/* Windows平台和UNIX/Linux平台分开包含头文件 */
#ifdef WIN32
#include "..\..\include\samples.h"
#else
#include "../../include/samples.h"
#endif
/*
* 函数名称: main
* 函数说明: 向LDAP Server异步添加一个条目。
* 输入参数:
* void
* 返回值 :
* 0: 成功
* -1: 失败
*/
int main(void)
{
LDAP *ld; /* LDAP 会话句柄 */
/* 添加的值 */
char *objectClass_values[] = {"top", "organization", "organizationalperson",
NULL};
char *cn_values[] = {"John Smith","Mary Smith", NULL};
char *telephoneNumber_values[] = {"022-83711260", NULL};
char *postalCode_values[] = {"300071", NULL};
char *o_values[] = {"ITEC", NULL};
char *sn_values[] = {"Smith", NULL};
/* 添加的属性和属性值,每种属性和属性值用一个LDAPMod类型数据表示 */
LDAPMod objectClassattr = {LDAP_MOD_ADD, "objectclass", objectClass_values};
LDAPMod cnattr = {LDAP_MOD_ADD, "cn", cn_values};
LDAPMod oattr = {LDAP_MOD_ADD, "o", o_values};
LDAPMod snattr = {LDAP_MOD_ADD, "sn", sn_values};
LDAPMod telephoneNumberattr = {LDAP_MOD_ADD, "telephoneNumber",
telephoneNumber_values};
LDAPMod postalCodeattr = {LDAP_MOD_ADD, "postalCode", postalCode_values};
LDAPMod *attrs[] = {&objectClassattr, &cnattr, &oattr, &snattr,
&telephoneNumberattr, &postalCodeattr, NULL};
int rc_bind; /* ldap_simple_bind_s返回结果 */
int rc_result; /* ldap_result返回结果 */
int rc_result2error; /* ldap_result2error返回结果 */
/* 添加DN */
char *dn = "cn=John Smith, " BASE_DN;
int msgid;
LDAPMessage *res;
int finished = 0;
/* 获得到LDAP server的会话句柄 */
ld = ldap_init(HOST, PORT);
/* 绑定LDAP server */
rc_bind = ldap_simple_bind_s(ld, BIND_DN, PASSWORD);
/* 绑定失败处理 */
if (rc_bind != LDAP_SUCCESS)
{
ldap_perror(ld, "ldap_simple_bind_s");
return -1;
}
/* 添加新条目 */
msgid = ldap_add(ld, dn, attrs);
/* 添加失败处理 */
if(msgid == -1)
{
ldap_perror(ld, "ldap_add");
ldap_unbind(ld);
return -1;
}
/* 异步操作筛选结果 */
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");
}
ldap_msgfree(res);
ldap_unbind(ld);
return 0;
}