GBase8d_C_API_09_添加条目_使用异步函数添加条目的例子

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;

}

上一篇:Android属性动画-简单实例


下一篇:1018 Public Bike Management (30 分)