エントリの変更では、指定された属性を追加、削除、置換することができます。このとき、指定されなかった属性は変更しません。
エントリを変更するには、以下の関数を使用します。
ldap_modify( LDAP *ld, const char *dn, LDAPMod **mods )
非同期型のエントリ変更をします。
ldap_modify_s( LDAP *ld, const char *dn, LDAPMod **mods )
同期型のエントリ変更をします。
パラメタとして以下のものを指定します。
エントリのDN
変更するエントリのDNを指定します。
操作対象の属性
LDAPMod構造体を使って、操作する属性ごとに、以下のパラメタを指定します。
変更する属性の名前
操作する属性の名前を指定します。
変更操作の種類
属性値の追加、属性値の削除、属性値の置換のうち、どれか1つを指定します。
属性値の種類
文字列データ、またはバイナリデータを指定します。
属性値(複数指定可能)
この属性に設定する属性値を指定します。属性値は、複数指定することができます。
Interstage ディレクトリサービスは、指定された変更操作の種類に従って以下の処理をします。
エントリに、指定された属性と属性値を追加します。属性を追加するには、ldap_modify_s()関数を使用します。LDAPMod構造体のmod_opメンバにはLDAP_MOD_ADDを指定します。
属性値の追加処理の図を以下に示します。
既存の属性を指定した場合、指定された属性に属性値を追加します。
属性値にバイナリを指定するには、berval構造体を使用します。バイナリデータを登録することを示すため、LDAPMod構造体のmod_opメンバにLDAP_MOD_BVALUESを論理和で指定し、mod_bvaluesメンバにberval構造体を指定します。
属性値にバイナリを指定する例です。
LDAPMod **mods[]; struct berval berval; struct berval *ber_array[2]; readBinary( filename, &berval); ber_array[0] =berval; ber_array[1] =NULL; mods[0]->mod_op = LDAP_MOD_ADD | LDAP_MOD_BVALUES; mods[0]->mod_type = "jpegPhoto"; mods[0]->mod_bvalues = ber_array; rtn = ldap_modify_s( ld, mod_dn, mods );
指定された属性の値を、クライアントが指定した値と置き換えます。
属性値の置換処理の図を以下に示します。
コード例です。
LDAPMod **mod; char *vals[] = {"5555-0123", "5555-6789", NULL}; mod[0]->mod_op = LDAP_MOD_REPLACE; mod[0]->mod_type = "telephoneNumber"; mod[0]->mod_values = vals; rtn = ldap_modify_s( ld, mod_dn, mod );
指定された属性から、クライアントが指定した属性値を削除します。このとき、エントリの属性値の数が1個の場合には、属性を削除します。
属性値の削除処理の図を以下に示します。
コード例です。
LDAPMod mod1; char *vals1[ 2 ]; vals1[0] = "5555-0123"; vals1[1] = NULL; mod1.mod_op = LDAP_MOD_DELETE; mod1.mod_type = "telephoneNumber"; mod1.mod_values = vals1; rtn = ldap_modify_s( ld, mod_dn, mod1 );
また、属性名だけを指定し、属性値を省略した場合には、指定された属性を削除します。