os.path.ismounts: further situations it doesn't detect correctly
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 77.2k
- Fork
- 36k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
Bug report
I had a look at os.path.ismount():
https://github.com/python/cpython/blob/43a6deadbb40bc93e0eaebb3c56c34f8a3502132/Lib/posixpath.py#L186-L216
And it may have some issues:
- The documentation already says, that it isn't capable of detecting bind-mounts of some filesystem on the very same filesystem. While it's good that it mentions this, the results of
ismount()is IMO still simply wrong in these cases, cause it is a mountpoint. - The same problem in the detection algorithm is not only limited to bind-mounts, but also to any other mount points, where the path’s
st_devequals that of its parent. For example, btrfs subvolumes. This is however not documented.
Looking a the code, it effectively does: lstat(), check whether it’s a symlink, lstat() the parent, check whether the device numbers are different (then it's a mountpoint), check whether the inodes are the same.
Now I thought about the latter, and what it is meant for.
The only case I could think of at first is /, where /.. is the same inode. [Is there any other?]
- This however already requires, that not only the inodes are the same, but also the device numbers. which is given because of the order of these checks, however, I'd suggest to comment that accordingly.
- If the above were the only case, wouldn't it be faster to simply check the pathname for being
"/"orb"/". Would perhaps require somerealpath()though, to also catch things like"/../.."and so on. - However, I found that
/is not the only case: Within a chroot, the chroot's/may (or may not) be a mountpoint - the problem is just, the current algorithm doesn't detect this either. Instead, it wrongly claims that a chroot’s "/" would be a mountpoint, even when it isn't.
Not sure what one could do about all that… /etc/mtab is dead... /proc/mounts may not be available on all POSIX systems and even on Linux it's nowadays rather superseded by /proc/self/mountinfo.
Your environment
- CPython versions tested on: 3.10.6
- Operating system and architecture: Debian sid
Cheers,
Chris.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia da os.path.ismount() in Lib/posixpath.py, in particolare dall’implementazione collegata, e consulta la relativa documentazione. Riproduci i casi segnalati di bind-mount, sottovolume btrfs e chroot nell’ambiente Debian indicato. Il lavoro sarà considerato completato quando saranno disponibili un approccio di rilevamento concordato, un comportamento corretto e la documentazione delle limitazioni rimanenti specifiche della piattaforma.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- operating-systems
- Tipo di issue
- Bug
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 30/100