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.
Created on 2013年05月06日 09:11 by christian.heimes, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| filemode.patch | christian.heimes, 2013年05月06日 15:27 | review | ||
| file_modes_strings.patch | rmilne, 2013年06月21日 13:03 | New mode2str function which fixes this bug, and the reverse function str2mode. | ||
| Messages (7) | |||
|---|---|---|---|
| msg188496 - (view) | Author: Christian Heimes (christian.heimes) * (Python committer) | Date: 2013年05月06日 09:11 | |
The function stat.filemode() has a fallback to "-" for file type when it is unable to properly detect the type of a file. This gives wrong results for any file type that is not in the lookup table.
For example it doesn't check for S_ISSOCK:
>>> s = os.stat("/var/run/sdp") t
>>> stat.filemode(s.st_mode)
'-rw-rw-rw-'
$ ls -la /var/run/sdp
srw-rw-rw- 1 root root 0 Mai 2 16:08 /var/run/sdp
Also see #11016 for more file types.
I'm going to work on the matter soonish.
|
|||
| msg188607 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2013年05月06日 22:42 | |
Can you maybe add an unit test? |
|||
| msg191576 - (view) | Author: Richard Milne (rmilne) | Date: 2013年06月21日 13:03 | |
I've added some changes to the module which (I believe) not only fix this bug, but add the reverse function, converting a permission string to a number. The diff was made against Lib/stat.py @ 84234:f32dad3a243e, which was the most recent version of the file I could find. My patch is intended for Python 2.7, but should work on 3.3 (though I haven't tested it there). My 'filemode' function ('mode2str') is not as short and elegant as the current one, but then it should fix this bug, and it doesn't require duplicating so many of the module's constants in a lookup table. It also includes a check to make sure mode characters (like 'p', 's', '-', etc) are defined for every numeric mode in the module... so long as their names start with the prefix "S_IF" (... which may lead to conflicts with issue 17924). I may also have gone beyond the scope, and added code to recognise the git link file mode (see http://stackoverflow.com/questions/737673/how-to-read-the-mode-field-of-git-ls-trees-output), but this extension should be easy to recognise and remove. Lastly, there are some minor whitespace and sorting changes (notably, S_IF* defs sorted by mode num). As for tests, I couldn't find any for this module in Lib/test. I have at least included a command line test which exhaustively tests the encoding and decoding of every valid file mode. If you want, I've even a test script which creates an example of every valid file type (apart from socket and git link types), with every valid file mode! |
|||
| msg191578 - (view) | Author: Richard Milne (rmilne) | Date: 2013年06月21日 13:34 | |
I already see my name change will cause problems. The tarfile.py (Lib/tarfile.py:277) module relies on the function being named 'filemode'. As the stat.filemode function is relatively new, I don't know how many other modules rely on it. I changed the name because I thought the new name (mode2str) better described what the function does, and is orthogonal to the reverse function (str2mode). But, of course, I've no issue with whatever the functions are finally named... I'll leave the decision to someone with a bit more experience. |
|||
| msg200761 - (view) | Author: Christian Heimes (christian.heimes) * (Python committer) | Date: 2013年10月21日 12:20 | |
The C code in Python 3.4's _stat.c module already handle unsupported types correctly. I'm going to apply my patch to the Python implementation in 2.7, 3.3 and 3.4 soonish. Or is somebody against a fix of 2.7 and 3.3? |
|||
| msg401602 - (view) | Author: Irit Katriel (iritkatriel) * (Python committer) | Date: 2021年09月10日 17:43 | |
I think this is fixed now
>>> s = os.stat('/var/run/vpncontrol.sock')
>>> stat.filemode(s.st_mode)
'srw-------'
iritkatriel@Irits-MBP cpython % ls -l /var/run/vpncontrol.sock
srw------- 1 root daemon 0 19 Aug 11:15 /var/run/vpncontrol.sock
|
|||
| msg401686 - (view) | Author: Christian Heimes (christian.heimes) * (Python committer) | Date: 2021年09月13日 06:10 | |
Thanks for the ping. The issue has been fixed a long time ago. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:45 | admin | set | github: 62113 |
| 2021年09月13日 06:10:42 | christian.heimes | set | status: open -> closed resolution: fixed messages: + msg401686 stage: patch review -> resolved |
| 2021年09月10日 17:43:02 | iritkatriel | set | nosy:
+ iritkatriel messages: + msg401602 |
| 2013年10月21日 12:20:56 | christian.heimes | set | messages: + msg200761 |
| 2013年06月21日 13:34:43 | rmilne | set | messages: + msg191578 |
| 2013年06月21日 13:03:38 | rmilne | set | files:
+ file_modes_strings.patch versions: + Python 2.7 nosy: + rmilne messages: + msg191576 |
| 2013年05月06日 22:42:37 | vstinner | set | nosy:
+ vstinner messages: + msg188607 |
| 2013年05月06日 15:27:20 | christian.heimes | set | files:
+ filemode.patch keywords: + patch components: + Library (Lib) stage: needs patch -> patch review |
| 2013年05月06日 09:11:20 | christian.heimes | create | |