summaryrefslogtreecommitdiff
path: root/rdiff-backup/rdiff_backup/fs_abilities.py
diff options
context:
space:
mode:
Diffstat (limited to 'rdiff-backup/rdiff_backup/fs_abilities.py')
-rw-r--r--rdiff-backup/rdiff_backup/fs_abilities.py15
1 files changed, 14 insertions, 1 deletions
diff --git a/rdiff-backup/rdiff_backup/fs_abilities.py b/rdiff-backup/rdiff_backup/fs_abilities.py
index b3d69a0..e2285e7 100644
--- a/rdiff-backup/rdiff_backup/fs_abilities.py
+++ b/rdiff-backup/rdiff_backup/fs_abilities.py
@@ -43,6 +43,7 @@ class FSAbilities:
carbonfile = None # True if Mac Carbon file data is supported.
name = None # Short string, not used for any technical purpose
read_only = None # True if capabilities were determined non-destructively
+ high_perms = None # True if suid etc perms are (read/write) supported
def __init__(self, name = None):
"""FSAbilities initializer. name is only used in logging"""
@@ -89,7 +90,8 @@ class FSAbilities:
('Hard linking', self.hardlinks),
('fsync() directories', self.fsync_dirs),
('Directory inc permissions',
- self.dir_inc_perms)])
+ self.dir_inc_perms),
+ ('High-bit permissions', self.high_perms)])
add_boolean_list([('Access control lists', self.acls),
('Extended attributes', self.eas),
('Mac OS X style resource forks',
@@ -149,6 +151,7 @@ class FSAbilities:
self.set_dir_inc_perms(subdir)
self.set_resource_fork_readwrite(subdir)
self.set_carbonfile()
+ self.set_high_perms_readwrite(subdir)
if override_chars_to_quote is None: self.set_chars_to_quote(subdir)
else: self.chars_to_quote = override_chars_to_quote
if use_ctq_file: self.compare_chars_to_quote(rbdir)
@@ -378,6 +381,16 @@ rdiff-backup-data/chars_to_quote.
return
self.resource_forks = 0
+ def set_high_perms_readwrite(self, dir_rp):
+ """Test for writing high-bit permissions like suid"""
+ tmp_rp = dir_rp.append("high_perms")
+ tmp_rp.touch()
+ try:
+ tmp_rp.chmod(07000)
+ tmp_rp.chmod(07777)
+ except (OSError, IOError), e: self.high_perms = 0
+ else: self.high_perms = 1
+ tmp_rp.delete()
def get_fsabilities_readonly(desc_string, rp):
"""Return an FSAbilities object with given description_string