This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Pathlib .owner() and .group() methods fail on broken links
Type: crash Stage: resolved
Components: Library (Lib) Versions: Python 3.4
process
Status: closed Resolution: rejected
Dependencies: Superseder:
Assigned To: Nosy List: inigoserna, pitrou
Priority: normal Keywords: patch

Created on 2014-04-21 16:42 by inigoserna, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
pathlib-34-owner_group_fixed.diff inigoserna, 2014-04-21 16:42
Messages (4)
msg216950 - (view) Author: Iñigo Serna (inigoserna) Date: 2014-04-21 16:42
Pathlib .owner() and .group() methods fail on broken symlinks.

They use:
    return pwd.getpwuid(self.stat().st_uid).pw_name
and:
    return grp.getgrgid(self.stat().st_gid).gr_name

It should be self.lstat().

Attached simple fix as unified diff.
msg216971 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2014-04-21 22:21
Most other Path methods operate on the link target, not the link itself, so I don't see why these methods would work otherwise.
msg216995 - (view) Author: Iñigo Serna (inigoserna) Date: 2014-04-22 09:29
Mainly, 2 reasons:

- It can make programs crash *unexpectedly*

- Pathlib should provide a complete and uniform API for dealing with all types of files. If not, users would need to use Pathlib for some kind of files and go to os and os.path for others, then why the reason to use Pathlib?
msg216996 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2014-04-22 09:33
> - It can make programs crash *unexpectedly*

A broken link is an error, so it's normal to have an exception raised
here. An exception can always be caught if you were expecting the error.

> - Pathlib should provide a complete and uniform API for dealing with
> all types of files. If not, users would need to use Pathlib for some
> kind of files and go to os and os.path for others, then why the reason
> to use Pathlib?

I sympathize with this. But you can already use Path.lstat() and inspect
the st_uid and st_gid fields if you are really interested in the link's
owner and group (rather than the target's).

The fact that most Path methods dereference symlinks reflects the
semantics of other common filesystem calls (such as those in the os
module, or the underlying functions of the POSIX API).
History
Date User Action Args
2022-04-11 14:58:02adminsetgithub: 65521
2017-11-09 18:11:28serhiy.storchakasetstatus: pending -> closed
resolution: rejected
stage: resolved
2017-03-26 06:09:50serhiy.storchakasetstatus: open -> pending
2014-04-22 09:33:44pitrousetmessages: + msg216996
2014-04-22 09:29:01inigosernasetmessages: + msg216995
2014-04-21 22:21:33pitrousetmessages: + msg216971
2014-04-21 22:19:15berker.peksagsetnosy: + pitrou
2014-04-21 16:42:49inigosernacreate