#!/sbin/openrc-run
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

extra_commands="checkconfig"

[ -z "$INSTANCE" ] && INSTANCE="openldap${SVCNAME#slapd}"
PIDDIR=/run/openldap
PIDFILE=$PIDDIR/$SVCNAME.pid

depend() {
	need net
	before dbus hald avahi-daemon
	provide ldap
}

start() {
	checkpath -q -d ${PIDDIR} -o ldap:ldap 
	if ! checkconfig -Q ; then
		eerror "There is a problem with your slapd.conf!"
		return 1
	fi
	ebegin "Starting ldap-server"
	[ -n "$KRB5_KTNAME" ] && export KRB5_KTNAME
	eval start-stop-daemon --start --pidfile ${PIDFILE} --exec /usr/lib/openldap/slapd -- -u ldap -g ldap "${OPTS}"
	eend $?
}

stop() {
	ebegin "Stopping ldap-server"
	start-stop-daemon --stop --signal 2 --quiet --pidfile ${PIDFILE}
	eend $?
}

checkconfig() {
	# checks requested by bug #502948
	# Step 1: extract the last valid config file or config dir
	set -- $OPTS
	while [ -n "$*" ]; do
		opt=$1 ; shift
		if [ "$opt" = "-f" -o "$opt" = "-F" ] ; then
			CONF=$1
			shift
		fi
	done
	set --
	# Fallback
	CONF=${CONF-/etc/openldap/slapd.conf}
	[ -d $CONF ] && CONF=${CONF}/*
	DBDIRS=`eval awk '"/^(directory|olcDbDirectory:)/{print \\$2}"' $CONF`
	for d in $DBDIRS; do
		if [ ! -d $d ]; then
			eerror "Directory $d in config does not exist!"
			return 1
		fi
		/usr/bin/find $d ! -name DB_CONFIG ! -user ldap -o ! -group ldap |grep -sq .
		if [ $? -ne 0 ]; then
			ewarn "You have files in $d not owned by the ldap user, you must ensure they are accessible to the slapd instance!"
		fi
		[ ! -e $d/DB_CONFIG ] && ewarn "$d/DB_CONFIG does not exist, slapd performance may be sub-optimal" 
	done
	# now test the config fully
	/usr/sbin/slaptest -u "$@" ${OPTS_CONF}
}
