38f2261
#!/bin/sh
38f2261
#
38f2261
# chkconfig: - 65 35
38f2261
# description: The Cyrus IMAPD master serves as a master process for the Cyrus \
38f2261
#              IMAP and POP servers.
38f2261
# config: /etc/cyrus.conf
38f2261
# config: /etc/imapd.conf
38f2261
# pidfile: /var/run/cyrus-master.pid
38f2261
9e566a4
# author:	Simon Matter, Invoca Systems <simon.matter@invoca.ch>
9e566a4
# version:	2005111100
9e566a4
# changed:	add quickstart/stop option to init script to bypass db import/export
38f2261
38f2261
# Source function library
38f2261
if [ -f /etc/init.d/functions ]; then
38f2261
  . /etc/init.d/functions
38f2261
elif [ -f /etc/rc.d/init.d/functions ]; then
38f2261
  . /etc/rc.d/init.d/functions
38f2261
else
38f2261
  exit 0
38f2261
fi
38f2261
38f2261
# Source networking configuration.
38f2261
. /etc/sysconfig/network
38f2261
38f2261
# Check that networking is up.
38f2261
[ ${NETWORKING} = "no" ] && exit 0
38f2261
38f2261
# check if the config files are present
38f2261
[ -f /etc/cyrus.conf ] || exit 0
38f2261
[ -f /etc/imapd.conf ] || exit 0
38f2261
 
38f2261
# This is our service name
38f2261
BASENAME=$(basename $0)
38f2261
if [ -L $0 ]; then
38f2261
  BASENAME=$(find $0 -name $BASENAME -printf %l)
38f2261
  BASENAME=$(basename $BASENAME)
38f2261
fi
38f2261
9e566a4
# Source service configuration.
9e566a4
if [ -f /etc/sysconfig/$BASENAME ]; then
9e566a4
  . /etc/sysconfig/$BASENAME
38f2261
else
9e566a4
  echo "$BASENAME: configfile /etc/sysconfig/$BASENAME does NOT exist !"
9e566a4
  exit 1
38f2261
fi
38f2261
9e566a4
# get_config [config default]
9e566a4
# extracts config option from config file
9e566a4
get_config() {
9e566a4
  if config=$(grep "^$1" /etc/imapd.conf); then
9e566a4
    echo $config | cut -d: -f2
9e566a4
  else
9e566a4
    echo $2
9e566a4
  fi
9e566a4
}
9e566a4
9e566a4
# where to find files and directories
9e566a4
CONFIGDIRECTORY=$(get_config configdirectory /var/lib/imap)
38f2261
CYRUSMASTER=/usr/lib/cyrus-imapd/cyrus-master
38f2261
CYRUS_PROC_NAME=$(basename $CYRUSMASTER)
38f2261
ALWAYS_CONVERT=1
38f2261
9e566a4
# fallback to su if runuser not available
9e566a4
if [ -x /sbin/runuser ]; then
9e566a4
  RUNUSER=runuser
38f2261
else
9e566a4
  RUNUSER=su
38f2261
fi
38f2261
38f2261
RETVAL=0
9e566a4
RETVAL2=1
9e566a4
QUICK=0
38f2261
38f2261
start() {
38f2261
  if [ $(/sbin/pidof -s $CYRUSMASTER) ]; then
38f2261
    echo -n $"$BASENAME already running."
38f2261
    false
9e566a4
    echo
38f2261
  else
9e566a4
    if [ $QUICK -eq 0 ]; then
9e566a4
      echo -n $"Importing $BASENAME databases: "
9e566a4
      cd $CONFIGDIRECTORY
9e566a4
      $RUNUSER - cyrus -c "umask 166 ; /usr/lib/cyrus-imapd/cvt_cyrusdb_all > ${CONFIGDIRECTORY}/rpm/db_import.log 2>&1" < /dev/null
9e566a4
      RETVAL=$?
9e566a4
      if [ $RETVAL -eq 0 ]; then
9e566a4
        success $"$BASENAME importing databases"
9e566a4
      else
9e566a4
        failure $"$BASENAME error importing databases, check ${CONFIGDIRECTORY}/rpm/db_import.log"
9e566a4
      fi
9e566a4
      echo
9e566a4
    fi
38f2261
    if [ $RETVAL -eq 0 ]; then
9e566a4
      echo -n $"Starting $BASENAME: "
38f2261
      daemon $CYRUSMASTER -d $CYRUSOPTIONS
9e566a4
      RETVAL2=$?
9e566a4
      echo
38f2261
    fi
38f2261
  fi
9e566a4
  [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && touch /var/lock/subsys/$BASENAME
38f2261
  return $RETVAL
38f2261
}
38f2261
38f2261
stop() {
38f2261
  echo -n $"Shutting down $BASENAME: "
38f2261
  killproc $CYRUSMASTER
38f2261
  RETVAL=$?
9e566a4
  if [ $QUICK -eq 0 ]; then
9e566a4
    if [ ! $(/sbin/pidof -s $CYRUSMASTER) ]; then
9e566a4
      echo
9e566a4
      echo -n $"Exporting $BASENAME databases: "
9e566a4
      cd $CONFIGDIRECTORY
9e566a4
      $RUNUSER - cyrus -c "umask 166 ; /usr/lib/cyrus-imapd/cvt_cyrusdb_all export > ${CONFIGDIRECTORY}/rpm/db_export.log 2>&1" < /dev/null
9e566a4
      RETVAL2=$?
9e566a4
      if [ $RETVAL2 -eq 0 ]; then
9e566a4
        success $"$BASENAME exporting databases"
9e566a4
      else
9e566a4
        failure $"$BASENAME error exporting databases, check ${CONFIGDIRECTORY}/rpm/db_export.log"
9e566a4
      fi
9e566a4
    fi
9e566a4
  fi
38f2261
  echo
9e566a4
  [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && rm -f /var/lock/subsys/$BASENAME
38f2261
  return $RETVAL
38f2261
}
38f2261
38f2261
restart() {
38f2261
  stop
38f2261
  start
38f2261
}
38f2261
38f2261
reload() {
38f2261
  echo -n $"Reloading cyrus.conf file: "
38f2261
  killproc $CYRUSMASTER -HUP
38f2261
  RETVAL=$?
38f2261
  echo
38f2261
  return $RETVAL
38f2261
}
38f2261
 
38f2261
condrestart() {
38f2261
  [ -e /var/lock/subsys/$BASENAME ] && restart || :
38f2261
}
38f2261
38f2261
rhstatus() {
38f2261
  status $CYRUSMASTER
38f2261
  RETVAL=$?
38f2261
  return $RETVAL
38f2261
}
38f2261
38f2261
case "$1" in
38f2261
  start)
38f2261
    start
38f2261
    ;;
38f2261
  stop)
38f2261
    stop
38f2261
    ;;
38f2261
  restart)
38f2261
    restart
38f2261
    ;;
38f2261
  reload)
38f2261
    reload
38f2261
    ;;
38f2261
  condrestart)
38f2261
    condrestart
38f2261
    ;;
38f2261
  status)
38f2261
    rhstatus
38f2261
    ;;
9e566a4
  quickstart)
9e566a4
    QUICK=1
9e566a4
    start
9e566a4
    ;;
9e566a4
  quickstop)
9e566a4
    QUICK=1
9e566a4
    stop
9e566a4
    ;;
38f2261
  *)
9e566a4
    echo $"Usage: $BASENAME {start|stop|restart|reload|condrestart|status|quickstart|quickstop}"
38f2261
    RETVAL=1
38f2261
esac
38f2261
38f2261
exit $RETVAL