努力したWiki

推敲の足りないメモ書き多数

ユーザ用ツール

サイト用ツール


documents:proglang:perl:perl-007

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
documents:proglang:perl:perl-007 [2026/05/08 11:54] – ↷ documents:perl:perl-007 から documents:proglang:perl:perl-007 へページを移動しました。 k896951documents:proglang:perl:perl-007 [2026/05/17 15:05] (現在) – [PerlでLDAPのエントリを更新する] k896951
行 1: 行 1:
 +====== 012.PerlでLDAPのエントリを更新する ======
 +
 +2012年12月17日\\
 +LDAPエントリ更新の雛形をメモ。
 +
 +===== ソース =====
 +
 +DNが uid=user1,ou=People,dc=exsample,dc=jp のエントリが持つmail属性を更新します。
 +
 +<code perl>
 +use Encode;
 +use Net::LDAP;
 +
 +my $admin     = 'cn=Manager,ou=People,dc=example,dc=jp';
 +my $pass      = 'password';
 +my $uid       = 'user1';
 +my $newemail  = encode('utf-8', 'user1@example.jp' );
 +my $bdn       = "uid=$uid,ou=People,dc=exsample,dc=jp";
 +##my $bdn2      = "ou=People,dc=exsample,dc=jp";
 +
 +my $ldap = Net::LDAP->new('host:389');
 +
 +my $mess    = $ldap->bind( $admin,  password => $pass );
 +
 +my $ldapmem = $ldap->search(
 +                             base   => $bdn,
 +                             scope  => "base",
 +                             filter => "objectClass=*"
 +                           );
 +
 +## my $ldapmem = $ldap->search(
 +##                             base   => $bdn2,
 +##                             scope  => "sub",
 +##                             filter => "(uid=$uid)"
 +##                           );
 +
 +my $entry  = ($ldapmem->entries)[0];
 +my $result = $ldap->modify( 
 +                            $entry,
 +                            replace => { mail=> $newemail }
 +                          );
 +  $ldap->unbind();
 +
 +</code>
 +
 +===== 簡単な説明 =====
 +
 +手順は
 +  - バインドする
 +  - 目的のエントリを探す
 +  - そのエントリを更新
 +  - アンバインドする
 +
 +となります。
 +
 +search()メソッドのscopeに"sub"を指定すると、指定のBDNから再帰的に検索します。
 +filterは必須で、これが無いとエントリがなぜか見つかりません。
 +
 +search()メソッドの結果は配列で返されます。1エントリしか検索されない場合、第0番目の要素が該当します。
 +エントリのオブジェクトにあるget_value()メソッドで属性値を取り出せます。
 +
 +<code perl>
 +  $entry  = ($ldapmem->entries)[0];
 +
 +  print $entry->get_value("mail")."\n";
 +</code>
 +
 +modify()メソッドで更新したいDN(今しがたsearch()で見つけたもの)、更新したい属性とその値を指定します。
 +groupオブジェクトのmember属性のように複数の値を格納する場合、属性値を取得後に値をマージ、マージ結果をmodify()メソッドでアップデートしてあげる事になるようです。
 +こんな感じ。配列で複数の値を表すようです。
 +<code perl>
 +my $result = $ldap->modify( 
 +                            $entry,
 +                            replace => { memberUid=> @memberUids }
 +                          );
 +</code>
 +
 +
  
documents/proglang/perl/perl-007.txt · 最終更新: by k896951

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki