#!/bin/bash
##
##  rc.kolab
##
##  Copyright (c) 2002 Martin Konold <martin.konold(at)erfrakon.de>
##  Copyright (c) 2002 Tassilo Erlewein <tassilo.erlewein(at)erfrakon.de>
##  Adapted for Mandrake by Jean-Michel Dault <jmdault@mandrakesoft.com>
# chkconfig: 345 95 05
# description:  This starts the Kolab groupware server

if [ ! -f /etc/kolab/key.pem ];then
    echo
    echo "Kolab has not been configured yet!"
    echo "Please run /usr/sbin/kolab_boostrap -b then"
    echo "type 'service kolab start' to start the service."
    echo
    exit
fi

start() {
    echo "starting openldap ..."
    if [ -f /var/run/ldap/slapd.pid ]; then
       PID=`cat /var/run/ldap/slapd.pid | awk '{print $1}'`
       SLAPDS=`ps -p $PID 2>/dev/null | grep -c slapd | awk '{print $1}'`
       if [ $SLAPDS -gt 0 ]; then
          echo "Warning: slapd is already running under pid $PID!"
       else
          /usr/sbin/slapd -f /etc/openldap/slapd.conf
          /usr/sbin/slurpd -f /etc/openldap/slapd.conf
       fi
    else
       /usr/sbin/slapd -f /etc/openldap/slapd.conf
       /usr/sbin/slurpd -f /etc/openldap/slapd.conf
    fi

    echo "starting sasl ..."
    if [ -f /var/run/saslauthd.pid ]; then
       PID=`cat /var/run/saslauthd.pid | awk '{print $1}'`
       SASLAUTHDS=`ps -p $PID 2>/dev/null | grep -c saslauthd | awk '{print $1}'`
       if [ $SASLAUTHDS -gt 0 ]; then
          echo "Warning: saslauthd is already running under pid $PID!"
       else
          rm -f /var/run/saslauthd.pid
          /usr/sbin/saslauthd -a ldap -n 5
       fi
    else
       /usr/sbin/saslauthd -a ldap -n 5
    fi

    echo "starting cyrus imapd ..."
    if [ -f /var/run/cyrus-master.pid ]; then
       PID=`cat /var/run/cyrus-master.pid | awk '{print $1}'`
       IMAPDS=`ps -p $PID 2>/dev/null | grep -c cyrmaster | awk '{print $1}'`
       if [ $IMAPDS -gt 0 ]; then
          echo "Warning: cyrus imapd is already running under pid $PID!"
       else
          /usr/lib/cyrus-imapd/cyrus-master -p /var/run/cyrus-master.pid -d
       fi
    else
       /usr/lib/cyrus-imapd/cyrus-master -p /var/run/cyrus-master.pid -d
    fi

    echo "starting apache ..."
    /usr/sbin/apachectl start

    echo "starting postfix ..."
    /usr/sbin/postfix start

    echo "starting kolab backend (please wait)"
    sleep 5
    if [ -f /var/run/kolab.pid ]; then
       touch /var/lock/subsys/kolab-server
       PID=`cat /var/run/kolab.pid | awk '{print $1}'`
       KOLABS=`ps -p $PID 2>/dev/null | grep -c kolab | awk '{print $1}'`
       if [ $KOLABS -gt 0 ]; then
          echo "Warning: kolab is already running under pid $PID!"
       else
          /usr/sbin/kolab &
       fi
    else 
       /usr/sbin/kolab &
    fi
}


stop() {

    echo "stopping kolab backend ..."
    if [ -f /var/run/kolab.pid ]; then
       kill `cat /var/run/kolab.pid` 2>/dev/null
    fi
    sleep 1
    killall -9 kolab 2>/dev/null
    rm -f /var/lock/subsys/kolab-server

    echo "stopping postfix ..."
    /usr/sbin/postfix stop

    echo "stopping apache ..."
    /usr/sbin/apachectl stop

    echo "stopping cyrus imapd ..."
    if [ -f /var/run/cyrus-master.pid ]; then
        kill -TERM `cat /var/run/cyrus-master.pid` 2>/dev/null
        rm /var/run/cyrus-master.pid
    fi
    killall cyrmaster imapd pop3d timsievd lmtpd 2>/dev/null
    sleep 2
    killall -9 cyrmaster imapd pop3d timsievd lmtpd 2>/dev/null

    echo "stopping saslauthd ..."
    if [ -f /var/run/saslauthd.pid ]; then
        kill -TERM `cat /var/run/saslauthd.pid` 2>/dev/null
    fi
    killall saslauthd 2>/dev/null
    sleep 2
    killall -9 saslauthd 2>/dev/null

    echo "stopping openldap ..."
    if [ -f /var/run/ldap/slapd.pid ]; then
      kill -INT `cat /var/run/ldap/slapd.pid` 2>/dev/null
    fi
    killall -INT slapd 2>/dev/null
    killall slurpd 2>/dev/null
    sleep 1
    killall -9 slurpd 2>/dev/null
    killall -9 slapd 2>/dev/null

    echo "stopping proftpd (if running) ..."
    if [ -f /var/run/proftpd.pid ]; then
        kill -TERM `cat /var/run/proftpd.pid` 2>/dev/null
    fi
    killall proftpd 2>/dev/null
    sleep 1
    killall -9 proftpd 2>/dev/null
}

reload() {
    echo "restart openldap (slapd cannot reload) ..."
    killall -TERM slurpd 2>/dev/null
    kill -INT `cat /var/run/ldap/slapd.pid` 2>/dev/null
    sleep 1
    killall -9 slurpd 2>/dev/null
    killall -9 slapd 2>/dev/null

    /usr/sbin/slapd -f /etc/openldap/slapd.conf
    /usr/sbin/slurpd -f /etc/openldap/slapd.conf

    echo "restart saslauthd (saslauth cannot reload) ..."
    if [ -f /var/run/saslauthd.pid ]; then
       kill -TERM `cat /var/run/saslauthd.pid` 2>/dev/null
    fi
    sleep 1
    killall -9 saslauthd 2>/dev/null
    /usr/sbin/saslauthd -a ldap -n 5    

    echo "reload cyrus imapd ..."
    if [ -f /var/run/cyrus-master.pid ]; then
      kill -HUP `cat /var/run/cyrus-master.pid` 2>/dev/null
    fi

    echo "reload postfix ..."
    /usr/sbin/postfix reload

    echo "reload apache ..."
    /usr/sbin/apachectl restart

    echo "reload proftpd (if running) ..."
    if [ -f /var/run/proftpd.pid ]; then
      kill -HUP `cat /var/run/proftpd.pid` 2>/dev/null
    fi 

    echo "reload kolab ..."
    if [ -f /var/run/kolab.pid ]; then
      kill -HUP `cat /var/run/kolab.pid` 2>/dev/null
    fi 
}

status() {
    if [ -f /var/run/kolab.pid ]; then
      echo "Kolab is running..."
    else
      echo "Kolab is *not *running..."
    fi
}

case $1 in
    start   ) start ;;
    stop    ) stop  ;;
    restart ) stop
              sleep 1
              start ;;
    reload )  reload ;;
    status )  status ;;
esac
