summaryrefslogtreecommitdiff
blob: 3547e0751816109a93b580b81bfcc55b59e42ae8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/sbin/openrc-run
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

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}
}