X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fbup%2Fmetadata.py;h=6feef21ca01267db43b03ad261b43fb0a1873b49;hb=458e92da32ddd3c18fc1c3e52a76e9f0b48b832f;hp=87fd10b84a84383b63c075f0467767bba33ac0c5;hpb=4e2fe4155f143da5f5c962ffa6378dea8fc33b66;p=bup.git diff --git a/lib/bup/metadata.py b/lib/bup/metadata.py index 87fd10b..6feef21 100644 --- a/lib/bup/metadata.py +++ b/lib/bup/metadata.py @@ -459,6 +459,15 @@ class Metadata: self.posix1e_acl = [posix1e.ACL(text=x) for x in acl_reps] def _apply_posix1e_acl_rec(self, path, restore_numeric_ids=False): + def apply_acl(acl, kind): + try: + acl.applyto(path, kind) + except IOError, e: + if e.errno == errno.EPERM or e.errno == errno.EOPNOTSUPP: + raise ApplyError('POSIX1e ACL applyto: %s' % e) + else: + raise + if not posix1e: if self.posix1e_acl: add_error("%s: can't restore ACLs; posix1e support missing.\n" @@ -468,13 +477,13 @@ class Metadata: acls = self.posix1e_acl if len(acls) > 2: if restore_numeric_ids: - acls[3].applyto(path, posix1e.ACL_TYPE_DEFAULT) + apply_acl(acls[3], posix1e.ACL_TYPE_DEFAULT) else: - acls[2].applyto(path, posix1e.ACL_TYPE_DEFAULT) + apply_acl(acls[2], posix1e.ACL_TYPE_DEFAULT) if restore_numeric_ids: - acls[1].applyto(path, posix1e.ACL_TYPE_ACCESS) + apply_acl(acls[1], posix1e.ACL_TYPE_ACCESS) else: - acls[0].applyto(path, posix1e.ACL_TYPE_ACCESS) + apply_acl(acls[0], posix1e.ACL_TYPE_ACCESS) ## Linux attributes (lsattr(1), chattr(1)) @@ -513,7 +522,13 @@ class Metadata: add_error("%s: can't restore linuxattrs: " "linuxattr support missing.\n" % path) return - set_linux_file_attr(path, self.linux_attr) + try: + set_linux_file_attr(path, self.linux_attr) + except OSError, e: + if e.errno == errno.ENOTTY: + raise ApplyError('Linux chattr: %s' % e) + else: + raise ## Linux extended attributes (getfattr(1), setfattr(1)) @@ -559,7 +574,8 @@ class Metadata: try: xattr.set(path, k, v, nofollow=True) except IOError, e: - if e.errno == errno.EPERM: + if e.errno == errno.EPERM \ + or e.errno == errno.EOPNOTSUPP: raise ApplyError('xattr.set: %s' % e) else: raise