How to fix failing Open Directory (database "cn=authdata" cannot be opened, err 12) after hang
Check if the OD database is the problem
$ sudo /usr/libexec/slapd -Tt
No further action is needed if the output tells something like:
...
bdb_db_open: database "dc=hostname,dc=domainname,dc=tldname": recovery skipped in read-only mode. Run manual recovery if errors are encountered.
...
Try repair
To repair the Open Directory authdata database:
$ sudo launchctl unload /System/Library/LaunchDaemons/org.openldap.slapd.plist
Now start the database recovery using the command below that matches your OS version.
$ sudo db_recover -h /var/db/openldap/authdata/ # Mac OS X 10.7
$ sudo db_recover -h /var/db/openldap/openldap-data/ # Mac OS X 10.6
Now slapd in tool mode outputs:
$ sudo /usr/libexec/slapd -Tt
bdb_db_open: database "dc=nl2,dc=probackup,dc=nl": unclean shutdown detected; attempting recovery.
bdb_db_open: database "dc=nl2,dc=probackup,dc=nl": recovery skipped in read-only mode. Run manual recovery if errors are encountered.
bdb_monitor_db_open: monitoring disabled; configure monitor database to enable
config file testing succeeded
Now turn back on Open Directory:
$ sudo launchctl load /System/Library/LaunchDaemons/org.openldap.slapd.plist
And issue another restart to be better safe than sorry:
$ sudo reboot
Open Directory should now be up and running again. In case it isn't running, try below.
Try Time Machine restore
First have a look at the available back-upped versions:
$ ls /Volumes/Time\ Machine/Backups.backupdb/*/
Pick the most recent version when Open Directory was still running correctly, for example 2018-07-22-091106
.
Start again with unloading the daemon.
$ sudo launchctl unload /System/Library/LaunchDaemons/org.openldap.slapd.plist
Then remove (or rename) the database directory (when it is available Time Machine won't restore correctly) and start restore:
$ sudo rm -rf /var/db/openldap/ && sudo tmutil restore -v /Volumes/Time\ Machine/Backups.backupdb/*/2018-07-22-091106/Macintosh\ HD/var/db/openldap/ /var/db/
Force repair the database:
$ sudo db_recover -cv -h /var/db/openldap/openldap-data/
Repair permissions and reboot:
$ sudo diskutil repairPermissions / && sudo reboot
This is how I usually repair a broken LDAP/OD
1. check if this is the problem
sudo /usr/libexec/slapd -Tt
*
You might get: bdb_db_open: database "cn=authdata": db_open(/var/db/openldap/authdata/id2entry.bdb) failed: Invalid argument (22).
2. Stop LDAP on OD Master
sudo launchctl unload /System/Library/LaunchDaemons/org.openldap.slapd.plist
3. Repair Permissions
diskutil repairPermissions /
4. backup openldap db
sudo cp /var/db/openldap/authdata/id2entry.bdb /var/db/openldap/authdata/id2entry.bdb.backup
5. repair
sudo db_recover -cv -h /var/db/openldap/openldap-data/
6. run repair again to check
sudo db_recover -cv -h /var/db/openldap/openldap-data/
7. do it one more time so things are repaired correctly
sudo /usr/libexec/slapd -Tt
8. restart the service
sudo launchctl load /System/Library/LaunchDaemons/org.openldap.slapd.plist
9. If the above does not work, try:
sudo db_recover -cv -h /var/db/openldap/authdata/
then I restart the service with step 8.
sudo launchctl load /System/Library/LaunchDaemons/org.openldap.slapd.plist
This usually fixes the problem... but in some cases you need to restore like llange explaines in his post.
First best is to check the disk you may do so either using the recovery partition or single user (cmd - S at startup) then type :
fsck -fy
QWERTY keyboard the dash is 2 key left from backspace.
To re-import a corrupted database from a backup you should backup and replace the following files/ folders :
- var/db/openldap/
- usr/bin/db_recover
Not sure it's necessary but if you have removed the LDAPv3 entry in the System keychain :
- Library/Keychains/System.keychain
The try a recovery…
Then you should repair disk permissions from a terminal (not single user) :
diskutil repairPermissions /
If after the recovery you experience problem connecting to services check the configuration under "Services" tab in Directory Utility.