File: //var/lib/dpkg/info/proftpd-core.postinst
#!/bin/sh -e
# summary of how this script can be called:
# * <postinst> `configure' <most-recently-configured-version>
# * <old-postinst> `abort-upgrade' <new version>
# * <conflictor's-postinst> `abort-remove' `in-favour' <package> <new-version>
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
# <failed-install-package> <version> `removing'
# <conflicting-package> <version>
# for details, see /usr/share/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'.
ETC_DIR="/etc/proftpd"
CONF=$ETC_DIR/proftpd.conf
CONF_NEW=$ETC_DIR/proftpd.conf.proftpd-new
MODULES=$ETC_DIR/modules.conf
MODULES_NEW=$ETC_DIR/modules.conf.proftpd-new
installftp()
{
if ! getent passwd ftp > /dev/null
then
adduser --system ftp --home /srv/ftp || true
if [ -f /usr/share/proftpd/templates/welcome.msg -a -d ~ftp ] ; then
cp -p -v /usr/share/proftpd/templates/welcome.msg ~ftp/welcome.msg.proftpd-new || true
do_update ~ftp/welcome.msg || true
fi
fi
}
add_sysuser()
{
if ! getent passwd proftpd > /dev/null
then
adduser --system --disabled-login --no-create-home --home /run/proftpd proftpd || true
else
usermod --home=/run/proftpd proftpd || true
fi
}
list_options()
{
if [ -f $CONF_NEW ] ; then
sed -i -e "s/lsdefaultoptions/ListOptions/i" $CONF_NEW
fi
}
tcpwin_options()
{
if [ -f $CONF_NEW ] ; then
sed -i -e "s/tcpreceivewindow/SocketOptions rcvbuf/i" \
-e "s/tcpsendwindow/SocketOptions sndbuf/i" $CONF_NEW
fi
}
scoreboard()
{
if [ -f $CONF_NEW ] ; then
sed -i -e "s/\(scoreboardpath.*\)/#\n#ScoreboardPath is deprecated in 1.2.9, use ScoreboardFile instead\n#\1\n#\n#ScoreboardFile\t\/run\/proftpd\/proftpd.scoreboard\n#/i" \
$CONF_NEW
fi
}
include_modules()
{
if [ -f $CONF_NEW ] ; then
if ! egrep -qi "^[[:space:]]*Include.*/etc/proftpd/modules.conf" $CONF_NEW ; then
printf "#\n# Includes required DSO modules. This is mandatory in proftpd 1.3\n#\nInclude\t/etc/proftpd/modules.conf\n\n" >$CONF_NEW.tmp.$$
cat $CONF_NEW >>$CONF_NEW.tmp.$$
mv -f $CONF_NEW.tmp.$$ $CONF_NEW
fi
fi
}
identlookups()
{
if [ -f $CONF_NEW ] ; then
if ! egrep -qi "^[[:space:]]*<IfModule mod_ident.c>" $CONF_NEW ; then
perl -pi -e "s{^(.*IdentLookups.*)}{<IfModule mod_ident.c>\n\1\n</IfModule>\n}i;" $CONF_NEW
fi
fi
}
add_mod_ident()
{
if [ -f $MODULES_NEW ] ; then
if ! egrep -qi "^[[:space:]]|#*LoadModule mod_ident.c" $MODULES_NEW ; then
perl -pi -e "s{^(ModulePath .*)}{\1\n\n#\n# Added at upgrade time\n#\nLoadModule mod_ident.c\n}i;" $MODULES_NEW
fi
fi
}
replace_file () {
file=$1
if [ ! -f ${file} ] ; then
mv ${file}.proftpd-new ${file}
else
cp $file ${file}.proftpd-old
ucf ${file}.proftpd-new $file
fi
}
do_update () {
file=$1
if diff -q ${file} ${file}.proftpd-new >/dev/null 2>&1; then
# Old file and new file are identical
rm -f ${file}.proftpd-new
else
replace_file $file
fi
}
create_rundir () {
if [ ! -d /run/proftpd ]; then
mkdir /run/proftpd
fi
}
disable_script () {
file=$1
if [ -x ${file} ]; then
cp ${file} ${file}.disabled
cat >${file}.disabled <<EOF
#!/bin/sh
# This script has been disabled at upgrade time
exit 0
EOF
cat ${file} >>${file}.disabled
rm -f ${file}
fi
}
# update-inetd is used if found, else you are on your own
if [ ! -z `which update-inetd` ]; then
UPDATE_INETD=update-inetd
else
UPDATE_INETD=/bin/true
fi
if [ "$1" = "configure" ]; then
# create directory in /run
create_rundir
# mv eventual old configuration in the new location
if [ -f /etc/proftpd.conf -a ! -f $CONF ]; then
mv /etc/proftpd.conf $CONF
fi
# use current configuration files or generate new ones from scratch
for name in proftpd modules sql ldap tls virtuals sftp geoip snmp
do
if [ ! -f $ETC_DIR/$name.conf ]; then
cp /usr/share/proftpd/templates/$name.conf $ETC_DIR/$name.conf.proftpd-new
else
cp $ETC_DIR/$name.conf $ETC_DIR/$name.conf.proftpd-new
fi
done
# update-inetd does not manage hostlist prefix to service, at least avoid to add a duplicated line
if [ -f /etc/inetd.conf -a $(grep -qs '^([[:alnum:],.]+)?:?ftp[[:space:]]+' /etc/inetd.conf|wc -l) -eq 0 ]; then
$UPDATE_INETD --group STANDARD --add '#<off># ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/proftpd'
fi
add_sysuser
installftp
# do mandatory changes
list_options
tcpwin_options
scoreboard
include_modules
identlookups
add_mod_ident
# disable old cron jobs if needed
disable_script /etc/cron.monthly/proftpd
disable_script /etc/cron.monthly/proftpd-basic
# propose maintainer changes to user
do_update /etc/proftpd/proftpd.conf
do_update /etc/proftpd/modules.conf
do_update /etc/proftpd/tls.conf
do_update /etc/proftpd/sql.conf
do_update /etc/proftpd/ldap.conf
do_update /etc/proftpd/virtuals.conf
do_update /etc/proftpd/sftp.conf
do_update /etc/proftpd/geoip.conf
do_update /etc/proftpd/snmp.conf
# be safe and change permissions for .conf files where passwords should
# potentially be present
chmod 600 /etc/proftpd/sql.conf* /etc/proftpd/ldap.conf* || true
# clean run files (pidfile and scoreboard)
rm -f /run/proftpd/proftpd* /run/proftpd.pid
# enable and start proftpd daemon via systemctl
if egrep -qi "^[[:space:]]*ServerType.*standalone" /etc/proftpd/proftpd.conf
then
deb-systemd-invoke enable proftpd.service
deb-systemd-invoke restart proftpd.service
fi
fi
if [ -e "/etc/init.d/proftpd" ]; then
set +e
proftpd -t >/dev/null 2>&1
if [ $? = 0 ]; then
set -e
else
echo "Cannot start proftpd, please check syntax of your configuration file $CONF"
fi
fi
# Automatically added by dh_installinit/13.6ubuntu1
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
if [ -z "${DPKG_ROOT:-}" ] && [ -x "/etc/init.d/proftpd" ]; then
update-rc.d proftpd defaults >/dev/null
if [ -n "$2" ]; then
_dh_action=restart
else
_dh_action=start
fi
invoke-rc.d --skip-systemd-native proftpd $_dh_action || exit 1
fi
fi
# End automatically added section
# Automatically added by dh_installsystemd/13.6ubuntu1
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
if deb-systemd-helper debian-installed 'proftpd.socket'; then
# This will only remove masks created by d-s-h on package removal.
deb-systemd-helper unmask 'proftpd.socket' >/dev/null || true
if deb-systemd-helper --quiet was-enabled 'proftpd.socket'; then
# Create new symlinks, if any.
deb-systemd-helper enable 'proftpd.socket' >/dev/null || true
fi
fi
# 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 'proftpd.socket' >/dev/null || true
fi
# End automatically added section
# Automatically added by dh_installsystemd/13.6ubuntu1
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
if deb-systemd-helper debian-installed 'proftpd.service'; then
# This will only remove masks created by d-s-h on package removal.
deb-systemd-helper unmask 'proftpd.service' >/dev/null || true
if deb-systemd-helper --quiet was-enabled 'proftpd.service'; then
# Create new symlinks, if any.
deb-systemd-helper enable 'proftpd.service' >/dev/null || true
fi
fi
# 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 'proftpd.service' >/dev/null || true
fi
# End automatically added section