#!/sbin/openrc-run # Copyright 1999-2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # shellcheck shell=sh DIRSRV_EXEC="/usr/sbin/ns-slapd" PID_DIRECTORY="/run/dirsrv" LOCK_DIRECTORY="/var/lock/dirsrv" DIRSRV_CONF_DIR="/etc/dirsrv" depend() { need net logger use dns provide dirsrv ldap } checkconfig() { set -- "${DIRSRV_CONF_DIR}"/slapd-* if [ ! -e "${1}" ]; then eerror "389 Directory Server has not been configured." eend 1 return 1 fi } start() { checkconfig || return 1 for instance in "${DIRSRV_CONF_DIR}"/slapd-*; do instance=$(basename "${instance}") # skip .removed instances, bug #338133 if [ "${instance%%.removed}" != "${instance}" ]; then continue fi # Create the required directories in case they got nuked mkdir -p "${PID_DIRECTORY}" mkdir -p "${LOCK_DIRECTORY}/${instance}" # This will probably break one day, we should be pulling out the suitespotuser from dse.ldif chown dirsrv: "${PID_DIRECTORY}" chown dirsrv: "${LOCK_DIRECTORY}/${instance}" ebegin "Starting 389 Directory Server: instance ${instance}" start-stop-daemon --start --quiet -m \ --pidfile "${PID_DIRECTORY}/${instance}.startpid" \ --exec "${DIRSRV_EXEC}" -- -D "${DIRSRV_CONF_DIR}/${instance}" \ -i "${PID_DIRECTORY}/${instance}.pid" \ -w "${PID_DIRECTORY}/${instance}.startpid" sts="${?}" eend "${sts}" if [ "${sts}" != "0" ]; then return 1 fi done } stop() { checkconfig || return 1 for instance in "${DIRSRV_CONF_DIR}"/slapd-*; do instance=$(basename "${instance}") if [ "${instance%%.removed}" != "${instance}" ]; then continue fi ebegin "Stopping 389 Directory Server: instance ${instance}" start-stop-daemon --stop --quiet \ --pidfile "${PID_DIRECTORY}/${instance}.pid" \ --exec "${DIRSRV_EXEC}" eend "${?}" done } status() { for instance in "${DIRSRV_CONF_DIR}"/slapd-*; do instance=$(basename "${instance}") if [ "${instance%%.removed}" != "${instance}" ]; then continue fi if [ -e "${PID_DIRECTORY}/${instance}.pid" ]; then pid=$(cat "${PID_DIRECTORY}/${instance}.pid") if kill -0 "${pid}" 2>/dev/null; then einfo "389 Directory Server: instance ${instance} (pid ${pid}) running." else ewarn "389 Directory Server: instance ${instance} (pid ${pid}) NOT running." fi else eerror "389 Directory Server: instance ${instance} is NOT running." fi done }