os.lstat doesn't properly set st_reparse_tag for junction on a remote NetApp share

Abierto
#92,327 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
42/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
python

Línea de trabajo

Comienza examinando la implementación de Windows detrás de os.lstat, especialmente su llamada a GetFileInformationByHandleEx con FileAttributeTagInfo. Reproduce el caso con la junction de NetApp y compáralo con DeviceIoControl usando FSCTL_GET_REPARSE_POINT. Se considera terminado cuando st_reparse_tag informa de la etiqueta de reparse de la junction remota, preservando el comportamiento para los recursos compartidos normales de Windows.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

OS-windows type-bug

Bug report

\\192.168.10.198\vol1\sub is a junction on NetApp share, but in Python 3.10.4 st_reparse_tag is set to 0:

>>> path = "\\\\192.168.10.198\\vol1\\sub"
>>> os.lstat(path).st_reparse_tag
0
>fsutil reparsepoint query \\192.168.10.198\vol1\sub
Reparse Tag Value : 0xa0000003
Tag value: Microsoft
Tag value: Name Surrogate
Tag value: Mount Point
Substitue Name offset: 0
Substitue Name length: 98
Print Name offset:     100
Print Name Length:     98
Substitute Name:       \??\Volume{804BBB02-0000-0000-6270-052200000040}\
Print Name:            \??\Volume{804BBB02-0000-0000-6270-052200000040}\

I checked in the Python code that:

  • os.lstat uses GetFileInformationByHandleEx call with FileAttributeTagInfo to get the value of the reparse tag
  • DeviceIoControl with FSCTL_GET_REPARSE_POINT, which is also used in Python source code, works fine
  • the problem doesn't affect regular remote Windows shares (NTFS filesystem)

Your environment

  • CPython versions tested on: 3.10.4
  • Operating system and architecture: Windows 2019, NetApp share
Lenguaje dominante
Python
Estrellas
77.2k
Forks
36k
Merge medio
1 d 9 h
PR fusionados (30 d)
558

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de python/cpython

Todos los issues de python/cpython

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.