summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbescoto <bescoto@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109>2005-04-06 05:15:51 +0000
committerbescoto <bescoto@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109>2005-04-06 05:15:51 +0000
commitcf7284af553cb1e4eb622369f82453165a392a7a (patch)
treeaaa27995b003705993cf0c51fba2fccff03a48a3
parent47b8f1e5a63145542800a5b10242540a47a69ae2 (diff)
downloadrdiff-backup-cf7284af553cb1e4eb622369f82453165a392a7a.tar.gz
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
-rw-r--r--rdiff-backup/CHANGELOG6
-rw-r--r--rdiff-backup/rdiff_backup/restore.py2
-rw-r--r--rdiff-backup/rdiff_backup/rpath.py4
3 files changed, 11 insertions, 1 deletions
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".