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 (????/??/??)
---------------------------
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
before doing so. Fixes Savannah bug #21546. (Patch from Marc Horowitz)
......
......@@ -598,7 +598,7 @@ def restore_set_root(rpin):
i = len(pathcomps)
while i >= min_len_pathcomps:
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
if parent_dir.path == rpin.conn.Globals.get('restrict_path'):
return None
......
......@@ -599,6 +599,10 @@ class RORPath:
"""Signal that rorp is a signature/diff for a hardlink file"""
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):
"""Return file type object if any was given using self.setfile"""
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