Mac OS X Server で OpenLdap 用いてユーザ管理をしているとき,何かの拍子でログインができなくなってしまうことがあれば,まずはログを確認みましょう.
/var/log/system.log を確認したとき
May 30 14:23:42 hostname com.apple.launchd[1] (org.openldap.slapd[190]): Exited with exit code: 1 May 30 14:23:42 hostname com.apple.launchd[1] (org.openldap.slapd): Throttling respawn: Will start in 10 seconds
/var/log/slapd.log を確認したとき
May 30 15:20:40 hostname slapd[932]: bdb(dc=hostname,dc=example,dc=com): PANIC: fatal region error detected; run recovery May 30 15:20:40 hostname slapd[932]: bdb_db_open: Database cannot be opened, err -30978. Restore from backup! May 30 15:20:40 hostname slapd[932]: bdb(dc=hostname,dc=example,dc=com): DB_ENV->lock_id_free interface requires an environment configured for the locking subsystem May 30 15:20:40 hostname slapd[932]: bdb(dc=hostname,dc=example,dc=com): txn_checkpoint interface requires an environment configured for the transaction subsystem May 30 15:20:40 hostname slapd[932]: bdb_db_close: txn_checkpoint failed: Invalid argument (22) May 30 15:20:40 hostname slapd[932]: backend_startup_one: bi_db_open failed! (-30978) May 30 15:20:40 hostname slapd[932]: bdb_db_close: alock_close failed May 30 15:20:40 hostname slapd[932]: slapd stopped. May 30 15:20:40 hostname slapd[932]: connections_destroy: nothing to destroy.
このようなエラーがたくさん出力されている場合,何らかの原因で slapd が起動できていないことを表します.
次に,
# /usr/libexec/slapd -Tt
を実行したとき
overlay_config(): warning, overlay "dynid" already in list bdb(dc=hostname,dc=example,dc=com): PANIC: fatal region error detected; run recovery bdb_db_open: Database cannot be opened, err -30978. Restore from backup! bdb(dc=hostname,dc=example,dc=com): DB_ENV->lock_id_free interface requires an environment configured for the locking subsystem backend_startup_one: bi_db_open failed! (-30978) slap_startup failed (test would succeed using the -u switch)
このようなエラーが出た場合は,OpenLdap のデータベースが壊れています.
この場合は,DB のバックアップをとってから
# cp -R /var/db/openladp /var/db/openladp.backup
DB の修復を行いましょう.
# db_recover -h /var/db/openldap/openldap-data/
これで以下のような結果が出れば DB は修復されました.
slapd が起動するようになるはずです.
# /usr/libexec/slapd -Tt overlay_config(): warning, overlay "dynid" already in list config file testing succeeded