
We start slapd in the foreground (-d0) but backgrounded in the shell, then we wait 4 seconds. This causes a race condition however. This commit makes the slapd-init script more robust and limits the wait to however many seconds (up to 30) that slapd needs to start service.
59 lines
1.5 KiB
Bash
59 lines
1.5 KiB
Bash
#!/bin/sh
|
|
# $Id$
|
|
|
|
srcdir=@srcdir@
|
|
|
|
rm -rf db schema
|
|
mkdir db
|
|
|
|
# kill of old slapd if running
|
|
sh "${srcdir}/slapd-stop" > /dev/null
|
|
|
|
SCHEMA_NEEDED="hdb core nis cosine inetorgperson openldap samba"
|
|
|
|
SCHEMA_PATHS="${srcdir}/../../lib/hdb ${srcdir} /etc/ldap/schema /etc/openldap/schema /private/etc/openldap/schema /usr/share/openldap/schema"
|
|
|
|
test -d schema || mkdir schema
|
|
|
|
# setup needed schema files
|
|
for f in $SCHEMA_NEEDED; do
|
|
if [ ! -r schema/$f.schema ]; then
|
|
for d in $SCHEMA_PATHS ; do
|
|
if [ -r $d/$f.schema ] ; then
|
|
cp $d/$f.schema schema/$f.schema
|
|
continue 2
|
|
fi
|
|
done
|
|
echo "SKIPPING TESTS: you need the following schema file: $f.schema"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
touch modules.conf || exit 1
|
|
|
|
if ! slapadd -d 0 -f "${srcdir}/slapd.conf" < "${srcdir}/init.ldif"; then
|
|
echo "moduleload back_bdb.la" >> modules.conf
|
|
if ! slapadd -d 0 -f "${srcdir}/slapd.conf" < "${srcdir}/init.ldif"; then
|
|
echo "modulepath /usr/lib/ldap" > modules.conf
|
|
echo "moduleload back_bdb.la" >> modules.conf
|
|
slapadd -d 0 -f "${srcdir}/slapd.conf" < "${srcdir}/init.ldif" || exit 1
|
|
fi
|
|
fi
|
|
|
|
cp "`which slapd`" . || true # fails if running
|
|
|
|
echo "starting slapd"
|
|
./slapd -d0 -f "${srcdir}/slapd.conf" -h ldapi://.%2Fldap-socket &
|
|
slapd_pid=$!
|
|
|
|
tries=0
|
|
while kill -0 $slapd_pid && [ ! -S ldap-socket ] &&
|
|
! ldapsearch -l 2 -w '' -D '' -b "o=TEST,dc=H5L,dc=SE" -s base -H ldapi://.%2Fldap-socket >/dev/null &&
|
|
[ $tries -lt 30 ]; do
|
|
sleep 1
|
|
tries=`expr 1 + $tries`
|
|
done
|
|
|
|
kill -0 $slapd_pid || exit 1
|
|
[ -S ldap-socket ] || exit 1
|