diff --git a/cyrus-imapd.init b/cyrus-imapd.init index dc0e545..3ea6127 100644 --- a/cyrus-imapd.init +++ b/cyrus-imapd.init @@ -11,45 +11,28 @@ # version: 2005111100 # changed: add quickstart/stop option to init script to bypass db import/export -# Source function library -if [ -f /etc/init.d/functions ]; then - . /etc/init.d/functions -elif [ -f /etc/rc.d/init.d/functions ]; then - . /etc/rc.d/init.d/functions -else - exit 0 +. /etc/init.d/functions + +config=/etc/imapd.conf +config2=/etc/cyrus.conf +exec=/usr/lib/cyrus-imapd/cyrus-master +lockfile=/var/lock/subsys/cyrus-imapd +pidfile=/var/run/cyrus-master.pid +prog="cyrus-imapd" + +if [ -f /etc/sysconfig/dovecot ]; then + . /etc/sysconfig/dovecot fi -# Source networking configuration. -. /etc/sysconfig/network - -# Check that networking is up. -[ ${NETWORKING} = "no" ] && exit 0 - # check if the config files are present -[ -f /etc/cyrus.conf ] || exit 0 -[ -f /etc/imapd.conf ] || exit 0 +configok=true +[ -f $config -a $config2 ] || configok=false -# This is our service name -BASENAME=$(basename $0) -if [ -L $0 ]; then - BASENAME=$(find $0 -name $BASENAME -printf %l) - BASENAME=$(basename $BASENAME) -fi - -# Source service configuration. -if [ -f /etc/sysconfig/$BASENAME ]; then - . /etc/sysconfig/$BASENAME -else - echo "$BASENAME: configfile /etc/sysconfig/$BASENAME does NOT exist !" - exit 1 -fi - # get_config [config default] # extracts config option from config file get_config() { - if config=$(grep "^$1" /etc/imapd.conf); then - echo $config | cut -d: -f2 + if conf=$(grep "^$1" /etc/imapd.conf); then + echo $conf | cut -d: -f2 else echo $2 fi @@ -61,66 +44,65 @@ CYRUSMASTER=/usr/lib/cyrus-imapd/cyrus-master CYRUS_PROC_NAME=$(basename $CYRUSMASTER) ALWAYS_CONVERT=1 -# fallback to su if runuser not available -if [ -x /sbin/runuser ]; then - RUNUSER=runuser -else - RUNUSER=su -fi - RETVAL=0 RETVAL2=1 QUICK=0 start() { + [ $UID -eq 0 ] || exit 4 + [ -x $exec ] || exit 5 + $configok || exit 6 if [ $(/sbin/pidof -s $CYRUSMASTER) ]; then - echo -n $"$BASENAME already running." - false + echo -n $"$prog already running." + true echo else if [ $QUICK -eq 0 ]; then - echo -n $"Importing $BASENAME databases: " + echo -n $"Importing $prog databases: " cd $CONFIGDIRECTORY - $RUNUSER - cyrus -c "umask 166 ; /usr/lib/cyrus-imapd/cvt_cyrusdb_all > ${CONFIGDIRECTORY}/rpm/db_import.log 2>&1" < /dev/null + runuser - cyrus -c "umask 166 ; /usr/lib/cyrus-imapd/cvt_cyrusdb_all > ${CONFIGDIRECTORY}/rpm/db_import.log 2>&1" < /dev/null RETVAL=$? if [ $RETVAL -eq 0 ]; then - success $"$BASENAME importing databases" + success $"$prog importing databases" else - failure $"$BASENAME error importing databases, check ${CONFIGDIRECTORY}/rpm/db_import.log" + failure $"$prog error importing databases, check ${CONFIGDIRECTORY}/rpm/db_import.log" fi echo fi if [ $RETVAL -eq 0 ]; then - echo -n $"Starting $BASENAME: " + echo -n $"Starting $prog: " daemon $CYRUSMASTER -d $CYRUSOPTIONS RETVAL2=$? echo fi fi - [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && touch /var/lock/subsys/$BASENAME + [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && touch $lockfile return $RETVAL } stop() { - echo -n $"Shutting down $BASENAME: " + [ $UID -eq 0 ] || exit 4 + [ -x $exec ] || exit 5 + + echo -n $"Shutting down $prog: " killproc $CYRUSMASTER RETVAL=$? if [ $QUICK -eq 0 ]; then if [ ! $(/sbin/pidof -s $CYRUSMASTER) ]; then echo - echo -n $"Exporting $BASENAME databases: " + echo -n $"Exporting $prog databases: " cd $CONFIGDIRECTORY - $RUNUSER - cyrus -c "umask 166 ; /usr/lib/cyrus-imapd/cvt_cyrusdb_all export > ${CONFIGDIRECTORY}/rpm/db_export.log 2>&1" < /dev/null + runuser - cyrus -c "umask 166 ; /usr/lib/cyrus-imapd/cvt_cyrusdb_all export > ${CONFIGDIRECTORY}/rpm/db_export.log 2>&1" < /dev/null RETVAL2=$? if [ $RETVAL2 -eq 0 ]; then - success $"$BASENAME exporting databases" + success $"$prog exporting databases" else - failure $"$BASENAME error exporting databases, check ${CONFIGDIRECTORY}/rpm/db_export.log" + failure $"$prog error exporting databases, check ${CONFIGDIRECTORY}/rpm/db_export.log" fi fi fi echo - [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && rm -f /var/lock/subsys/$BASENAME + [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && rm -f $lockfile return $RETVAL } @@ -137,16 +119,6 @@ reload() { return $RETVAL } -condrestart() { - [ -e /var/lock/subsys/$BASENAME ] && restart || : -} - -rhstatus() { - status $CYRUSMASTER - RETVAL=$? - return $RETVAL -} - case "$1" in start) start @@ -154,17 +126,21 @@ case "$1" in stop) stop ;; - restart) + force-reload|restart) restart ;; reload) reload ;; - condrestart) - condrestart + condrestart|try-restart) + if [ -f $lockfile ]; then + stop + start + fi ;; status) - rhstatus + status -p $pidfile $prog + RETVAL=$? ;; quickstart) QUICK=1 @@ -175,8 +151,9 @@ case "$1" in stop ;; *) - echo $"Usage: $BASENAME {start|stop|restart|reload|condrestart|status|quickstart|quickstop}" - RETVAL=1 + echo $"Usage: $0 {start|stop|restart|reload|force-reload|condrestart|try-restart|status|quickstart|quickstop}" + RETVAL=2 + [ "$1" = "usage" ] && RETVAL=0 esac exit $RETVAL diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec index a5bce60..b7a7222 100644 --- a/cyrus-imapd.spec +++ b/cyrus-imapd.spec @@ -1,6 +1,6 @@ Name: cyrus-imapd Version: 2.3.15 -Release: 1%{?dist} +Release: 2%{?dist} # ********************** BUILD TIME OPTIONS START ********************** @@ -731,6 +731,9 @@ fi %{_mandir}/man1/* %changelog +* Fri Sep 18 2009 Michal Hlavinka - 2.3.15-2 +- make init script LSB-compliant (#523227) + * Fri Sep 18 2009 Michal Hlavinka - 2.3.15-1 - fix buffer overflow in cyrus sieve (CVE-2009-3235)