#
# 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: 10server,v 1.5 2004/07/01 19:16:58 taru Exp $

case "x$MODULECATEGORY" in

  xserver|x)

create_environ() {
  progress "Creating directory environment information... "
  touch $DIRECTORY/ultrapossum-environ
  chmod 640 $DIRECTORY/ultrapossum-environ
  getconfig | grep -v ROOTPW | grep -v CREDENTIALS > $DIRECTORY/ultrapossum-environ
  progress "Creating directory environment information... done"
}

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 ""`
SLAPCAT=`ultrapossum_getconf SLAPCAT "slapcat"`
SLAPINDEX=`ultrapossum_getconf SLAPINDEX "slapindex"`

UCDATA_PATH=`ultrapossum_getconf UCDATA_PATH $ldapdatadir/ucdata`

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`
SSHKEYDIR=`ultrapossum_getconf SSHKEYDIR $SYSCONFDIR/ssh`

# 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`
CHROOTDIRECTORY=`ultrapossum_getconf CHROOTDIRECTORY ""`
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`
CHROOTFILES=`ultrapossum_getconf CHROOTFILES "$SLAPDMASTERCONF $ULTRAPOSSUM_MASTER_SLAPD_CONF $ULTRAPOSSUM_SLAPD_CONF $(egrep '^include' $SLAPDMASTERCONF 2> /dev/null | awk -F' ' '{print $2;}') $UCDATA_PATH $ldaplibdir"`
CHROOTEXTRAFILES=`ultrapossum_getconf CHROOTEXTRAFILES ""`

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

MASTER=`ultrapossum_getconf MASTER $LDAPMASTER`
SLAPD_VERSION=`strings $SLAPD | grep OpenLDAP: | sed -e 's/.*slapd \([^ ]*\).*$/\1/'`

if test "x$SLAPD_MAJOR_VERSION" = "x" && test -x $SLAPD; then
  case "$SLAPD_VERSION" in
    2.0.*)
      SLAPD_MAJOR_VERSION=2.0
      ;;
    2.1.*|2.2.*)
      SLAPD_MAJOR_VERSION=2.1
      ;;
    2.X) # CVS
      SLAPD_MAJOR_VERSION=2.1
      ;;
  esac
fi

if test "x$SLAPD_MAJOR_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_MAJOR_VERSION=2.0
    ;;
    2.1.*)
      SLAPD_MAJOR_VERSION=2.1
      ;;
    *sb*)
      SLAPD_MAJOR_VERSION=2.1
      SLAPD_PROVIDES_SYNCBACKUP=YES
      ;;
    2.2.*)
      SLAPD_MAJOR_VERSION=2.1
      ;;
    *)
      echo "Warning: Unknown debian package version $SLAPD_DEB_VERSION" 1>&2
    ;;
  esac


fi

if test "x$SLAPD_MAJOR_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_MAJOR_VERSION=2.0
    ;;
  esac 
fi

SLAPD_MAJOR_VERSION=`ultrapossum_getconf SLAPD_MAJOR_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_MAJOR_VERSION" in
  2.0)
    SLAPD_DEFAULT_BACKEND_DB_TYPE=ldbm
  ;;
  2.1)
    SLAPD_DEFAULT_BACKEND_DB_TYPE=bdb
  ;;
esac

case "$SLAPD_MAJOR_VERSION" in
        2.0)
                . $MODULEDIR/server/2.0
        ;;
        2.1)
                . $MODULEDIR/server/2.1
        ;;
        *)
                echo "Unknown slapd version type $SLAPD_MAJOR_VERSION" 1>&2
        ;;
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
  val=`getvalue $DIRECTORY/ultrapossum-environ SLAPD_BACKEND_DB_TYPE 2> /dev/null`
  SLAPD_BACKEND_DB_TYPE=${val:-$SLAPD_DEFAULT_BACKEND_DB_TYPE}
fi

ULTRAPOSSUM_APPS=`find $APPSDIR -type f -maxdepth 1 | grep -v tmp | xargs -n1 basename 2> /dev/null || true`
ULTRAPOSSUM_INDEX=`egrep '^index' $ULTRAPOSSUM_MASTER_SLAPD_CONF 2> /dev/null | tr '\n' ' '`

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

fi

ACLAPPDNREGEX=".*,$APPLICATION"
SLAPDURILIST="$LDAPURILIST"

  ;;
esac
