classification
Title: Linux shutil.move between mountpoints as root does not retain ownership
Type: enhancement Stage:
Components: Library (Lib) Versions: Python 3.6
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: giampaolo.rodola, jort.bloem, r.david.murray, ztane
Priority: normal Keywords:

Created on 2016-08-04 20:44 by jort.bloem, last changed 2018-06-12 10:30 by giampaolo.rodola.

Messages (3)
msg272001 - (view) Author: jort bloem (jort.bloem) Date: 2016-08-04 20:44
When using shutil.move() between mounts (i.e. when it does a copy/delete), running as root, ownership should be maintained.

To test: log in as root, create a file owned by a regular user. In python, use shutil.move() to move it to another mountpoint. Check that the ownership of the moved file is the same as the ownership of the original file.
msg272166 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2016-08-08 14:06
This is as documented (see copystat).  To do anything with user and group would be an enhancement.
msg272306 - (view) Author: Antti Haapala (ztane) * Date: 2016-08-10 05:10
And as it is documented, it would be a change against documentation.
However as a stop-gap it is rather trivial to make your own copy function to fix this. copy2 returns the actual destination, so you could do

     def copy_with_ownership(src, dest, *, follow_symlinks=True):
         actual_dest = copy2(src, dest, follow_symlinks=follow_symlinks)
         fix_ownership(src, actual_dest)
         return actual_dest

implement fix_ownership to do what it needs to do, and pass copy_with_ownership as the copy_function argument to move.
History
Date User Action Args
2018-06-12 10:30:13giampaolo.rodolasetnosy: + giampaolo.rodola
2016-08-10 05:10:11ztanesetnosy: + ztane
messages: + msg272306
2016-08-08 14:06:02r.david.murraysetversions: + Python 3.6, - Python 2.7, Python 3.4
nosy: + r.david.murray

messages: + msg272166

type: behavior -> enhancement
2016-08-04 20:44:42jort.bloemcreate