Commit da2cca60 authored by owsla's avatar owsla

restore_set_root should check if it can read a directory before trying

to list the contents. Closes Savannah bug #21106


git-svn-id: http://svn.savannah.nongnu.org/svn/rdiff-backup@854 2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109
parent a158d626
New in v1.1.15 (????/??/??) New in v1.1.15 (????/??/??)
--------------------------- ---------------------------
restore_set_root should check if it can read a particular directory
before checking if "rdiff-backup-data" is contained in it. Closes
Savannah bug #21106. (Patch from Alex Chapman)
Regress.restore_orig_regfile should check if directories can be fsync'd Regress.restore_orig_regfile should check if directories can be fsync'd
before doing so. Fixes Savannah bug #21546. (Patch from Marc Horowitz) before doing so. Fixes Savannah bug #21546. (Patch from Marc Horowitz)
......
...@@ -598,7 +598,7 @@ def restore_set_root(rpin): ...@@ -598,7 +598,7 @@ def restore_set_root(rpin):
i = len(pathcomps) i = len(pathcomps)
while i >= min_len_pathcomps: while i >= min_len_pathcomps:
parent_dir = rpath.RPath(rpin.conn, "/".join(pathcomps[:i])) parent_dir = rpath.RPath(rpin.conn, "/".join(pathcomps[:i]))
if (parent_dir.isdir() and if (parent_dir.isdir() and parent_dir.is_readable() and
"rdiff-backup-data" in parent_dir.listdir()): break "rdiff-backup-data" in parent_dir.listdir()): break
if parent_dir.path == rpin.conn.Globals.get('restrict_path'): if parent_dir.path == rpin.conn.Globals.get('restrict_path'):
return None return None
......
...@@ -599,6 +599,10 @@ class RORPath: ...@@ -599,6 +599,10 @@ class RORPath:
"""Signal that rorp is a signature/diff for a hardlink file""" """Signal that rorp is a signature/diff for a hardlink file"""
self.data['linked'] = index self.data['linked'] = index
def is_readable(self):
"""Check whether user can read the file or directory"""
return self.conn.os.access(self.path, self.conn.os.R_OK)
def open(self, mode): def open(self, mode):
"""Return file type object if any was given using self.setfile""" """Return file type object if any was given using self.setfile"""
if mode != "rb": raise RPathException("Bad mode %s" % mode) if mode != "rb": raise RPathException("Bad mode %s" % mode)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment