summaryrefslogtreecommitdiffstats
path: root/debian/postfix.preinst
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--debian/postfix.preinst371
1 files changed, 371 insertions, 0 deletions
diff --git a/debian/postfix.preinst b/debian/postfix.preinst
new file mode 100644
index 0000000..c0edce2
--- /dev/null
+++ b/debian/postfix.preinst
@@ -0,0 +1,371 @@
+#!/bin/sh -e
+
+# Debian Postfix preinst
+# LaMont Jones <lamont@debian.org>
+# Modified to use debconf by Colin Walters <levanti@verbum.org>
+
+# do we have debconf?
+if [ -f /usr/share/debconf/confmodule ]; then
+ . /usr/share/debconf/confmodule
+ DEBCONF=true
+else
+ DEBCONF=
+fi
+
+dpkg_vers=$(dpkg --status dpkg | sed -n '/Version: /s/^Version: //p')
+CONFIG=/etc/postfix/main.cf
+MASTER=/etc/postfix/master.cf
+POSTDROP=/usr/sbin/postdrop
+
+compat_conversion_warning() {
+ if [ -n "$DEBCONF" ]; then
+ db_input medium postfix/compat_conversion_warning || true
+ db_go || true
+ db_get postfix/compat_conversion_warning
+ if [ "$RET" = "false" ]; then
+ echo "aborting postfix install"
+ exit 1
+ fi
+ else
+ cat << EOF
+This upgrade of postfix changes some default values in the configuration. As
+part of this upgrade, the following will be changed: (1) chrooted components
+will be changed from '-' to 'y' in master.cf, and (2) myhostname will be set
+to a fully-qualified domain name if it is not already such. The install will
+be aborted if you do not allow the change.
+EOF
+ echo -n "Shall I make the change? "
+ read line
+ case ${line} in
+ [nN]*) echo "aborting postfix install"
+ exit 1;;
+ *) ;;
+ esac
+ fi
+}
+
+lmtp_retired_warning() {
+ if [ -n "$DEBCONF" ]; then
+ db_input medium postfix/lmtp_retired_warning || true
+ db_go || true
+ db_get postfix/lmtp_retired_warning
+ if [ "$RET" = "false" ]; then
+ echo "aborting postfix install"
+ exit 1
+ fi
+ else
+ cat << EOF
+This upgrade of postfix drops the "lmtp" symlink, and your configuration
+(master.cf) refers to it: lmtp was merged into smtp long ago. The install
+will be aborted if you do not allow the change.
+EOF
+ echo -n "Shall I make the change? "
+ read line
+ case ${line} in
+ [nN]*) echo "aborting postfix install"
+ exit 1;;
+ *) ;;
+ esac
+ fi
+}
+
+main_cf_conversion_warning() {
+ if [ -n "$DEBCONF" ]; then
+ db_input medium postfix/main_cf_conversion_warning || true
+ db_go || true
+ db_get postfix/main_cf_conversion_warning
+ if [ "$RET" = "false" ]; then
+ echo "aborting postfix install"
+ exit 1
+ fi
+ else
+ cat << EOF
+This upgrade of postfix changes where daemons are located, and your postfix
+configuration explicitly specifies the old location. The install will be
+aborted if you do not allow the change.
+EOF
+ echo -n "Shall I make the change? "
+ read line
+ case ${line} in
+ [nN]*) echo "aborting postfix install"
+ exit 1;;
+ *) ;;
+ esac
+ fi
+}
+
+dynamicmaps_conversion_warning() {
+ if [ -n "$DEBCONF" ]; then
+ db_input medium postfix/dynamicmaps_conversion_warning || true
+ db_go || true
+ db_get postfix/dynamicmaps_conversion_warning
+ if [ "$RET" != "false" ]; then
+ touch /var/spool/postfix/dynamicmaps_3.0_transition
+ fi
+ else
+ cat << EOF
+Postfix version 3.0 changes how dynamic maps are delivered, and your
+dynamicmaps.cf does not reflect that. Accept this option to convert
+dynamicmaps.cf to the version required for 3.0.
+EOF
+ echo -n "Shall I make the change? "
+ read line
+ case ${line} in
+ [nN]*) ;;
+ *) touch /var/spool/postfix/dynamicmaps_3.0_transition;;
+ esac
+ fi
+}
+
+relay_restrictions_warning() {
+ if [ -n "$DEBCONF" ]; then
+ db_input medium postfix/relay_restrictions_warning || true
+ db_go || true
+ db_get postfix/relay_restrictions_warning
+ if [ "$RET" != "false" ]; then
+ touch /var/spool/postfix/set_relay_restrictions
+ fi
+ else
+ cat << EOF
+Postfix version 2.10 adds smtpd_relay_restrictions, to separate relaying
+restrictions from recipient restrictions, and you have a non-default value
+for smtpd_recipient_restrictions.
+
+Failure to do this may result in deferred or bounced mail after the
+upgrade. Accept this option to set smtpd_relay_restrictions to
+smtpd_recipient_restrictions.
+EOF
+ echo -n "Shall I make the change? "
+ read line
+ case ${line} in
+ [nN]*) ;;
+ *) touch /var/spool/postfix/set_relay_restrictions;;
+ esac
+ fi
+}
+
+mydomain_warning() {
+ if [ -n "$DEBCONF" ]; then
+ db_fset postfix/mydomain_warning seen false
+ db_input medium postfix/mydomain_warning || true
+ db_go || true
+ db_get postfix/mydomain_warning
+ if [ "$RET" = "false" ]; then
+ echo "aborting postfix install"
+ exit 1
+ fi
+ else
+ # no debconf, fall back
+ cat << EOF
+Postfix version 2.3.3-2 and later require changes in main.cf.
+Specifically, mydomain must be specified, since hostname(2) is not
+an FQDN.
+EOF
+ echo -n "Shall I make the change? "
+ read line
+ case ${line} in
+ [nN]*) echo "aborting postfix install"
+ exit 1
+ ;;
+ esac
+ fi
+}
+
+retry_warning() {
+ if [ -n "$DEBCONF" ]; then
+ db_fset postfix/retry_upgrade_warning seen false
+ db_input medium postfix/retry_upgrade_warning || true
+ db_go || true
+ db_get postfix/retry_upgrade_warning
+ if [ "$RET" = "false" ]; then
+ echo "aborting postfix install"
+ exit 1
+ fi
+ else
+ # no debconf, fall back
+ cat << EOF
+Postfix version 2.4 requires that the retry service be added to master.cf
+EOF
+ echo -n "Shall I make the change? "
+ read line
+ case ${line} in
+ [nN]*) echo "aborting postfix install"
+ exit 1
+ ;;
+ esac
+ fi
+}
+
+tlsmgr_warning() {
+ if [ -n "$DEBCONF" ]; then
+ db_fset postfix/tlsmgr_upgrade_warning seen false
+ db_input medium postfix/tlsmgr_upgrade_warning || true
+ db_go || true
+ db_get postfix/tlsmgr_upgrade_warning
+ if [ "$RET" = "false" ]; then
+ echo "aborting postfix install"
+ exit 1
+ fi
+ else
+ # no debconf, fall back
+ cat << EOF
+Postfix version 2.2 has changed the invocation of tlsmgr.
+EOF
+ echo -n "Shall I make the change? "
+ read line
+ case ${line} in
+ [nN]*) echo "aborting postfix install"
+ exit 1
+ ;;
+ esac
+ fi
+}
+
+kernel_version_warning() {
+ if [ -n "$DEBCONF" ]; then
+ db_fset postfix/kernel_version_warning seen false
+ db_input low postfix/kernel_version_warning || true
+ db_go || true
+ db_get postfix/kernel_version_warning
+ else
+ cat << EOF
+Postfix uses features that are not found in kernels prior to 2.6. If you
+proceeed with the installation, Postfix will not run.
+EOF
+ RET=false
+ fi
+ if [ "$RET" = "false" ]; then
+ echo "Aborting postfix install"
+ exit 1
+ fi
+}
+
+(umask 022; mkdir -p /var/spool/postfix)
+
+case "$1" in
+ install)
+ rm -f /var/spool/postfix/restart /var/spool/postfix/reload
+ # workaround sendmail not unregistering itself...
+ if [ -e /etc/suid.conf ] && [ -x /usr/sbin/suidunregister ]; then
+ if grep -q sendmail /etc/suid.conf; then
+ /usr/sbin/suidunregister -s postfix /usr/sbin/sendmail
+ fi
+ fi
+
+ if [ -L /etc/postfix/postfix-script ]; then
+ rm -f /etc/postfix/postfix-script
+ fi
+
+ ;;
+
+ upgrade)
+ version=$2
+ if [ -d /var/spool/postfix ] && [ -f /etc/postfix/main.cf ]; then
+ touch /var/spool/postfix/restart
+ fi
+ export LANG=C # for the comparison of mail version...
+
+ if [ -L /etc/postfix/postfix-script ]; then
+ rm -f /etc/postfix/postfix-script
+ fi
+
+ # If user has not modified master/main.proto, move aside so new version
+ # is installed (#991513)
+ cmp -s /usr/share/postfix/main.cf.dist /etc/postfix/main.cf.proto && \
+ mv /etc/postfix/main.cf.proto /etc/postfix/main.cf.proto.old \
+ || echo "/etc/postfix/main.cf.proto modified, not updating."
+ cmp -s /usr/share/postfix/master.cf.dist /etc/postfix/master.cf.proto && \
+ mv /etc/postfix/master.cf.proto /etc/postfix/master.cf.proto.old \
+ || echo "/etc/postfix/master.cf.proto modified, not updating."
+
+ if grep -q '^tlsmgr[[:space:]]*fifo' $MASTER; then
+ tlsmgr_warning
+ fi
+
+ if dpkg --compare-versions $version lt 3.1.0-1; then
+ # check on compatibility warning issues and warn as appropriate.
+ # even default myhostname needs to be checked to make sure it has a '.'.
+ for dir in /etc/postfix $(postconf -hxn multi_instance_directories 2>/dev/null || true); do
+ if [ ! -f "${dir}/main.cf" ] || dpkg --compare-versions $version lt 2.11; then
+ # Just assume that there are issues with the chroot status,
+ # since postconf -F didn't exist before 2.11
+ compat_conversion_warning
+ break
+ fi
+ SRV=$(postconf -c "$dir" -F '*/*/chroot'| sed -n '/ = -$/s/ =.*$//p')
+ if [ -n "$SRV" ] || \
+ postconf -c "$dir" -hx myhostname | grep -qv '\.'; then
+ compat_conversion_warning
+ break
+ fi
+ done
+ fi
+ if [ -f /etc/postfix/main.cf ] && dpkg --compare-versions $version lt 3.0.4-5; then
+ # if daemon_directory is specifically set, and wrong, then we need
+ # to fix it.
+ for dir in /etc/postfix $(postconf -hxn multi_instance_directories); do
+ DD=$(postconf -c "$dir" -hxn daemon_directory)
+ if [ "X${DD}" = X/usr/lib/postfix ]; then
+ main_cf_conversion_warning
+ break
+ fi
+ done
+ fi
+
+ if dpkg --compare-versions $version lt 3.0.3-2; then
+ # If we still think that it's dict_tcp.so, then we need to convert.
+ DM=/etc/postfix/dynamicmaps.cf
+ if [ ! -f ${DM} ] || grep -q "/usr/lib/postfix/dict_tcp.so" ${DM}; then
+ dynamicmaps_conversion_warning
+ fi
+ fi
+
+ if dpkg --compare-versions $version lt 2.10.0-2; then
+ RECIP=$(postconf -hx smtpd_recipient_restrictions 2>/dev/null || true)
+ DEFAULT="permit_mynetworks, reject_unauth_destination"
+ if [ "$RECIP" != "$DEFAULT" ]; then
+ # 2.10.0-1 is special because it was broken. If they haven't fixed
+ # it themselves, deal with it.
+ if dpkg --compare-versions $version ge 2.10.0-1; then
+ if [ -n "$RECIP" ] && [ -z "$(postconf -n smtpd_relay_restrictions)" ]; then
+ relay_restrictions_warning
+ fi
+ else
+ # if they have the default recipient_restrictions then no need to ask.
+ relay_restrictions_warning
+ fi
+ fi
+ fi
+
+ if ! grep -q '^retry[[:space:]]' $MASTER; then
+ retry_warning
+ fi
+ invoke-rc.d --quiet postfix stop || true
+ ;;
+
+ abort-upgrade)
+ if [ -f /etc/postfix/main.cf.proto.old ]; then
+ mv /etc/postfix/main.cf.proto.old /etc/postfix/main.cf.proto
+ echo "Restoring old /etc/postfix/main.cf.proto on failed upgrade."
+ fi
+ if [ -f /etc/postfix/master.cf.proto.old ]; then
+ mv /etc/postfix/master.cf.proto.old /etc/postfix/master.cf.proto
+ echo "Restoring old /etc/postfix/master.cf.proto on failed upgrade."
+ fi
+ ;;
+
+ *)
+ echo "preinst called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+if [ install = "$1" -o upgrade = "$1" ]; then
+ # cleanup after past mistakes.
+ rm -f /usr/sbin/postconf.postfix
+ dpkg-divert --package postfix-tls --remove \
+ --divert /usr/sbin/postconf.postfix \
+ /usr/sbin/postconf >/dev/null 2>/dev/null
+fi
+
+#DEBHELPER#