Blame tests/setup_slapd.sh

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