#
# Copyright (C) 2003 VA Linux Systems Japan, K.K.
#
# LICENSE NOTICE
#
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#

# $Id: 00server,v 1.26 2004/04/20 09:05:06 taru Exp $

case "x$MODULECATEGORY" in

  xserver|x)

if test "x$cache" = "x"; then

ULTRAPOSSUMRUN=`ultrapossum_getconf ULTRAPOSSUMRUN $localstatedir/run/ultrapossum`

# OpenLDAP configuration

SLAPD=${SLAPD:-$ldaplibexecdir/slapd}
SLURPD=${SLURPD:-$ldaplibexecdir/slurpd}
SLAPADD=`ultrapossum_getconf SLAPADD "slapadd"`
SLAPADD_EXTRA_ARGS=`ultrapossum_getconf SLAPADD_EXTRA_ARGS ""`

SLAPD_RPM_PACKAGE=`ultrapossum_getconf SLAPD_RPM_PACKAG openldap-servers`
SLAPD_EXTRA_ARGS=`ultrapossum_getconf SLAPD_EXTRA_ARGS `
SLURPD_EXTRA_ARGS=`ultrapossum_getconf SLURPD_EXTRA_ARGS `
ULTRAPOSSUM_MASTER_SLAPD_CONF=`ultrapossum_getconf ULTRAPOSSUM_MASTER_SLAPD_CONF $CONFDIR/ultrapossum.master.conf`
ULTRAPOSSUM_SLAPD_CONF=`ultrapossum_getconf ULTRAPOSSUM_SLAPD_CONF $CONFDIR/ultrapossum.conf`
ULTRAPOSSUMLDIF=`ultrapossum_getconf ULTRAPOSSUMLDIF $CONFDIR/ultrapossum.ldif`
APPSLDIF=`ultrapossum_getconf APPSLDIF $CONFDIR/applications.ldif`
LDAPSYSCONFDIR=`ultrapossum_getconf LDAPSYSCONFDIR $ldapsysconfdir`
SLAPDCONF=`ultrapossum_getconf SLAPDCONF $LDAPSYSCONFDIR/slapd.conf`
SLAPDMASTERCONF=`ultrapossum_getconf SLAPDMASTERCONF $CONFDIR/slapd.master.conf`
SLAPD_PIDFILE=`ultrapossum_getconf SLAPD_PIDFILE $localstatedir/run/slapd.ultrapossum.pid`
SLURPD_PIDFILE=`ultrapossum_getconf SLURPD_PIDFILE $localstatedir/run/slurpd.ultrapossum$ULTRAPOSSUM_PROJECT.pid`
SLURPD_DEBUGLEVEL=`ultrapossum_getconf SLURPD_DEBUGLEVEL 512`
RPLDIR=`ultrapossum_getconf RPLDIR $localstatedir/spool/slurpd`

if grep "^pidfile" $SLAPDCONF > /dev/null 2> /dev/null; then
  SLAPDCONF_PIDFILE=`grep "^pidfile" $SLAPDCONF | awk -F' ' '{print $2;}'`
fi

SLAPD_SLAVE_PIDFILE=`ultrapossum_getconf SLAPDCONF_PIDFILE /var/run/slapd.pid`

ULTRAPOSSUM_INIT_LDIF_IN=`ultrapossum_getconf ULTRAPOSSUM_INIT_LDIF_IN $TEMPLATEDIR/init.ldif.in`
INITLDIF=`ultrapossum_getconf INITLDIF $CONFDIR/init.ldif`

INITLDIFDIR=`ultrapossum_getconf INITLDIFDIR $SYSCONFDIR/init.ldif.d`

# Default Configuration

ROOTRDN=`ultrapossum_getconf ROOTRDN cn=admin`
ROOTPW=`ultrapossum_getconf ROOTPW $DBNAME`
DBCACHESIZE=`ultrapossum_getconf DBCACHESIZE 1000000`
CACHESIZE=`ultrapossum_getconf CACHESIZE 1000`
CREDENTIALS=`ultrapossum_getconf CREDENTIALS ultrapossum-replica`
DBDIRECTORY=`ultrapossum_getconf DBDIRECTORY $localstatedir/lib/$PACKAGE/$ULTRAPOSSUM_PROJECT/db`
LOGDIR=`ultrapossum_getconf LOGDIR $localstatedir/log/$PACKAGE`
UPDATERDN=`ultrapossum_getconf UPDATERDN cn=replica,ou=application`

LDAPLISTENPORT=`ultrapossum_getconf LDAPLISTENPORT ldap`
LDAPURILIST=`ultrapossum_getconf LDAPURILIST ldap://:$LDAPLISTENPORT/`

MASTER=`ultrapossum_getconf MASTER $LDAPMASTER`

if test "x$SLAPD_VERSION" = "x" && test -x $ldaplibexecdir/slapd; then
  slapd_version=`strings $ldaplibexecdir/slapd | grep OpenLDAP: | sed -e 's/.*slapd \([^ ]*\).*$/\1/'`
  case "$slapd_version" in
    2.0.*)
      SLAPD_VERSION=2.0
      ;;
    2.1.*|2.2.*)
      SLAPD_VERSION=2.1
      ;;
  esac
fi

if test "x$SLAPD_VERSION" = "x" && test -x /usr/bin/dpkg; then
  if test "x$SLAPD_DEB_VERSION" = "x"; then
    if test -x "/usr/bin/dlocate"; then
      if test "/var/lib/dpkg/status" -nt "/var/lib/dlocate/dlocatedb"; then
        if /usr/sbin/update-dlocatedb 2> /dev/null; then
          SLAPD_DEB_VERSION=`dlocate -s slapd | grep Version: | cut -d' ' -f2`
        else
          SLAPD_DEB_VERSION=`dpkg -s slapd | grep Version: | cut -d' ' -f2`
        fi
      else
        SLAPD_DEB_VERSION=`dlocate -s slapd | grep Version: | cut -d' ' -f2`
      fi
    else
      SLAPD_DEB_VERSION=`dpkg -s slapd | grep Version: | cut -d' ' -f2`
    fi
  fi
  export SLAPD_DEB_VERSION

  case "$SLAPD_DEB_VERSION" in
    2.0.*)
      SLAPD_VERSION=2.0
    ;;
    2.1.*)
      SLAPD_VERSION=2.1
      ;;
    *sb*)
      SLAPD_VERSION=2.1
      SLAPD_PROVIDES_SYNCBACKUP=YES
      ;;
    2.2.*)
      SLAPD_VERSION=2.1
      ;;
    *)
      echo "Warning: Unknown debian package version $SLAPD_DEB_VERSION" 1>&2
    ;;
  esac


fi

if test "x$SLAPD_VERSION" = "x" && test -x "/bin/rpm"; then
  SLAPD_RPM_VERSION=`rpm -q --queryformat='%{Version}' $SLAPD_RPM_PACKAGE`
  case "$SLAPD_RPM_VERSION" in
    2.0.*)
      SLAPD_VERSION=2.0
    ;;
  esac 
fi

SLAPD_VERSION=`ultrapossum_getconf SLAPD_VERSION 2.0`
SLAPD_BERKLEYDB_SONAME=$(ultrapossum_getconf SLAPD_BERKLEYDB_SONAME `ldd $SLAPD | grep libdb | awk -F' ' '{print $1;}'`)

SLURPDSLAVES=`ultrapossum_getconf SLURPDSLAVES ""`
REPLICALISTENPORT=`ultrapossum_getconf REPLICALISTENPORT ldap`

# syncbackup variables
SYNCBACKUPS=`ultrapossum_getconf SYNCBACKUPS ""`
WEAKSYNC=`ultrapossum_getconf WEAKSYNC ""`

fi ## cache

eval "`ultrapossum_parse_config server`"

case "$SLAPD_VERSION" in
  2.0)
    SLAPD_DEFAULT_BACKEND_DB_TYPE=ldbm
  ;;
  2.1)
    SLAPD_DEFAULT_BACKEND_DB_TYPE=bdb
  ;;
esac

DIRECTORY=$DBDIRECTORY/$SUFFIX

if test "x$cache" = "x"; then

REPLOGFILE=`ultrapossum_getconf REPLOGFILE $DIRECTORY/replog`

if test "x$SLAPD_BACKEND_DB_TYPE" = "x"; then
  SLAPD_BACKEND_DB_TYPE=$SLAPD_DEFAULT_BACKEND_DB_TYPE
fi

ULTRAPOSSUM_APPS=`find /usr/share/ultrapossum/apps.d/ -type f | grep -v tmp | xargs -n1 basename`
ULTRAPOSSUM_INDEX=`grep index $ULTRAPOSSUM_MASTER_SLAPD_CONF 2> /dev/null || true`

ULTRAPOSSUM_SLAPD_CONFIN=`ultrapossum_getconf ULTRAPOSSUM_SLAPD_CONFIN $TEMPLATEDIR/slapd-$SLAPD_BACKEND_DB_TYPE.conf.in`

APPLICATION="ou=application,$SUFFIX"

UPDATEDN=`ultrapossum_getconf UPDATEDN $UPDATERDN,$SUFFIX`
if test "x$UPDATEREF" = "x"; then
  UPDATEREF="ldap://$LDAPMASTER:$LDAPLISTENPORT/"
fi

if test "x$SLURPDSLAVES" != "x"; then
  SLAVES="$SLURPDSLAVES $SLAVES"
fi
if test "x$SYNCBACKUPS" != "x"; then
  SLAVES="$SYNCBACKUPS $SLAVES"
fi

if test "x$SECRETCF" = "x"; then
  ROOTPW="XXXXXXXX"
  CREDENTIALS="XXXXXXXX"
fi
ROOTDN=`ultrapossum_getconf ROOTDN $ROOTRDN,$SUFFIX`
SYNCDN=`ultrapossum_getconf SYNCDN $ROOTDN`
if test "x$SYNCDN" = "x$ROOTDN"; then
  SYNCPW=`ultrapossum_getconf SYNCPW $ROOTPW`
fi

if test "x$SECRETCF" != "x"; then
  if slappasswd -s $ROOTPW > /dev/null 2> /dev/null; then
    SLAPROOTPW=$(ultrapossum_getconf SLAPROOTPW `slappasswd -s $ROOTPW`)
  else
    SLAPROOTPW=$(ultrapossum_getconf SLAPROOTPW $ROOTPW)
  fi
else
  SLAPROOTPW="XXXXXXXX"
fi

SLAPDURILIST="$LDAPURILIST"
fi

  ;;
esac
