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