#!/bin/sh
#
# imapd
#
# chkconfig: 2345 48 30
# description: imapd - Internet Message Access Protocol
# processname: imapd
# config: /opt/nec/mail/mail.conf

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
if [ ! -f /etc/sysconfig/network ]; then
    exit 0
fi

. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0


myname=`/usr/bin/whoami`
if [ $myname != "root" ]; then
	exit -1
fi

mails_status() {
    poppid=""
    cd /var/run/imapd
    if [ $? != "0" ]; then
      return 0
    fi
    for pid in * ; do
      if [ $pid == "*" ]; then
        return 0
      fi
      if [ -f /proc/$pid/cmdline ]; then
        cmd=`cat /proc/$pid/status | head -1 | awk '{ print $2 }'`
        if [ $cmd != "imapd" ]; then
           if [ "$cmd" != "" ]; then
             rm -f /var/run/imapd/$pid
	   fi
        fi
      else
        rm -f /var/run/imapd/$pid
      fi
    done
    for pid in * ; do
      if [ $pid == "*" ]; then
	return 0
      fi
      if [ "$poppid" == "" ]; then
        poppid=$pid
      else
        poppid=`echo -n "$poppid $pid"`
      fi
    done
    return -1
}


mails_stop() {
  mails_status
  if [ "$poppid" == "" ]; then
    echo_failure
    return 0
  fi
  mkdir -p /var/tmp/minetd
  echo imapd stop> /var/tmp/minetd/#imapd.$$
  mv /var/tmp/minetd/#imapd.$$ /var/tmp/minetd/imapd.$$
  kill -USR1 `pidof minetd`
  loop=1
  while [ $loop -le 50 ]; do
    mails_status
    if [ "$poppid" == "" ]; then
      echo_success
      return 0
    fi
    usleep 300000
    let loop++
  done
  echo_failure
  return 0
}


mails_start() {
  mails_status
  if [ "$poppid" != "" ]; then
    echo_failure
    return 0
  fi
  mkdir -p /var/tmp/minetd
  echo imapd start> /var/tmp/minetd/#imapd.$$
  mv /var/tmp/minetd/#imapd.$$ /var/tmp/minetd/imapd.$$
  kill -USR1 `pidof minetd`
  loop=1
  while [ $loop -le 50 ]; do
    mails_status
    if [ "$poppid" != "" ]; then
      echo_success
      return 0
    fi
    usleep 300000
    let loop++
  done
  echo_failure
  return 0
}

mails_reload() {
  mails_status
  if [ "$poppid" = "" ]; then
    echo_failure
    return 0
  fi
  mkdir -p /var/tmp/minetd
  echo imapd reload> /var/tmp/minetd/#imapd.$$
  mv /var/tmp/minetd/#imapd.$$ /var/tmp/minetd/imapd.$$
  kill -USR1 `pidof minetd`
  usleep 500000
  loop=1
  while [ $loop -le 50 ]; do
    mails_status
    if [ "$poppid" != "" ]; then
      echo_success
      return 0
    fi
    usleep 300000
    let loop++
  done
  echo_failure
  return 0
}


# See how we were called.
case "$1" in
  start)
    echo -n "Starting imapd:"
    mails_start
    echo
    touch /var/lock/subsys/imapd
    ;;
  stop)
    echo -n "Shutting down imapd:"
    mails_stop
    echo
    rm -f /var/lock/subsys/imapd
    ;;
  status)
    mails_status
    if [ "$poppid" == "" ]; then
      echo "imapd is stopped"
    else
      echo "imapd (pid $poppid) is running..."
    fi
    ;;
  restart)
    echo -n "Shutting down imapd:"
    mails_stop
    echo
    echo -n "Starting imapd:"
    mails_start
    echo
    ;;
  reload)
    echo -n "Reloading imapd:"
    mails_reload
    echo
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
esac

exit 0
