From cf7284af553cb1e4eb622369f82453165a392a7a Mon Sep 17 00:00:00 2001 From: bescoto Date: Wed, 6 Apr 2005 05:15:51 +0000 Subject: Fixed Popple's symlink bug which threatened source directory git-svn-id: http://svn.savannah.nongnu.org/svn/rdiff-backup/trunk@575 2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109 --- rdiff-backup/CHANGELOG | 6 ++++++ rdiff-backup/rdiff_backup/restore.py | 2 +- rdiff-backup/rdiff_backup/rpath.py | 4 ++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/rdiff-backup/CHANGELOG b/rdiff-backup/CHANGELOG index fb21445..a6f3956 100644 --- a/rdiff-backup/CHANGELOG +++ b/rdiff-backup/CHANGELOG @@ -4,6 +4,12 @@ New in v0.13.6 (2005/??/??) Added fix for listing/restoring certain bad archives made when there was a timezone bug. (Thanks to Stephen Isard) +************** Serious bug fix ****************** +If a directory in the source directory was replaced by certain +symlinks, then if later backups failed they could cause files in the +directory that the symlink pointed to to be deleted! Much thanks to +Alistair Popple for pointing this bug out and providing a test case. + New in v0.13.5 (2005/03/28) --------------------------- diff --git a/rdiff-backup/rdiff_backup/restore.py b/rdiff-backup/rdiff_backup/restore.py index 038ca91..58dfc2b 100644 --- a/rdiff-backup/rdiff_backup/restore.py +++ b/rdiff-backup/rdiff_backup/restore.py @@ -542,7 +542,7 @@ as data loss may result.\n""" % (self.mirror_rp.get_indexpath(),), 2) inc_list = [] else: inc_rp, inc_list = inc_pair if not mirror_rp: - mirror_rp = self.mirror_rp.new_index(inc_rp.index) + mirror_rp = self.mirror_rp.new_index_empty(inc_rp.index) yield self.__class__(mirror_rp, inc_rp, inc_list) def yield_mirrorrps(self, mirrorrp): diff --git a/rdiff-backup/rdiff_backup/rpath.py b/rdiff-backup/rdiff_backup/rpath.py index de89026..c383d03 100644 --- a/rdiff-backup/rdiff_backup/rpath.py +++ b/rdiff-backup/rdiff_backup/rpath.py @@ -913,6 +913,10 @@ class RPath(RORPath): """Return similar RPath but with new index""" return self.__class__(self.conn, self.base, index) + def new_index_empty(self, index): + """Return similar RPath with given index, but initialize to empty""" + return self.__class__(self.conn, self.base, index, {'type': None}) + def open(self, mode, compress = None): """Return open file. Supports modes "w" and "r". -- cgit v1.2.1