Control: reassign -1 dpkg Control: tags -1 patch On Mon, Jul 15, 2013 at 03:23:30PM -0700, Steve Langasek wrote: > > I might perhaps consider looking into reviewing and applying tested > > patches if someone wanted to provide them, but that's not a thrilling > > prospect either. > I will look at fixing dpkg-maintscript-helper for this issue. Attached is a tested patch for this. I'm not thrilled about invoking dpkg-query -S here, but I don't see any other way to get this information. It also still doesn't give perfect results; if a conffile moves from package x to package y, and package x is unpacked before package y, a modified conffile will be left behind as <conffile>.dpkg-bak and the pristine conffile from the new package will be unpacked in its place. But I believe it is at least as good as the existing code in all cases. -- Steve Langasek Give me a lever long enough and a Free OS Debian Developer to set it on, and I can move the world. Ubuntu Developer http://www.debian.org/ slangasek@ubuntu.com vorlon@debian.org
From 6a7b61450c6db1a74e31fb7a52497be6fce50e2b Mon Sep 17 00:00:00 2001 From: Steve Langasek <steve.langasek@ubuntu.com> Date: Mon, 15 Jul 2013 15:57:56 -0700 Subject: [PATCH] dpkg-maintscript-helper: when a conffile is no longer owned by the current (or named) package, don't move/remove it. Closes: #716948. --- debian/changelog | 4 +++ scripts/dpkg-maintscript-helper.sh | 66 +++++++++++++++++++++++++++++++++++--- 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index d3faa2c..0c3c037 100644 --- a/debian/changelog +++ b/debian/changelog @@ -132,6 +132,10 @@ dpkg (1.17.0) UNRELEASED; urgency=low * Fix typo in dpkg-source(1) man page French translation. Thanks to Cédric Boutillier <boutil@debian.org>. Closes: #708292 + [ Steve Langasek ] + * dpkg-maintscript-helper: when a conffile is no longer owned by the + current (or named) package, don't move/remove it. Closes: #716948. + -- Guillem Jover <guillem@debian.org> Fri, 03 Aug 2012 13:21:00 +0200 dpkg (1.16.10) unstable; urgency=low diff --git a/scripts/dpkg-maintscript-helper.sh b/scripts/dpkg-maintscript-helper.sh index 6e2252e..c28b5be 100755 --- a/scripts/dpkg-maintscript-helper.sh +++ b/scripts/dpkg-maintscript-helper.sh @@ -61,7 +61,7 @@ rm_conffile() { postinst) if [ "$1" = "configure" ] && [ -n "$2" ] && dpkg --compare-versions "$2" le-nl "$LASTVERSION"; then - finish_rm_conffile $CONFFILE + finish_rm_conffile "$CONFFILE" fi ;; postrm) @@ -72,7 +72,7 @@ rm_conffile() { if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ] && [ -n "$2" ] && dpkg --compare-versions "$2" le-nl "$LASTVERSION"; then - abort_rm_conffile "$CONFFILE" + abort_rm_conffile "$CONFFILE" "$PACKAGE" fi ;; *) @@ -87,6 +87,17 @@ prepare_rm_conffile() { [ -e "$CONFFILE" ] || return 0 + owner=$(dpkg-query -S "$CONFFILE" | sed -e's/:[^:]*$//') + case $owner in + "$PACKAGE"|"$PACKAGE, *"|"* $PACKAGE, *"|"* $PACKAGE") + ;; + *) + debug "Conffile '$CONFFILE' not owned by package " \ + "'$PACKAGE', skipping rm_conffile" + return 0 + ;; + esac + local md5sum="$(md5sum $CONFFILE | sed -e 's/ .*//')" local old_md5sum="$(dpkg-query -W -f='${Conffiles}' $PACKAGE | \ sed -n -e "\' $CONFFILE ' { s/ obsolete$//; s/.* //; p }")" @@ -114,6 +125,18 @@ finish_rm_conffile() { abort_rm_conffile() { local CONFFILE="$1" + local PACKAGE="$2" + + owner=$(dpkg-query -S "$CONFFILE" | sed -e's/:[^:]*$//') + case $owner in + "$PACKAGE"|"$PACKAGE, *"|"* $PACKAGE, *"|"* $PACKAGE") + ;; + *) + debug "Conffile '$CONFFILE' not owned by package " \ + "'$PACKAGE', skipping rm_conffile" + return 0 + ;; + esac if [ -e "$CONFFILE.dpkg-remove" ]; then echo "Reinstalling $CONFFILE that was moved away" @@ -164,14 +187,14 @@ mv_conffile() { postinst) if [ "$1" = "configure" ] && [ -n "$2" ] && dpkg --compare-versions "$2" le-nl "$LASTVERSION"; then - finish_mv_conffile "$OLDCONFFILE" "$NEWCONFFILE" + finish_mv_conffile "$OLDCONFFILE" "$NEWCONFFILE" "$PACKAGE" fi ;; postrm) if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ] && [ -n "$2" ] && dpkg --compare-versions "$2" le-nl "$LASTVERSION"; then - abort_mv_conffile "$OLDCONFFILE" + abort_mv_conffile "$OLDCONFFILE" "$PACKAGE" fi ;; *) @@ -186,6 +209,17 @@ prepare_mv_conffile() { [ -e "$CONFFILE" ] || return 0 + owner=$(dpkg-query -S $CONFFILE | sed -e's/:[^:]*$//') + case $owner in + "$PACKAGE"|"$PACKAGE, *"|"* $PACKAGE, *"|"* $PACKAGE") + ;; + *) + debug "Conffile '$CONFFILE' not owned by package " \ + "'$PACKAGE', skipping mv_conffile" + return 0 + ;; + esac + local md5sum="$(md5sum $CONFFILE | sed -e 's/ .*//')" local old_md5sum="$(dpkg-query -W -f='${Conffiles}' $PACKAGE | \ sed -n -e "\' $CONFFILE ' { s/ obsolete$//; s/.* //; p }")" @@ -197,11 +231,23 @@ prepare_mv_conffile() { finish_mv_conffile() { local OLDCONFFILE="$1" local NEWCONFFILE="$2" + local PACKAGE="$2" rm -f $OLDCONFFILE.dpkg-remove [ -e "$OLDCONFFILE" ] || return 0 + owner=$(dpkg-query -S $OLDCONFFILE | sed -e's/:[^:]*$//') + case $owner in + "$PACKAGE"|"$PACKAGE, *"|"* $PACKAGE, *"|"* $PACKAGE") + ;; + *) + debug "Conffile '$CONFFILE' not owned by package " \ + "'$PACKAGE', skipping mv_conffile" + return 0 + ;; + esac + echo "Preserving user changes to $NEWCONFFILE (renamed from $OLDCONFFILE)..." mv -f "$NEWCONFFILE" "$NEWCONFFILE.dpkg-new" mv -f "$OLDCONFFILE" "$NEWCONFFILE" @@ -209,6 +255,18 @@ finish_mv_conffile() { abort_mv_conffile() { local CONFFILE="$1" + local PACKAGE="$2" + + owner=$(dpkg-query -S $CONFFILE | sed -e's/:[^:]*$//') + case $owner in + "$PACKAGE"|"$PACKAGE, *"|"* $PACKAGE, *"|"* $PACKAGE") + ;; + *) + debug "Conffile '$CONFFILE' not owned by package " \ + "'$PACKAGE', skipping mv_conffile" + return 0 + ;; + esac if [ -e "$CONFFILE.dpkg-remove" ]; then echo "Reinstalling $CONFFILE that was moved away" -- 1.8.3.2
Attachment:
signature.asc
Description: Digital signature