File cyr_systemd_helper of Package cyrus-imapd

#!/bin/sh
# get_config [config default]
# extracts config option from config file

if [ ! -c /dev/null ]; then
    exit 1
fi

if [ ! -r /dev/null -o ! -w /dev/null ]; then
    exit 1
fi

if [ "$(stat -c %a /dev/null)" != "666" ]; then
    chmod 666 /dev/null
fi

if [ -f /etc/sysconfig/cyrus-imapd ]; then
    . /etc/sysconfig/cyrus-imapd
elif [ -f /etc/default/cyrus-imapd ]; then
    . /etc/default/cyrus-imapd
fi

if [ ! -z "${QUICK}" ]; then
    if [ ${QUICK} -ne 0 ]; then
        exit 0
    fi
fi

get_config() {
    if conf=$(grep "^$1" /etc/imapd.conf); then
        echo $conf | cut -d: -f2
    else
        echo $2
    fi
}

CONFIGDIRECTORY=$(get_config configdirectory /var/lib/imap)
if [ ! -d ${CONFIGDIRECTORY} ]; then
    mkdir -p ${CONFIGDIRECTORY}
    chmod 700 ${CONFIGDIRECTORY}
    chown cyrus:mail ${CONFIGDIRECTORY}
fi

RETVAL=0

# Sometimes, there is no path
runuser=$(which runuser 2>/dev/null)

if [ -z "${runuser}" ]; then
    runuser=/usr/sbin/runuser
fi

reload() {
    if [ ! -f /var/run/cyrus-master.pid ]; then
        exit 255
    fi

    if [ -z "$(pidof cyrus-master)" ]; then
        exit 1
    fi

    if [ "$(cat /var/run/cyrus-master.pid)" != "$(pidof cyrus-master)" ]; then
        exit 1
    fi

    kill -HUP $(cat /var/run/cyrus-master.pid)
}

start() {
    cd $CONFIGDIRECTORY
    $runuser - cyrus -s /bin/bash -c '/usr/lib/cyrus-imapd/mkimap' >/dev/null 2>&1 < /dev/null

    mkdir -p ${CONFIGDIRECTORY}/rpm
    chown cyrus:mail ${CONFIGDIRECTORY}/rpm

    $runuser - cyrus -s /bin/sh -c "umask 166 ; /usr/lib/cyrus-imapd/cvt_cyrusdb_all import > ${CONFIGDIRECTORY}/rpm/db_import.log 2>&1" < /dev/null
    RETVAL=$?
}

stop() {
    cd $CONFIGDIRECTORY
    mkdir -p ${CONFIGDIRECTORY}/rpm
    chown cyrus:mail ${CONFIGDIRECTORY}/rpm

    $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
    RETVAL=$?
}

case "$1" in
    reload)
            reload
        ;;

    start)
            start
        ;;

    stop)
            stop
        ;;

    *)
        ;;
esac

exit $RETVAL