Package: ucf Version: 3.0043 Severity: important Dear Maintainer,
ucfr aborts during an unattended upgrade of dovecot when a diverted configuration file is present: > Replacing config file /etc/dovecot/dovecot.conf.mypackage with new version > ucfr: Attempt from package dovecot-core to take /etc/dovecot/dovecot.conf.mypackage away from package mypackage > ucfr: Aborting. ucf fails when trying to complete the installation (via another invocation of apt install): > Setting up dovecot-core (1:2.2.33.2-1ubuntu4.7) ... > /usr/bin/ucf: 444: [: missing ] > grep: ]: No such file or directory > /usr/bin/ucf: 444: [: missing ] > grep: ]: No such file or directory The patch below * makes ucfr respect diverted configuration files, * fixes the syntax error in ucf and * makes ucf correctly detect 'local' diversions, bringing it in line with stable dpkg-divert output as provided by '--listpackage'. The patch has been tested successfully with ucf/3.0043 backported to Ubuntu 18.04. *** usr/bin/ucf~ 2020-06-16 07:37:53.000000000 +0200 --- usr/bin/ucf 2021-01-05 16:36:12.097133824 +0100 *************** *** 439,454 **** fi # Follow dpkg-divert as though we are installed as part of $opt_package ! divert_line=$(dpkg-divert --list "$dest_file") if [ -n "$divert_line" ]; then ! if [ echo "$divert_line" | grep "^local" ]; then ! # local diversion; pick something not in the package namespace ! divert_package="LOCAL" ! else ! # extract the name of the diverted package. ! # The fact that this requires output parsing is bug #485012 ! divert_package=$(dpkg-divert --listpackage "$dest_file") ! fi if [ "$divert_package" != "$opt_package" ]; then dest_file=$(dpkg-divert --truename "$dest_file") --- 439,448 ---- fi # Follow dpkg-divert as though we are installed as part of $opt_package ! divert_line=$(dpkg-divert --listpackage "$dest_file") if [ -n "$divert_line" ]; then ! # name of the package or 'LOCAL' for a local diversion ! divert_package="$divert_line" if [ "$divert_package" != "$opt_package" ]; then dest_file=$(dpkg-divert --truename "$dest_file") *** usr/bin/ucfr~ 2020-06-16 07:37:53.000000000 +0200 --- usr/bin/ucfr 2021-01-05 16:39:06.592853096 +0100 *************** *** 112,121 **** awk '{print $1;}' ); if [ "$pkg" != "$old_pkg" ]; then ! if [ "X$FORCE" = "X" ]; then ! echo >&2 "$progname: Attempt from package $pkg to take ${real_conf_file} away from package $old_pkg"; ! echo >&2 "ucfr: Aborting."; ! exit 4; fi else if [ "X$VERBOSE" != "X" ]; then --- 112,129 ---- awk '{print $1;}' ); if [ "$pkg" != "$old_pkg" ]; then ! divert_package=$(dpkg-divert --listpackage "$conf_file") ! if [ -n "$divert_package" ]; then ! if [ "X$VERBOSE" != "X" ]; then ! echo >&2 "$progname: Package $pkg will not take away diverted ${conf_file} from package $divert_package"; ! fi ! exit 0; ! else ! if [ "X$FORCE" = "X" ]; then ! echo >&2 "$progname: Attempt from package $pkg to take ${real_conf_file} away from package $old_pkg"; ! echo >&2 "ucfr: Aborting."; ! exit 4; ! fi fi else if [ "X$VERBOSE" != "X" ]; then