#!/bin/sh -e ETC_DEFAULT_SSH=@ETC_DEFAULT_SSH@ ETC_INIT_D_SSH=@ETC_INIT_D_SSH@ ETC_PAM_D_SSH=@ETC_PAM_D_SSH@ action=$1 version=$2 prepare_transfer_conffile () { CONFFILE="$1" TEXT="$2" MODE="$3" [ "$CONFFILES" ] || return 0 [ -e "$CONFFILE" ] || return 0 md5sum="$(md5sum "$CONFFILE" |sed -e 's/ .*//')" old_md5sum="$(echo "$CONFFILES" | awk '$1 == "'"$CONFFILE"'" { print $2 }')" if [ "$md5sum" = "$old_md5sum" ]; then echo >&2 "Transferring ownership of conffile $CONFFILE ..." # We have to write out the desired new text of the conffile, # which is tricky in the preinst, hence the nasty way we # have to hardcode the text here. Fortunately, this is only # necessary with sarge's dpkg and older. if echo "$TEXT" | head -n1 | grep -q '^@.*@$'; then echo >&2 'Unsubstituted conffile text! Please report this bug.' exit 1 fi printf '%s' "$TEXT" >"$CONFFILE.dpkg-new" chmod "$MODE" "$CONFFILE.dpkg-new" mv -f "$CONFFILE" "$CONFFILE.moved-by-preinst" mv -f "$CONFFILE.dpkg-new" "$CONFFILE" return 0 fi } if [ -d /etc/ssh-nonfree ] && [ ! -d /etc/ssh ]; then version=1.2.27 fi if [ "$action" = upgrade ] || [ "$action" = install ] then # check if debconf is missing if ! test -f /usr/share/debconf/confmodule then cat </dev/null || exit 1 # work around for missing debconf db_get() { : ; } RET=true if [ -d /etc/ssh-nonfree ] && [ ! -d /etc/ssh ]; then cp -a /etc/ssh-nonfree /etc/ssh fi else # Source debconf library. . /usr/share/debconf/confmodule db_version 2.0 fi db_get ssh/use_old_init_script if [ "$RET" = "false" ]; then echo "ssh config: Aborting because ssh/use_old_init_script = false" >&2 exit 1 fi # deal with upgrading from pre-OpenSSH versions key=/etc/ssh/ssh_host_key export key if [ -n "$version" ] && [ -x /usr/bin/ssh-keygen ] && [ -f $key ] && dpkg --compare-versions "$version" lt 1.2.28 then # make sure that keys get updated to get rid of IDEA # # N.B. this only works because we've still got the old # nonfree ssh-keygen at this point # # First, check if we need to bother echo -en '\0\0' | 3<&0 sh -c \ 'dd if=$key bs=1 skip=32 count=2 2>/dev/null | cmp -s - /dev/fd/3' || { # this means that bytes 32&33 of the key were not both zero, in which # case the key is encrypted, which we need to fix chmod 600 $key ssh-keygen -u -f $key >/dev/null if type restorecon >/dev/null 2>&1; then restorecon "$key.pub" fi } fi if dpkg --compare-versions "$version" lt 0; then CONFFILES="$(dpkg-query -W -f '${Conffiles}\n' ssh 2>/dev/null | sed 's/^ *//')" prepare_transfer_conffile /etc/default/ssh "$ETC_DEFAULT_SSH" 0644 prepare_transfer_conffile /etc/init.d/ssh "$ETC_INIT_D_SSH" 0755 prepare_transfer_conffile /etc/pam.d/ssh "$ETC_PAM_D_SSH" 0644 fi fi #DEBHELPER#