Interstage Application Server Smart Repository運用ガイド
目次 索引 前ページ次ページ

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

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

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

[jp_prt_entry.c]

/*
 * Copyright (c) 2004.  Fujitsu Limited.  All rights reserved.
 *
 * エントリ情報の出力(日本語データ含む)
 *
 */

#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( 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