Package: dpkg
Version: 1.10.28
Tags: patch
I've been bitten by bug #245562 recently and I came up with the following
patch to dpkg-divert.pl: basically, function checkrename() shouldn't
silently accept ENOENT as a non-error if it can't create the temporary file
for the target.
Note: I consider this a real bug that needs fixing because it can actually
cause files to disappear without notice. Not creating the directory I want
to divert to is my own error, but still dpkg-divert wouldn't do what it was
asked to do.
The patch is crude, but works for me. Maybe it should check for a writable
target only if the source actually exists.
--
Ciao, Flavio
--- dpkg-divert.pl-orig 2004-11-11 04:16:35.000000000 +0100
+++ dpkg-divert.pl 2005-06-13 00:26:01.000000000 +0200
@@ -219,16 +219,22 @@
# same name as the diversions but with an extension that
# (hopefully) wont overwrite anything. If it succeeds, we
# assume a writable filesystem.
- foreach $file ($rsrc,$rdest) {
- if (open (TMP, ">> ${file}.dpkg-devert.tmp")) {
- close TMP;
- unlink ("${file}.dpkg-devert.tmp");
- } elsif ($! == ENOENT) {
- $dorename = !$dorename;
- } else {
- &quit("error checking \`$file': $!");
- }
+ if (open (TMP, ">> ${rsrc}.dpkg-devert.tmp")) {
+ close TMP;
+ unlink ("${rsrc}.dpkg-devert.tmp");
+ } elsif ($! == ENOENT) {
+ $dorename = !$dorename;
+ } else {
+ &quit("error checking \`$rsrc': $!");
}
+
+ if (open (TMP, ">> ${rdest}.dpkg-devert.tmp")) {
+ close TMP;
+ unlink ("${rdest}.dpkg-devert.tmp");
+ } else {
+ &quit("error checking \`$rdest': $!");
+ }
+
if (@ssrc && @sdest &&
!($ssrc[0] == $sdest[0] && $ssrc[1] == $sdest[1])) {
&quit("rename involves overwriting \`$rdest' with\n".