ページの先頭行へ戻る
Interstage Application Server ディレクトリサービス運用ガイド

9.3.5 検索結果の解析

  以下のLDIFで表される検索結果を例にとって、検索結果の解析方法を説明します。

  検索結果は以下のような構造で返却されます。

  検索結果の解析は、“エントリの解析”、“属性名の取得”、“属性値の取得”、および“DNの取得と解析”に分類することができます。

エントリの解析

  検索結果は、以下の関数を使用して検索結果に含まれているエントリを参照します。

  エントリの解析のコード例です。

  int  finished;
  int  num_entry;
  LDAPMessage *entry;
  :
  /* 非同期型の検索を行う */
  msgid = ldap_search( ld, basedn, LDAP_SCOPE_SUBTREE, filter, NULL, 0 );

  /* 検索結果を受け取る */
  finished = 0;
  while ( finished == 0 ) {
    rtn = ldap_result( ld, msgid, LDAP_MSG_ALL, &timeout, &result );
    switch( rtn ) {
  case 0: /* timeout */
        break;
  case -1: /* error occurred */
        return 1:
  default: /* success */
        finished = 1;
        break;
    }
  }
  
  /* 検索結果のエントリ数を調べる */
  num_entry = ldap_count_entries(ld, result);
  if( num_entry == 0){
      fprintf( stderr, "Not matched.\n" );
      return 0;
  }
  
  /* 検索結果を読み込む */
  entry = ldap_first_entry( ld, result );
  for ( ; entry != NULL; entry = ldap_next_entry( ld, entry ) ) {
      属性名の取得
  }

属性名の取得

  エントリ内の属性名を取得するには、以下の関数を使用します。

  属性名の取得のコード例です。

  char *attr;
  BerElememt *ber;
    :
  entry = ldap_first_entry( ld, result );
  attr = ldap_first_attribute( ld, entry, &ber );
  for ( ; attr != NULL; attr = ldap_next_attribute( ld, entry, ber ) ) {
    属性値の取得
    ldap_memfree(attr);
  }

属性値の取得

  エントリの属性値を取得するには、以下の関数を使用します。

  ldap_get_values()、およびldap_count_values()関数は、属性値を文字列データとして取り扱う場合に使用します。属性値をバイナリデータとして取り扱う場合には、ldap_get_values_len()、およびldap_count_values_len()関数を使用します。
  通知される属性値の形式については、“リファレンスマニュアル(API編)”の“検索結果の解析処理インタフェース”を参照してください。

  属性値の取得のコード例です。

  LDAPMessage    *entry;
  char           *attr;
  char           **vals;
  int            i; 
  struct berval  **bervals;
  int            count;
  
  vals = ldap_get_values( ld, entry, attr );
  if( vals == NULL ){
      return -1;
  }
  count = ldap_count_values( vals );
  for ( i=0; i<count; i++ ) {
      printf( "%s: %s\n", attr, vals[i] );
  }

DN取得と解析

  エントリのDNを取得する場合は、ldap_get_dn()を使用します。

  DNを各構成要素に分解してRDNを求める場合には、ldap_explode_dn()を使用します。

  この時、notypesパラメタに1を指定することで、RDNから属性を取り除いた形式で通知させることができます。
  また、RDNを構成要素に分解する場合には、ldap_explode_rdn()を使用します。

  DNの取得と解析に使用する関数については、“リファレンスマニュアル(API編)”の“検索結果の解析処理インタフェース”を参照してください。