#! /bin/sh # postinst script for cyrus-common # Copyright (c) 2002 by Henrique de Moraes Holschuh # Distributed under the GNU General Public License version 2 # # see: dh_installdeb(1) set -e # summary of how this script can be called: # * `configure' # * `abort-upgrade' # * `abort-remove' `in-favour' # # * `abort-deconfigure' `in-favour' # `removing' # # for details, see /usr/doc/packaging-manual/ # # quoting from the policy: # Any necessary prompting should almost always be confined to the # post-installation script, and should be protected with a conditional # so that unnecessary prompting doesn't happen if a package's # installation fails and the `postinst' is called with `abort-upgrade', # `abort-remove' or `abort-deconfigure'. export PATH=/sbin:/usr/sbin:/bin:/usr/bin # Source debconf library. . /usr/share/debconf/confmodule CONF="/etc/imapd.conf" CYRUS_CONFIG_DIR="/var/lib/cyrus" [ -r /etc/default/cyrus-imapd ] && . /etc/default/cyrus-imapd getconf () { if [ -r "${CONF}" ]; then confvalue=$(sed --silent -e "/^[[:blank:]]*${1}:/ { \ s#^[[:blank:]]*${1}:[[:blank:]]*## \ p }" < "${CONF}" | head -1) result=${confvalue:-$2} else result=${2} fi } upgradesieve () { if [ -z "$1" ] || $(dpkg --compare-versions $1 gt 3~); then return fi CYRUS_SIEVE_DIR="/var/spool/sieve" getconf sievedir ${CYRUS_SIEVE_DIR} CYRUS_SIEVE_DIR=$result find ${CYRUS_SIEVE_DIR} -type d -regextype sed -regex '.*/[^/]\+^[^/]\+' -print | awk '{system("mv " $0 " " gensub("\\^", ".", "g", $1))}' su cyrus -c '/usr/lib/cyrus/upgrade/masssievec /usr/lib/cyrus/bin/sievec' } case "$1" in configure) # Refuse to update if previous version is lower than 3.2.6-2+deb11u2~ if [ ! -z "$2" ] && $(dpkg --compare-versions $2 lt '3.2.6-2+deb11u2~'); then echo "You must update cyrus-imapd to at least version 3.2.6-2+deb11u2~" >&2 echo "before updating it to version 3.6.x and run it, else your mailboxes" >&2 echo "may be corrupted" >&2 exit 1 fi # Add the cyrus user (requires adduser >= 3.34) echo "Creating/updating cyrus user account..." adduser --quiet --system --ingroup mail --home /var/spool/cyrus \ --shell /bin/sh --no-create-home --disabled-password --disabled-login \ --gecos "Cyrus Mailsystem User" cyrus >/dev/null || { if getent passwd | grep -s -q -E '^cyrus:'; then echo "Non-system user cyrus found. I will not overwrite a non-system" >&2 echo "user. Remove the user and reinstall cyrus-common." >&2 exit 1 fi # unknown adduser error, simply exit exit 1 } # Force correct owner and modes dpkg-statoverride --list /var/lib/cyrus >/dev/null 2>&1 || dpkg-statoverride --update --add cyrus mail 750 /var/lib/cyrus dpkg-statoverride --list /var/spool/cyrus >/dev/null 2>&1 || dpkg-statoverride --update --add cyrus mail 755 /var/spool/cyrus dpkg-statoverride --list /var/spool/sieve >/dev/null 2>&1 || dpkg-statoverride --update --add cyrus mail 755 /var/spool/sieve # Remove old statoverrides if dpkg-statoverride --list /var/run/cyrus >/dev/null 2>&1; then dpkg-statoverride --update --remove /var/run/cyrus; fi if dpkg-statoverride --list /var/run/cyrus/socket >/dev/null 2>&1; then dpkg-statoverride --remove /var/run/cyrus/socket; fi # Add user cyrus to group SASL, if such group exists adduser cyrus sasl || true if [ -z "$2" ]; then echo -n "cyrus-common: Creating cyrus-imapd directories..." cyrus makedirs --cleansquat echo "done." fi # Add USERDENY database if doesn't exist getconf configdirectory ${CYRUS_CONFIG_DIR} CYRUS_CONFIG_DIR=$result userdeny_database="${CYRUS_CONFIG_DIR}/user_deny.db" if [ ! -e ${userdeny_database} ]; then echo -n "cyrus-common: Creating empty user_deny database..." touch ${userdeny_database} chmod 600 ${userdeny_database} chown cyrus:mail ${userdeny_database} echo "done." fi if [ -f /usr/lib/cyrus/cyrus-db-types.active ]; then /usr/lib/cyrus/bin/upgrade-db RET="$?" case "$RET" in 0) ;; 2) echo "ERROR: Upgrading of database backends failed." 1>&2 echo "ERROR: Please check the output, fix errors and re-run /usr/lib/cyrus/bin/upgrade-db" 1>&2 echo "ERROR: script, before trying to start cyrus-imapd." 1>&2 ;; 1|*) echo "ERROR: Upgrading of database backends failed with a fatal error." 1>&2 echo "ERROR: Please check /usr/share/doc/cyrus-common/README.Debian*" 1>&2 echo "ERROR: for instructions how to upgrade cyrus databases manually." 1>&2 exit $RET; ;; esac fi # Legacy code / needed in case something will change in future # Hopefully this will be handled by upstream next time cp -p /usr/lib/cyrus/cyrus-hardwired-config.txt \ /usr/lib/cyrus/cyrus-hardwired-config.active upgradesieve $2 ;; abort-upgrade|abort-remove|abort-deconfigure) ;; *) echo "postinst called with unknown argument \`$1'" >&2 exit 0 ;; esac # dh_installdeb will replace this with shell code automatically # generated by other debhelper scripts. # Automatically added by dh_installinit/13.24.2 if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then if [ -z "$DPKG_ROOT" ] && [ -x "/etc/init.d/cyrus-imapd" ]; then update-rc.d cyrus-imapd defaults >/dev/null if [ -n "$2" ]; then _dh_action=restart else _dh_action=start fi invoke-rc.d --skip-systemd-native cyrus-imapd $_dh_action || exit 1 fi fi # End automatically added section # Automatically added by dh_installsystemd/13.24.2 if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then # The following line should be removed in trixie or trixie+1 deb-systemd-helper unmask 'cyrus-imapd.service' >/dev/null || true # was-enabled defaults to true, so new installations run enable. if deb-systemd-helper --quiet was-enabled 'cyrus-imapd.service'; then # Enables the unit on first installation, creates new # symlinks on upgrades if the unit file has changed. deb-systemd-helper enable 'cyrus-imapd.service' >/dev/null || true else # Update the statefile to add new symlinks (if any), which need to be # cleaned up on purge. Also remove old symlinks. deb-systemd-helper update-state 'cyrus-imapd.service' >/dev/null || true fi fi # End automatically added section # Automatically added by dh_installsystemd/13.24.2 if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then if [ -d /run/systemd/system ]; then systemctl --system daemon-reload >/dev/null || true if [ -n "$2" ]; then _dh_action=restart else _dh_action=start fi deb-systemd-invoke $_dh_action 'cyrus-imapd.service' >/dev/null || true fi fi # End automatically added section exit 0