Interstage Application Server Smart Repositoryユーザーズガイド
目次 索引 前ページ次ページ

第2章 アプリケーションの作成(C API)> 2.3 サンプルプログラム> 2.3.3 サンプルプログラムの紹介

2.3.3.7 日本語を含むエントリ情報の出力

 受信したエントリの情報を出力する場合のサンプルプログラムを以下に示します。このサンプルプログラムでは、属性値に日本語が含まれる場合の処理をしています。

[jp_prt_entry.c]

/*
 * All Rights Reserved, Copyright (C) FUJITSU LIMITED 2005
 *
 * エントリ情報の出力(日本語データ含む)
 *
 */

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "examples.h"

/*-------------------------------------------------------------*/



int print_entry_jp(
    LDAP *ld,
    LDAPMessage *result,
    int freeit )
{
    LDAPMessage *entry;
    int  cnt, num_entry;
    char *dn, *utf_dn;
    BerElement *ber;
    char *attr;
    struct berval **vals;
    char *value, *utf_value;

/*----------------------------------------------------------*/

    /* エントリ数の初期化 */
    num_entry = 0;

    /* エントリ情報の取得 */
    for ( entry = ldap_first_entry( ld, result );
        entry != NULL;
        entry = ldap_next_entry( ld, entry ) ) {
        utf_dn = (char *)ldap_get_dn( ld, entry );
        /* 日本語を含む文字列をUTF-8に変換 */
#if defined(unix)
        ldap_conv_utf( utf_dn, &dn,
            LDAP_CHARS_OPT_UTF8, LDAP_CHARS_OPT_EUCJP );
#elif defined(_WIN32)
        ldap_conv_utf( utf_dn, &dn,
            LDAP_CHARS_OPT_UTF8, LDAP_CHARS_OPT_SJIS );
#endif
        printf( "dn: %s\n", dn );
        ldap_memfree( utf_dn );
        ldap_memfree( (char *)dn );
        /* 属性情報の取得 */
        for ( attr = ldap_first_attribute( ld, entry, &ber );
            attr != NULL;
            attr = ldap_next_attribute( ld, entry, ber ) ) {
            vals = ldap_get_values_len( ld, entry, attr );
            for ( cnt = 0; vals[cnt] != NULL; cnt++ ) {
                utf_value = calloc( (size_t)1, (vals[cnt]->bv_len + 1) );
                memcpy( utf_value, vals[cnt]->bv_val, vals[cnt]->bv_len );
                /* 日本語を含む文字列をUTF-8に変換 */
#if defined(unix)
                ldap_conv_utf( utf_value, &value,
                        LDAP_CHARS_OPT_UTF8, LDAP_CHARS_OPT_EUCJP );
#elif defined(_WIN32)
                ldap_conv_utf( utf_value, &value,
                        LDAP_CHARS_OPT_UTF8, LDAP_CHARS_OPT_SJIS );
#endif
                printf( "%s: %s\n", attr, value );
                free( utf_value );
                ldap_memfree( value );
            }
            ldap_memfree( attr );
            ldap_value_free_len( vals );
        }
        ldap_ber_free( ber, 0 );
        printf( "\n" );
        /* エントリ数加算 */
        num_entry++; 
    }

    if ( freeit != 0 ) {
        ldap_msgfree( result );
    }

    return( num_entry );
}

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005