#!/bin/sh
#
# "$Id: initd.script,v 1.1 2005/02/10 08:44:46 elkner Exp $"
#
# description:
#   Lightweight Directory Access Protocol (LDAP) daemon start/shutdown script.
#
# default: S/K45 0/K45 2/S70

. /lib/svc/share/smf_include.sh
BASEDIR=@CLIENT_BASEDIR@

LDAP_USER=`/usr/bin/svcprop -p start/user $SMF_FMRI 2>/dev/null`
if [ -z "$LDAP_USER" -o '""' = "$LDAP_USER" ]; then
	LDAP_USER="nobody"
fi
CONF=`/usr/bin/svcprop -p config/file $SMF_FMRI 2>/dev/null`
if [ -z "$CONF" -o '""' = "$CONF" ]; then
	CONF="/etc/openldap/slapd.conf"
fi
URLlist=`/usr/bin/svcprop -p config/urls $SMF_FMRI 2>/dev/null`
if [ -z "$URLlist" -o '""' = "$URLlist" ]; then
	URLlist="ldap:///"
fi
SSL_URLlist=`/usr/bin/svcprop -p config/ssl_urls $SMF_FMRI 2>/dev/null`
if [ -z "$SSL_URLlist" -o '""' = "$SSL_URLlist" ]; then
	SSL_URLlist="ldaps:///"
fi
SLAPD_OPTIONS=`/usr/bin/svcprop -p config/slapd_options $SMF_FMRI 2>/dev/null`
if [ '""' = "$SLAPD_OPTIONS" ]; then
	SLAPD_OPTIONS=""
fi

SPATH=@CLIENT_BASEDIR@/sbin
SLAPD=slapd
SLAPD_NAME="LDAP daemon"

checkPermissions() {
	if [ ! -r "$CONF" ]; then
#		echo "LDAP config file \"$CONF\" is not readable - exiting."
		exit 1
	fi
	for dir in `egrep '^directory' $CONF | sed -e 's#^directory##'` ; do
		for file in `find ${dir}/ ! -user $LDAP_USER -a \( -name "*.dbb" -o -name "*.gdbm" -o -name "*.bdb" -o -name "__db.*" \)` ; do
			if [ "$THIS_USER" = "root" ]; then
				chown $LDAP_USER $file
				if [ $? -ne 0 ]; then
					echo "WARNING: Unable to \"chown $LDAP_USER $file\""
				else
					echo "Changed owner of $file to \"$LDAP_USER\""
				fi
			else
				echo "WARNING: $file is not owned by \"$LDAP_USER\""
			fi
		done
	done
}

case $1 in
	start)
		checkPermissions
		if [ ! -x "$SPATH/$SLPAD" ]; then
			echo "$SPATH/$SLAPD is not executable"
			exit $SMF_EXIT_ERR_FATAL
		else
			if /usr/xpg4/bin/egrep -q '^TLS' $CONF ; then
				URL="$URLlist $SSL_URLlist"
			else
				URL="$URLlist"
			fi
			/usr/bin/echo "Starting $SLAPD_NAME ...\c"
			$SPATH/$SLAPD -u $LDAP_USER -f $CONF -h "${URL}" $SLAPD_OPTIONS
			if [ $? -ne 0 ]; then
				echo "failed."
				exit $SMF_EXIT_ERR_CONFIG
			else
				echo "done."
			fi
		fi
		;;
	stop)
		echo "Use 'svcadm disable openldap/slapd'"
		exit $SMF_EXIT_ERR_NOSMF
		;;
	*)
		echo "Usage: $0 start"
		exit 1
		;;
esac

exit $SMF_EXIT_OK
