ansible/roles/ldap_server/files/ldap-backup.sh

35 lines
896 B
Bash
Executable file

#!/bin/sh
set -eu
umask 027
PATH="/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin"
if [ "$(whoami)" != "root" ]; then
echo "ERR: Script needs to be run as root user" 1>&2
exit 1
fi
BACKUPDIR="/srv/backup"
BACKUPAGE="30"
DATE="$(date '+%Y-%m-%d')"
cd "$BACKUPDIR"
ldapsearch -LLL -x -H ldapi:// -s base -b 'cn=Databases,cn=Monitor' \
'(objectClass=*)' namingContexts | \
sed -n 's/^namingContexts: \(.*\)/\1/p' | while read -r db ; do
[ "$db" = "cn=config" ] && continue
if ! slapcat -f /etc/openldap/slapd.conf -b "$db" 2> /dev/null | \
gzip > "${db}.${DATE}.gz"
then
echo "ERR: Failed to backup database ${db}" 1>&2
continue
fi
chgrp backup "${BACKUPDIR}/${db}.${DATE}.gz"
done
find . -xdev -depth -mindepth 1 -maxdepth 1 -type f -mtime +${BACKUPAGE} \
-name '*.gz' -execdir rm -f -- {} \;