bpo-39567: Add audit for os.walk(), os.fwalk(), Path.glob() and Path.rglob(). (GH-18372)
This commit is contained in:
parent
95905ce0f4
commit
f4f445b693
10
Lib/os.py
10
Lib/os.py
@ -336,7 +336,10 @@ def walk(top, topdown=True, onerror=None, followlinks=False):
|
|||||||
dirs.remove('CVS') # don't visit CVS directories
|
dirs.remove('CVS') # don't visit CVS directories
|
||||||
|
|
||||||
"""
|
"""
|
||||||
top = fspath(top)
|
sys.audit("os.walk", top, topdown, onerror, followlinks)
|
||||||
|
return _walk(fspath(top), topdown, onerror, followlinks)
|
||||||
|
|
||||||
|
def _walk(top, topdown, onerror, followlinks):
|
||||||
dirs = []
|
dirs = []
|
||||||
nondirs = []
|
nondirs = []
|
||||||
walk_dirs = []
|
walk_dirs = []
|
||||||
@ -410,11 +413,11 @@ def walk(top, topdown=True, onerror=None, followlinks=False):
|
|||||||
# the caller can replace the directory entry during the "yield"
|
# the caller can replace the directory entry during the "yield"
|
||||||
# above.
|
# above.
|
||||||
if followlinks or not islink(new_path):
|
if followlinks or not islink(new_path):
|
||||||
yield from walk(new_path, topdown, onerror, followlinks)
|
yield from _walk(new_path, topdown, onerror, followlinks)
|
||||||
else:
|
else:
|
||||||
# Recurse into sub-directories
|
# Recurse into sub-directories
|
||||||
for new_path in walk_dirs:
|
for new_path in walk_dirs:
|
||||||
yield from walk(new_path, topdown, onerror, followlinks)
|
yield from _walk(new_path, topdown, onerror, followlinks)
|
||||||
# Yield after recursion if going bottom up
|
# Yield after recursion if going bottom up
|
||||||
yield top, dirs, nondirs
|
yield top, dirs, nondirs
|
||||||
|
|
||||||
@ -455,6 +458,7 @@ if {open, stat} <= supports_dir_fd and {scandir, stat} <= supports_fd:
|
|||||||
if 'CVS' in dirs:
|
if 'CVS' in dirs:
|
||||||
dirs.remove('CVS') # don't visit CVS directories
|
dirs.remove('CVS') # don't visit CVS directories
|
||||||
"""
|
"""
|
||||||
|
sys.audit("os.fwalk", top, topdown, onerror, follow_symlinks, dir_fd)
|
||||||
if not isinstance(top, int) or not hasattr(top, '__index__'):
|
if not isinstance(top, int) or not hasattr(top, '__index__'):
|
||||||
top = fspath(top)
|
top = fspath(top)
|
||||||
# Note: To guard against symlink races, we use the standard
|
# Note: To guard against symlink races, we use the standard
|
||||||
|
@ -1134,6 +1134,7 @@ class Path(PurePath):
|
|||||||
"""Iterate over this subtree and yield all existing files (of any
|
"""Iterate over this subtree and yield all existing files (of any
|
||||||
kind, including directories) matching the given relative pattern.
|
kind, including directories) matching the given relative pattern.
|
||||||
"""
|
"""
|
||||||
|
sys.audit("pathlib.Path.glob", self, pattern)
|
||||||
if not pattern:
|
if not pattern:
|
||||||
raise ValueError("Unacceptable pattern: {!r}".format(pattern))
|
raise ValueError("Unacceptable pattern: {!r}".format(pattern))
|
||||||
drv, root, pattern_parts = self._flavour.parse_parts((pattern,))
|
drv, root, pattern_parts = self._flavour.parse_parts((pattern,))
|
||||||
@ -1148,6 +1149,7 @@ class Path(PurePath):
|
|||||||
directories) matching the given relative pattern, anywhere in
|
directories) matching the given relative pattern, anywhere in
|
||||||
this subtree.
|
this subtree.
|
||||||
"""
|
"""
|
||||||
|
sys.audit("pathlib.Path.rglob", self, pattern)
|
||||||
drv, root, pattern_parts = self._flavour.parse_parts((pattern,))
|
drv, root, pattern_parts = self._flavour.parse_parts((pattern,))
|
||||||
if drv or root:
|
if drv or root:
|
||||||
raise NotImplementedError("Non-relative patterns are unsupported")
|
raise NotImplementedError("Non-relative patterns are unsupported")
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
Added audit for :func:`os.walk`, :func:`os.fwalk`, :meth:`pathlib.Path.glob`
|
||||||
|
and :meth:`pathlib.Path.rglob`.
|
Loading…
x
Reference in New Issue
Block a user