|
Packit |
6bd9ab |
#!/bin/sh
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
# run_slapd.sh - configure and run a slapd instance
|
|
Packit |
6bd9ab |
#
|
|
Packit |
6bd9ab |
# Copyright (C) 2013 Arthur de Jong
|
|
Packit |
6bd9ab |
#
|
|
Packit |
6bd9ab |
# This library is free software; you can redistribute it and/or
|
|
Packit |
6bd9ab |
# modify it under the terms of the GNU Lesser General Public
|
|
Packit |
6bd9ab |
# License as published by the Free Software Foundation; either
|
|
Packit |
6bd9ab |
# version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
6bd9ab |
#
|
|
Packit |
6bd9ab |
# This library is distributed in the hope that it will be useful,
|
|
Packit |
6bd9ab |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
6bd9ab |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
6bd9ab |
# Lesser General Public License for more details.
|
|
Packit |
6bd9ab |
#
|
|
Packit |
6bd9ab |
# You should have received a copy of the GNU Lesser General Public
|
|
Packit |
6bd9ab |
# License along with this library; if not, write to the Free Software
|
|
Packit |
6bd9ab |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
Packit |
6bd9ab |
# 02110-1301 USA
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
set -e
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
# find source directory (used for finding LDIF files)
|
|
Packit |
6bd9ab |
srcdir="${srcdir-`dirname "$0"`}"
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
# present usage information
|
|
Packit |
6bd9ab |
usage() {
|
|
Packit |
6bd9ab |
echo "Usage: $0 PATH {setup|start|stop|clean|dump_config|dump_db}" >&2
|
|
Packit |
6bd9ab |
}
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
# examine directory for usability
|
|
Packit |
6bd9ab |
check_dir() {
|
|
Packit |
6bd9ab |
if ! [ -e "$1" ]
|
|
Packit |
6bd9ab |
then
|
|
Packit |
6bd9ab |
echo "notfound"
|
|
Packit |
6bd9ab |
elif ! [ -d "$1" ]
|
|
Packit |
6bd9ab |
then
|
|
Packit |
6bd9ab |
echo "unknown"
|
|
Packit |
6bd9ab |
elif [ -z "$(find "$basedir" -mindepth 1 -maxdepth 1 2>/dev/null || true)" ]
|
|
Packit |
6bd9ab |
then
|
|
Packit |
6bd9ab |
echo "empty"
|
|
Packit |
6bd9ab |
elif [ -d "$1/ldapdb" ]
|
|
Packit |
6bd9ab |
then
|
|
Packit |
6bd9ab |
if [ -f "$basedir/setup-complete" ]
|
|
Packit |
6bd9ab |
then
|
|
Packit |
6bd9ab |
echo "complete"
|
|
Packit |
6bd9ab |
else
|
|
Packit |
6bd9ab |
echo "incomplete"
|
|
Packit |
6bd9ab |
fi
|
|
Packit |
6bd9ab |
else
|
|
Packit |
6bd9ab |
echo "unknown"
|
|
Packit |
6bd9ab |
fi
|
|
Packit |
6bd9ab |
}
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
# check whether our slapd is running
|
|
Packit |
6bd9ab |
our_slapd_is_running() {
|
|
Packit |
6bd9ab |
if [ -f "$basedir/slapd.pid" ] && kill -s 0 `cat "$basedir/slapd.pid"` > /dev/null 2>&1
|
|
Packit |
6bd9ab |
then
|
|
Packit |
6bd9ab |
return 0 # is running
|
|
Packit |
6bd9ab |
fi
|
|
Packit |
6bd9ab |
return 1
|
|
Packit |
6bd9ab |
}
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
# the directory where to construct the environment
|
|
Packit |
6bd9ab |
if test $# -ne 2
|
|
Packit |
6bd9ab |
then
|
|
Packit |
6bd9ab |
usage
|
|
Packit |
6bd9ab |
exit 1
|
|
Packit |
6bd9ab |
fi
|
|
Packit |
6bd9ab |
basedir="$1"
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
# gather configuration information
|
|
Packit |
6bd9ab |
user="$( (getent passwd openldap || getent passwd ldap || getent passwd nobody) | sed 's/:.*//')"
|
|
Packit |
6bd9ab |
group="$( (getent group openldap || getent group ldap || getent group nogroup) | sed 's/:.*//')"
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
case "$2" in
|
|
Packit |
6bd9ab |
setup)
|
|
Packit |
6bd9ab |
if our_slapd_is_running
|
|
Packit |
6bd9ab |
then
|
|
Packit |
6bd9ab |
"$0" "$basedir" stop
|
|
Packit |
6bd9ab |
fi
|
|
Packit |
6bd9ab |
echo -n "Creating blank $basedir slapd environment..."
|
|
Packit |
6bd9ab |
case `check_dir "$basedir"` in
|
|
Packit |
6bd9ab |
notfound|empty|complete|incomplete) ;;
|
|
Packit |
6bd9ab |
*)
|
|
Packit |
6bd9ab |
echo "FAILED: already exists and is not empty or old environment"
|
|
Packit |
6bd9ab |
exit 1
|
|
Packit |
6bd9ab |
;;
|
|
Packit |
6bd9ab |
esac
|
|
Packit |
6bd9ab |
rm -rf "$basedir"
|
|
Packit |
6bd9ab |
mkdir -p "$basedir/slapd.d" "$basedir/ldapdb" || (echo " FAILED"; exit 1)
|
|
Packit |
6bd9ab |
echo " done."
|
|
Packit |
6bd9ab |
echo "Loading cn=config..."
|
|
Packit |
6bd9ab |
tmpldif=`mktemp -t slapadd.XXXXXX`
|
|
Packit |
6bd9ab |
sed "s|@BASEDIR@|$basedir|g" < "$srcdir/config.ldif" > "$tmpldif"
|
|
Packit |
6bd9ab |
slapadd -v -F "$basedir/slapd.d" -b "cn=config" -l "$tmpldif" || (echo " FAILED"; exit 1)
|
|
Packit |
6bd9ab |
rm -f "$tmpldif"
|
|
Packit |
6bd9ab |
echo "Loading dc=test,dc=tld..."
|
|
Packit |
6bd9ab |
slapadd -F "$basedir/slapd.d" -b "dc=test,dc=tld" -l "$srcdir/test.ldif" || (echo " FAILED"; exit 1)
|
|
Packit |
6bd9ab |
echo -n "Fixing permissions..."
|
|
Packit |
6bd9ab |
chown -R "$user":"$group" "$basedir" || (echo " FAILED"; exit 1)
|
|
Packit |
6bd9ab |
touch "$basedir/setup-complete"
|
|
Packit |
6bd9ab |
echo " done."
|
|
Packit |
6bd9ab |
exit 0
|
|
Packit |
6bd9ab |
;;
|
|
Packit |
6bd9ab |
start)
|
|
Packit |
6bd9ab |
echo -n "Starting OpenLDAP: slapd"
|
|
Packit |
6bd9ab |
case `check_dir "$basedir"` in
|
|
Packit |
6bd9ab |
complete) ;;
|
|
Packit |
6bd9ab |
*)
|
|
Packit |
6bd9ab |
echo " FAILED: environment not ready"
|
|
Packit |
6bd9ab |
exit 1
|
|
Packit |
6bd9ab |
;;
|
|
Packit |
6bd9ab |
esac
|
|
Packit |
6bd9ab |
if our_slapd_is_running
|
|
Packit |
6bd9ab |
then
|
|
Packit |
6bd9ab |
echo " already running."
|
|
Packit |
6bd9ab |
exit 0
|
|
Packit |
6bd9ab |
fi
|
|
Packit |
6bd9ab |
slapd -F "$basedir/slapd.d" -u "$user" -g "$group" \
|
|
Packit |
6bd9ab |
-h "ldap:/// ldaps:/// ldapi:///" || (echo " FAILED"; exit 1)
|
|
Packit |
6bd9ab |
echo "."
|
|
Packit |
6bd9ab |
;;
|
|
Packit |
6bd9ab |
stop)
|
|
Packit |
6bd9ab |
# (perhaps implement stop-any)
|
|
Packit |
6bd9ab |
echo -n "Stopping OpenLDAP: slapd"
|
|
Packit |
6bd9ab |
if ! our_slapd_is_running
|
|
Packit |
6bd9ab |
then
|
|
Packit |
6bd9ab |
echo " not running."
|
|
Packit |
6bd9ab |
exit 0
|
|
Packit |
6bd9ab |
fi
|
|
Packit |
6bd9ab |
for i in 1 2 3 4 5
|
|
Packit |
6bd9ab |
do
|
|
Packit |
6bd9ab |
[ -f "$basedir/slapd.pid" ] && kill `cat "$basedir/slapd.pid"` > /dev/null 2>&1 || true
|
|
Packit |
6bd9ab |
sleep 0.1 > /dev/null 2>&1 || true
|
|
Packit |
6bd9ab |
if ! our_slapd_is_running
|
|
Packit |
6bd9ab |
then
|
|
Packit |
6bd9ab |
echo " done."
|
|
Packit |
6bd9ab |
exit 0
|
|
Packit |
6bd9ab |
fi
|
|
Packit |
6bd9ab |
echo -n " ."
|
|
Packit |
6bd9ab |
sleep 1
|
|
Packit |
6bd9ab |
done
|
|
Packit |
6bd9ab |
echo " FAILED"
|
|
Packit |
6bd9ab |
exit 1
|
|
Packit |
6bd9ab |
;;
|
|
Packit |
6bd9ab |
clean)
|
|
Packit |
6bd9ab |
if our_slapd_is_running
|
|
Packit |
6bd9ab |
then
|
|
Packit |
6bd9ab |
"$0" "$basedir" stop
|
|
Packit |
6bd9ab |
fi
|
|
Packit |
6bd9ab |
echo -n "Cleaning $basedir... "
|
|
Packit |
6bd9ab |
case `check_dir "$basedir"` in
|
|
Packit |
6bd9ab |
complete|incomplete) ;;
|
|
Packit |
6bd9ab |
*)
|
|
Packit |
6bd9ab |
echo "FAILED: does not contain environment"
|
|
Packit |
6bd9ab |
exit 1
|
|
Packit |
6bd9ab |
;;
|
|
Packit |
6bd9ab |
esac
|
|
Packit |
6bd9ab |
rm -rf "$basedir"
|
|
Packit |
6bd9ab |
echo "done."
|
|
Packit |
6bd9ab |
exit 0
|
|
Packit |
6bd9ab |
;;
|
|
Packit |
6bd9ab |
dump_config)
|
|
Packit |
6bd9ab |
case `check_dir "$basedir"` in
|
|
Packit |
6bd9ab |
complete) ;;
|
|
Packit |
6bd9ab |
*)
|
|
Packit |
6bd9ab |
echo "Dumping config FAILED: environment not ready"
|
|
Packit |
6bd9ab |
exit 1
|
|
Packit |
6bd9ab |
;;
|
|
Packit |
6bd9ab |
esac
|
|
Packit |
6bd9ab |
slapcat -F "$basedir/slapd.d" -b "cn=config" -o ldif-wrap=no \
|
|
Packit |
6bd9ab |
| sed '/^\(structuralObjectClass\|entryUUID\|creatorsName\|createTimestamp\|entryCSN\|modifiersName\|modifyTimestamp\):/d;$d'
|
|
Packit |
6bd9ab |
;;
|
|
Packit |
6bd9ab |
dump_db)
|
|
Packit |
6bd9ab |
case `check_dir "$basedir"` in
|
|
Packit |
6bd9ab |
complete) ;;
|
|
Packit |
6bd9ab |
*)
|
|
Packit |
6bd9ab |
echo "Dumping database FAILED: environment not ready"
|
|
Packit |
6bd9ab |
exit 1
|
|
Packit |
6bd9ab |
;;
|
|
Packit |
6bd9ab |
esac
|
|
Packit |
6bd9ab |
slapcat -F "$basedir/slapd.d" -b "dc=test,dc=tld" -o ldif-wrap=no \
|
|
Packit |
6bd9ab |
| sed '/^\(structuralObjectClass\|entryUUID\|creatorsName\|createTimestamp\|entryCSN\|modifiersName\|modifyTimestamp\):/d;$d'
|
|
Packit |
6bd9ab |
;;
|
|
Packit |
6bd9ab |
*)
|
|
Packit |
6bd9ab |
usage
|
|
Packit |
6bd9ab |
exit 1
|
|
Packit |
6bd9ab |
;;
|
|
Packit |
6bd9ab |
esac
|