From cd682b8c5f1033a0fad71f480e9f156fd251ec74 Mon Sep 17 00:00:00 2001 From: Michal Hlavinka Date: Oct 09 2009 12:20:16 +0000 Subject: - fix cyrus user shell for db import (#528126) - make init script lsb compliant --- diff --git a/cyrus-imapd.init b/cyrus-imapd.init index dc0e545..fcad53e 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 -fi +. /etc/init.d/functions -# Source networking configuration. -. /etc/sysconfig/network +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" -# Check that networking is up. -[ ${NETWORKING} = "no" ] && exit 0 +if [ -f /etc/sysconfig/dovecot ]; then + . /etc/sysconfig/dovecot +fi # 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 -s /bin/sh -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 -s /bin/sh -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 46be37c..66c57c0 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 ********************** @@ -529,10 +529,10 @@ fi %if %{SASLGROUP} /usr/sbin/groupadd -g %{gid} -r %{_saslgroup} 2> /dev/null || : /usr/sbin/useradd -c "Cyrus IMAP Server" -d %{_vardata} -g %{_cyrusgroup} \ - -G %{_saslgroup} -s /bin/nologin -u %{uid} -r %{_cyrususer} 2> /dev/null || : + -G %{_saslgroup} -s /sbin/nologin -u %{uid} -r %{_cyrususer} 2> /dev/null || : %else /usr/sbin/useradd -c "Cyrus IMAP Server" -d %{_vardata} -g %{_cyrusgroup} \ - -s /bin/nologin -u %{uid} -r %{_cyrususer} 2> /dev/null || : + -s /sbin/nologin -u %{uid} -r %{_cyrususer} 2> /dev/null || : %endif %post utils @@ -731,6 +731,10 @@ fi %{_mandir}/man1/* %changelog +* Fri Oct 09 2009 Michal Hlavinka - 2.3.15-2 +- fix cyrus user shell for db import (#528126) +- make init script lsb compliant + * Fri Sep 18 2009 Michal Hlavinka - 2.3.15-1 - fix another buffer overflow in cyrus sieve (CVE-2009-3235)