mirror of
https://github.com/borgbackup/borg.git
synced 2026-06-11 09:59:19 -04:00
fix noatime mode, fixes #243
added "nonlocal euid" - without this, euid just gets redefined in inner scope instead of assigned to outer scope
added check for euid 0 - if we run as root, we always have permissions (not just if we are file owner)
note: due to caching and OS behaviour on linux, the bug was a bit tricky to reproduce
and also the fix was a bit tricky to test.
one needs strictatime mount option to enfore traditional atime updating.
for repeated tests, always change file contents (e.g. from /dev/urandom) or attic's caching
will prevent that the file gets read ("accessed") again.
check atimes with ls -lu
i could reproduce code was broken and is fixed with this changeset. and root now doesn't touch any atimes.
This commit is contained in:
parent
4ab4ecc7af
commit
8fba904b16
1 changed files with 3 additions and 1 deletions
|
|
@ -429,7 +429,8 @@ class Archive:
|
|||
return open(p, 'rb')
|
||||
|
||||
def open_noatime_if_owner(p, s):
|
||||
if s.st_uid == euid:
|
||||
if euid == 0 or s.st_uid == euid:
|
||||
# we are root or owner of file
|
||||
return os.fdopen(os.open(p, flags_noatime), 'rb')
|
||||
else:
|
||||
return open(p, 'rb')
|
||||
|
|
@ -442,6 +443,7 @@ class Archive:
|
|||
fo = open(p, 'rb')
|
||||
# Yes, it was -- otherwise the above line would have thrown
|
||||
# another exception.
|
||||
nonlocal euid
|
||||
euid = os.geteuid()
|
||||
# So in future, let's check whether the file is owned by us
|
||||
# before attempting to use O_NOATIME.
|
||||
|
|
|
|||
Loading…
Reference in a new issue