須藤です。

ActiveSambaLdap 0.0.6をリリースしました。
  http://asl.rubyforge.org/

  % sudo gem install activesambaldap

ActiveSambaLdapはActiveLdap(*)上に実装されたSambaで使用する
LDAPエントリを操作するためのライブラリです。ActiveLdap上に実
装されているため、各エントリ(ユーザ、グループ、コンピュータ
など)をオブジェクトとして操作することができます。

(*): http://ruby-activeldap.rubyforge.org/


同様のソフトウェアにPerlで実装されたsmbldap-toolsがあります。
ActiveSambaLdapはsmbldap-toolsが提供するコマンド群と同じ機能
のコマンド群を提供しているため、smbldap-toolsの代わりに使う
ことができます。

設定例(smb.confの設定のところ):
  http://asl.rubyforge.org/readme.html.ja


ActiveSambaLdapは、smbldap-toolsは以下のような問題を解決する
ために作られています。

  * 設定エラーがあった場合に問題を発見しづらい

  * 設定ファイルの場所が固定のため、テスト用の設定ファイル・
    本番用の設定ファイルなどというように切り替えるのが面倒

  * ライブラリとして作成されていないため、プログラム中で
    smbldap-tools相当の機能を実現することが困難

  * Rubyで実装されていない


例えば、以下はLDAPサーバにsamba.schemaがincludeされていない
ときに初期データを投入したときのエラーメッセージです。

smbldap-populate:
  % sudo /usr/sbin/smbldap-populate
  Use of uninitialized value $value in substitution (s///) at /usr/share/perl5/smbldap_tools.pm line 135, <CONFIGFILE> line 178.
  Use of uninitialized value $value in substitution (s///) at /usr/share/perl5/smbldap_tools.pm line 135, <CONFIGFILE> line 180.
  Populating LDAP directory for domain TestDomain (S-1-5-21-XXX)
  (using builtin directory structure)

  adding new entry: dc=samba,dc=example,dc=com
  adding new entry: ou=Users,dc=samba,dc=example,dc=com
  adding new entry: ou=Groups,dc=samba,dc=example,dc=com
  adding new entry: ou=Computers,dc=samba,dc=example,dc=com
  adding new entry: ou=Idmap,dc=samba,dc=example,dc=com
  adding new entry: uid=root,ou=Users,dc=samba,dc=example,dc=com
  failed to add entry: objectClass: value #4 invalid per syntax at /usr/sbin/smbldap-populate line 499, <GEN1> line 58.
  adding new entry: uid=nobody,ou=Users,dc=samba,dc=example,dc=com
  failed to add entry: objectClass: value #4 invalid per syntax at /usr/sbin/smbldap-populate line 499, <GEN1> line 89.
  ...
  Please provide a password for the domain root: 
  Use of uninitialized value $value in substitution (s///) at /usr/share/perl5/smbldap_tools.pm line 135, <CONFIGFILE> line 178.
  Use of uninitialized value $value in substitution (s///) at /usr/share/perl5/smbldap_tools.pm line 135, <CONFIGFILE> line 180.
  /usr/sbin/smbldap-passwd: user root doesn't exist

4番目のobjectClassの値がおかしくてエラーが起こったようなメッ
セージがでています。
  failed to add entry: objectClass: value #4 invalid ...

しかし、その後もデータ投入処理を続けて、最後に管理ユーザを追
加して、それもエラーになっています。
  /usr/sbin/smbldap-passwd: user root doesn't exist


smbldap-populateに相当するのがasl-populateで、以下のようにな
ります。

asl-populate:
  % sudo ../asl-populate
  /.../lib/active_ldap/object_class.rb:69:in `assert_valid_object_class_value': LDAPサーバが知らないobjectClassです: sambaGroupMapping (ActiveLdap::ObjectClassError)
          from /.../lib/active_ldap/object_class.rb:44:in `assert_object_classes'
          from /.../lib/active_ldap/object_class.rb:29:in `classes='
  ...

途中で例外が起きてそのまま死んでいるのですが、
LDAPサーバにsambaGroupMappingというobjectClassが登録されてい
ないということが分かります。これを見れば、samba.schemaを
includeすることを忘れているのに気づくかもしれません。


もし、Samba + LDAP環境を管理するときは役にたつかもしれません。