#! /bin/sh #------------------------------------------------------------------------------ # /var/install/bin/ldapserver-restore-database - import LDAP database # # Copyright (c) 2009-2023 The Eisfair Team, team(at)eisfair(dot)org # # Creation : 2009-11-17 jed # Last Update: $Id: ldapserver-export-database 29883 2012-02-19 19:28:17Z jed $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. #------------------------------------------------------------------------------ # read eislib . /var/install/include/eislib #exec 2>/tmp/ldapserver-ldap-restore-trace-$$.log #set -x # command line parameter batch=0 quiet=0 if [ $# -gt 0 ] then # read parameter(s) while [ $# -gt 0 ] do case $1 in -importfile|--importfile ) batch=1 ldap_import_file="$2" shift; shift ;; -importpath|--importpath ) batch=1 ldap_backup_path="`echo "$2" | sed 's#/$##'`" shift; shift ;; -help|--help|-?|/? ) echo echo "Usage:" echo " ldapserver-restore-database - run in interactive mode" echo echo " ldapserver-restore-database --help - show this help" echo echo " ldapserver-restore-database -importfile <ldif-import-file>" echo " - import ldif file in batch mode" echo echo " ldapserver-restore-database -importpath <ldif-import-path>" echo " - import default ldif file in batch mode" exit 1 ;; * ) break ;; esac done fi ldap_confpath=/etc/openldap ldap_datapath=/var/lib/openldap tmppath='/tmp' user='ldap' group='ldap' configfile=/etc/config.d/ldapserver ldapserver_logfile=${ldap_datapath}/ldapserver-ldap-restore.log exit_code=0 if [ -f ${configfile} ] then . ${configfile} if [ -z "${ldap_import_file}" ] then if [ -z "${ldap_backup_path}" ] then if [ "${LDAPSERVER_BACKUP}" = 'yes' ] then ldap_backup_path="${LDAPSERVER_BACKUP_PATH}" else ldap_backup_path="${tmppath}" fi fi ldap_import_file=${ldap_backup_path}/`echo ${LDAPSERVER_LDAP_BASEDN} | sed -e 's/dc= *//g' -e 's/[ ,]*//g'`.ldif fi if [ ${batch} -eq 0 ] then # interactive mode clrhome mecho --info "Restore LDAP database" mecho ldap_import_file=$(/var/install/bin/ask "Please enter the file name to restore (full path) [q]" "${ldap_import_file}" "+") if [ "${ldap_import_file}" = "q" -o "${ldap_import_file}" = "Q" ] then exit 0 fi fi destpath="`dirname ${ldap_import_file}`" if [ -d "${destpath}" ] then if [ -f "${ldap_import_file}" ] then # file exists, go on ... count_bdb=`find ${ldap_datapath} -maxdepth 1 -name "*.bdb" -printf '.' | wc -m` count_mdb=`find ${ldap_datapath} -maxdepth 1 -name "*.mdb" -printf '.' | wc -m` if [ ${count_bdb} -gt 0 -o ${count_mdb} -gt 0 ] then # files exist, delete it? if [ ${batch} -eq 0 ] then mecho --warn "A LDAP database already exists!" mecho if /var/install/bin/ask "Do you want to delete it" "no" then # go on ... if [ ${count_bdb} -gt 0 ] then rm -f ${ldap_datapath}/*.bdb ${ldap_datapath}/__db.* ${ldap_datapath}/log.* ${ldap_datapath}/alock fi if [ ${count_mdb} -gt 0 ] then rm -f ${ldap_datapath}/*.mdb ${ldap_datapath}/__db.* ${ldap_datapath}/log.* ${ldap_datapath}/alock fi else # abort restore operation exit 1 fi else # batch mode # check if directory path is accessible and writeble touch ${ldap_import_file}.TEST 2>/dev/null if [ $? -eq 0 ] then # directory path is accessible and writeble, go on ... rm -f ${ldap_import_file}.TEST if [ ${count_bdb} -gt 0 ] then # backup bdb files and remove it afterwards tar czf ${destpath}/${EISDATE}_${EISTIME}_ldapserver_bdb_backup.tgz ${ldap_datapath}/*.bdb ${ldap_datapath}/log* \ ${ldap_datapath}/__db.* ${ldap_datapath}/alock ${ldap_datapath}/ldap.base ${ldap_datapath}/DB_CONFIG \ ${ldap_datapath}/*.log ${ldap_import_file} if [ $? -eq 0 ] then rm -f ${ldap_datapath}/*.bdb ${ldap_datapath}/__db.* ${ldap_datapath}/log* ${ldap_datapath}/alock ${ldap_datapath}/*.log fi else if [ ${count_mdb} -gt 0 ] then # backup mdb files and remove it afterwards tar czf ${destpath}/${EISDATE}_${EISTIME}_ldapserver_mdb_backup.tgz ${ldap_datapath}/*.mdb ${ldap_datapath}/log* \ ${ldap_datapath}/ldap.base ${ldap_datapath}/DB_CONFIG ${ldap_datapath}/*.log ${ldap_import_file} if [ $? -eq 0 ] then rm -f ${ldap_datapath}/*.mdb ${ldap_datapath}/log* ${ldap_datapath}/*.log fi fi fi # backup database files fi # directory path is accessible and writeble, go on ... fi # interactive or batch mode fi # files exist fi # import file exists rm -f ${ldapserver_logfile} echo "date: ${EISDATE} ${EISTIME}" > ${ldapserver_logfile} # shutdown server /usr/sbin/service stop ldapserver 2>&1 | /usr/bin/ansifilter >> ${ldapserver_logfile} echo >> ${ldapserver_logfile} 2>> ${ldapserver_logfile} # restore LDAP database /usr/sbin/slapadd -v -c -f ${ldap_confpath}/slapd.conf -l ${ldap_import_file} >> ${ldapserver_logfile} 2>> ${ldapserver_logfile} if [ $? -eq 0 ] then mecho "LDAP directory successfully restore from file '${ldap_import_file}." rm -f ${ldap_import_file} else mecho --error "Error during restore of LDAP directory tree. Please try again!" fi echo >> ${ldapserver_logfile} 2>> ${ldapserver_logfile} # set file ownership chown -R ${user} ${ldap_datapath} chgrp -R ${group} ${ldap_datapath} # update index /usr/sbin/slapindex >> ${ldapserver_logfile} 2>> ${ldapserver_logfile} echo >> ${ldapserver_logfile} 2>> ${ldapserver_logfile} # start server /usr/sbin/service start ldapserver 2>&1 | /usr/bin/ansifilter >> ${ldapserver_logfile} if [ ${batch} -eq 0 ] then # check if show-doc.cui supports colors color='' frame='' if $(grep -qE "^MENU=['\"]/var/install/bin/show-menu['\"]" /etc/config.d/setup) then color='--nocolor' frame='--noframe' fi sleep 3 /var/install/bin/show-doc.cui ${color} ${frame} --follow --title ${ldapserver_logfile} ${ldapserver_logfile} fi else mecho --error "Source file '${ldap_import_file}' doesn't exist!" fi else mecho --error "Configuration file '${configfile}' doesn't exist!" fi exit 0